docs: use Deal terminology in official plugins

This commit is contained in:
mirivlad 2026-07-14 23:50:59 +08:00
parent 5ddc63bb8d
commit 484d599a9f
9 changed files with 34 additions and 36 deletions

View File

@ -50,7 +50,7 @@ create a GitHub Release.
deletion is a separate action. deletion is a separate action.
- Saving a browser link creates a collision-safe `.url` file. Opening a link is - Saving a browser link creates a collision-safe `.url` file. Opening a link is
handled by Verstak, so it does not depend on a Linux `.url` file association. handled by Verstak, so it does not depend on a Linux `.url` file association.
- Activity sessions can be scoped to a durable workspace identity or to an - Activity sessions can be scoped to a durable Deal identity or to an
explicit unassigned scope. Journal creation is always a user action. explicit unassigned scope. Journal creation is always a user action.
- Todo is optional: Overview uses it only when the Todo capability is present. - Todo is optional: Overview uses it only when the Todo capability is present.

View File

@ -4,22 +4,22 @@ Browser Inbox is one global queue of browser captures. New and changed records a
stored in `captures:global`; previous `captures` and `captures:workspace:*` keys stored in `captures:global`; previous `captures` and `captures:workspace:*` keys
remain readable for migration compatibility. remain readable for migration compatibility.
Each capture contains `workspaceRootPath` and `processed`. An empty Each capture contains a durable `workspaceId`, its current or historical
`workspaceRootPath` means the capture is **Unassigned**. The global view can filter `workspaceRootPath`, and `processed`. An empty `workspaceRootPath` means the
all captures by assignment, workspace, processed state, and text search. A capture capture is **Unassigned**. The global view can filter all captures by assignment,
Deal, processed state, and text search. A capture
can be assigned, reassigned, made unassigned, marked processed or unprocessed, and can be assigned, reassigned, made unassigned, marked processed or unprocessed, and
deleted. deleted.
The local browser receiver adds the currently active workspace before publishing a The local browser receiver adds the currently active Deal before publishing a
capture event. When it has no active workspace, the capture remains unassigned capture event. When it has no active Deal, the capture remains unassigned
unless an explicit existing domain binding matches it. The frontend never assigns an unless an explicit existing domain binding matches it. The frontend never assigns an
untagged capture merely because a workspace view happens to be open. untagged capture merely because a Deal view happens to be open.
Workspace assignment currently uses the top-level vault folder path as the Deal assignment uses the immutable `workspaceId` stored in Deal metadata;
identifier because the core workspace model has no separate immutable ID. In the `workspaceRootPath` is an address and display value. A rename updates the latter,
current model that path is also the displayed workspace name, so a workspace rename while a newly created folder with the old name cannot take over existing captures.
requires a later reassignment of existing captures.
Workspace Inbox and Overview show only captures whose `workspaceRootPath` exactly Deal Inbox and Overview show only captures whose `workspaceId` matches the selected
matches the selected workspace. Unassigned captures remain visible only in the Deal. Unassigned captures remain visible only in the
global Browser Inbox. global Browser Inbox.

View File

@ -2,12 +2,12 @@
Todos are stored by the official `verstak.todo` plugin under the canonical Todos are stored by the official `verstak.todo` plugin under the canonical
`todos:global` settings key. A todo is global when `workspaceRootPath` is empty; `todos:global` settings key. A todo is global when `workspaceRootPath` is empty;
otherwise that field identifies the top-level workspace folder that owns it. otherwise that field identifies the top-level Deal folder that owns it.
The global Todos view aggregates all records and supports workspace, status, text, The global Todos view aggregates all records and supports Deal, status, text,
and due/reminder/updated sorting filters. The workspace Todos view shows only and due/reminder/updated sorting filters. The Deal Todos view shows only records
records whose `workspaceRootPath` exactly matches the current workspace. This whose `workspaceRootPath` exactly matches the current Deal. This keeps unassigned
keeps unassigned and other-workspace records out of a workspace tab and its and other-Deal records out of a Deal tab and its
Overview signals. Overview signals.
## Stored fields ## Stored fields
@ -20,15 +20,15 @@ Each record has a stable `id`, `title`, optional `description`, optional
## Reminders ## Reminders
The plugin stores reminder metadata and renders clear indicators for overdue, The plugin stores reminder metadata, renders clear indicators for overdue,
due-soon, and reminder-due todos. Verstak does not yet have a notification due-soon, and reminder-due todos, and schedules native desktop notifications when
scheduler, so a reminder does not create a native desktop notification or run in the Desktop notification capability is available. Without that capability, the
the background. reminder remains visible in Todos but is not treated as an error.
## Completed Todo to Journal ## Completed Todo to Journal
From a workspace Todo tab, a completed todo exposes **Create Journal Entry**. It From a Deal Todo tab, a completed todo exposes **Create Journal Entry**. It opens
opens the current workspace Journal with a normal, editable form. The form copies the current Deal Journal with a normal, editable form. The form copies
only factual data from the todo: title, description, completion date, and zero only factual data from the todo: title, description, completion date, and zero
minutes. It never generates a summary, duration, or billable status. minutes. It never generates a summary, duration, or billable status.
@ -40,8 +40,6 @@ own record.
## Visibility ## Visibility
The Plugin Manager can globally enable or disable the Todo plugin. The current The Plugin Manager can globally enable or disable the Todo plugin. A Deal template
workspace host has no per-workspace or template-level contribution filter yet, so controls whether its Todos tab is available; disabling the plugin hides the tab
a globally enabled Todo plugin contributes its tab to every workspace. Template without affecting stored todo records.
visibility will be handled with the workspace/template model rather than by a
Todo-specific exception.

View File

@ -154,7 +154,7 @@
var workspaceRoot = workspaceFromProps(props); var workspaceRoot = workspaceFromProps(props);
var workspaceId = text(props && (props.workspaceId || (props.workspaceNode && props.workspaceNode.workspaceId))).trim(); var workspaceId = text(props && (props.workspaceId || (props.workspaceNode && props.workspaceNode.workspaceId))).trim();
if (!workspaceRoot) { if (!workspaceRoot) {
return { mode: 'global', key: GLOBAL_KEY, label: 'All workspaces', workspaceRoot: '', workspaceId: '' }; return { mode: 'global', key: GLOBAL_KEY, label: 'All Deals', workspaceRoot: '', workspaceId: '' };
} }
return { return {
mode: 'workspace', mode: 'workspace',

View File

@ -459,7 +459,7 @@
if (scope.mode === 'global') { if (scope.mode === 'global') {
filtersEl.appendChild(workspaceFilterEl); filtersEl.appendChild(workspaceFilterEl);
} else { } else {
filtersEl.appendChild(el('span', { className: 'browser-inbox-count', textContent: tr('ui.assignedHere', null, 'Assigned to this workspace') })); filtersEl.appendChild(el('span', { className: 'browser-inbox-count', textContent: tr('ui.assignedHere', null, 'Assigned to this Deal') }));
} }
filtersEl.appendChild(searchInput); filtersEl.appendChild(searchInput);
toolbar.appendChild(filtersEl); toolbar.appendChild(filtersEl);
@ -865,7 +865,7 @@
el('div', { className: 'browser-inbox-meta-value', textContent: formatDate(capture.capturedAt) || '-' }), el('div', { className: 'browser-inbox-meta-value', textContent: formatDate(capture.capturedAt) || '-' }),
el('div', { className: 'browser-inbox-meta-label', textContent: tr('ui.browser', null, 'Browser') }), el('div', { className: 'browser-inbox-meta-label', textContent: tr('ui.browser', null, 'Browser') }),
el('div', { className: 'browser-inbox-meta-value', textContent: capture.browserName || capture.source || '-' }), el('div', { className: 'browser-inbox-meta-value', textContent: capture.browserName || capture.source || '-' }),
el('div', { className: 'browser-inbox-meta-label', textContent: tr('ui.workspace', null, 'Workspace') }), el('div', { className: 'browser-inbox-meta-label', textContent: tr('ui.workspace', null, 'Deal') }),
el('div', { className: 'browser-inbox-meta-value', textContent: capture.workspaceRootPath || tr('ui.unassigned', null, 'Unassigned') }), el('div', { className: 'browser-inbox-meta-value', textContent: capture.workspaceRootPath || tr('ui.unassigned', null, 'Unassigned') }),
el('div', { className: 'browser-inbox-meta-label', textContent: tr('ui.status', null, 'Status') }), el('div', { className: 'browser-inbox-meta-label', textContent: tr('ui.status', null, 'Status') }),
el('div', { className: 'browser-inbox-meta-value', textContent: capture.processed el('div', { className: 'browser-inbox-meta-value', textContent: capture.processed

View File

@ -108,7 +108,7 @@
function scopeFromProps(props) { function scopeFromProps(props) {
var workspaceRoot = workspaceFromProps(props || {}); var workspaceRoot = workspaceFromProps(props || {});
if (!workspaceRoot) return { mode: 'global', key: '', label: 'All workspaces', workspaceRoot: '' }; if (!workspaceRoot) return { mode: 'global', key: '', label: 'All Deals', workspaceRoot: '' };
return { return {
mode: 'workspace', mode: 'workspace',
key: WORKLOG_PREFIX + encodeKey(workspaceRoot), key: WORKLOG_PREFIX + encodeKey(workspaceRoot),

View File

@ -4,7 +4,7 @@
"name": "Journal", "name": "Journal",
"version": "0.1.0", "version": "0.1.0",
"apiVersion": "0.1.0", "apiVersion": "0.1.0",
"description": "Workspace-scoped journal with user-authored entries and optional Activity links.", "description": "Deal-scoped journal with user-authored entries and optional Activity links.",
"localization": { "defaultLocale": "en", "locales": { "en": "locales/en.json", "ru": "locales/ru.json" } }, "localization": { "defaultLocale": "en", "locales": { "en": "locales/en.json", "ru": "locales/ru.json" } },
"source": "official", "source": "official",
"icon": "book-open", "icon": "book-open",

View File

@ -4,7 +4,7 @@
"name": "Search", "name": "Search",
"version": "0.1.0", "version": "0.1.0",
"apiVersion": "0.1.0", "apiVersion": "0.1.0",
"description": "Workspace-scoped vault text search provider.", "description": "Deal-scoped vault text search provider.",
"localization": { "defaultLocale": "en", "locales": { "en": "locales/en.json", "ru": "locales/ru.json" } }, "localization": { "defaultLocale": "en", "locales": { "en": "locales/en.json", "ru": "locales/ru.json" } },
"source": "official", "source": "official",
"icon": "search", "icon": "search",

View File

@ -4,7 +4,7 @@
"name": "Todos", "name": "Todos",
"version": "0.1.0", "version": "0.1.0",
"apiVersion": "0.1.0", "apiVersion": "0.1.0",
"description": "Global and workspace todo tracking with due and reminder metadata.", "description": "Global and Deal-scoped todo tracking with due and reminder metadata.",
"localization": { "defaultLocale": "en", "locales": { "en": "locales/en.json", "ru": "locales/ru.json" } }, "localization": { "defaultLocale": "en", "locales": { "en": "locales/en.json", "ru": "locales/ru.json" } },
"source": "official", "source": "official",
"icon": "list-todo", "icon": "list-todo",