diff --git a/README.md b/README.md index a8749aa..0781131 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ create a GitHub Release. deletion is a separate action. - 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. -- 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. - Todo is optional: Overview uses it only when the Todo capability is present. diff --git a/docs/BROWSER_INBOX.md b/docs/BROWSER_INBOX.md index 7a030e7..755e39a 100644 --- a/docs/BROWSER_INBOX.md +++ b/docs/BROWSER_INBOX.md @@ -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 remain readable for migration compatibility. -Each capture contains `workspaceRootPath` and `processed`. An empty -`workspaceRootPath` means the capture is **Unassigned**. The global view can filter -all captures by assignment, workspace, processed state, and text search. A capture +Each capture contains a durable `workspaceId`, its current or historical +`workspaceRootPath`, and `processed`. An empty `workspaceRootPath` means the +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 deleted. -The local browser receiver adds the currently active workspace before publishing a -capture event. When it has no active workspace, the capture remains unassigned +The local browser receiver adds the currently active Deal before publishing a +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 -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 -identifier because the core workspace model has no separate immutable ID. In the -current model that path is also the displayed workspace name, so a workspace rename -requires a later reassignment of existing captures. +Deal assignment uses the immutable `workspaceId` stored in Deal metadata; +`workspaceRootPath` is an address and display value. A rename updates the latter, +while a newly created folder with the old name cannot take over existing captures. -Workspace Inbox and Overview show only captures whose `workspaceRootPath` exactly -matches the selected workspace. Unassigned captures remain visible only in the +Deal Inbox and Overview show only captures whose `workspaceId` matches the selected +Deal. Unassigned captures remain visible only in the global Browser Inbox. diff --git a/docs/TODOS.md b/docs/TODOS.md index 6cf98f1..6a1c7cd 100644 --- a/docs/TODOS.md +++ b/docs/TODOS.md @@ -2,12 +2,12 @@ Todos are stored by the official `verstak.todo` plugin under the canonical `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, -and due/reminder/updated sorting filters. The workspace Todos view shows only -records whose `workspaceRootPath` exactly matches the current workspace. This -keeps unassigned and other-workspace records out of a workspace tab and its +The global Todos view aggregates all records and supports Deal, status, text, +and due/reminder/updated sorting filters. The Deal Todos view shows only records +whose `workspaceRootPath` exactly matches the current Deal. This keeps unassigned +and other-Deal records out of a Deal tab and its Overview signals. ## Stored fields @@ -20,15 +20,15 @@ Each record has a stable `id`, `title`, optional `description`, optional ## Reminders -The plugin stores reminder metadata and renders clear indicators for overdue, -due-soon, and reminder-due todos. Verstak does not yet have a notification -scheduler, so a reminder does not create a native desktop notification or run in -the background. +The plugin stores reminder metadata, renders clear indicators for overdue, +due-soon, and reminder-due todos, and schedules native desktop notifications when +the Desktop notification capability is available. Without that capability, the +reminder remains visible in Todos but is not treated as an error. ## Completed Todo to Journal -From a workspace Todo tab, a completed todo exposes **Create Journal Entry**. It -opens the current workspace Journal with a normal, editable form. The form copies +From a Deal Todo tab, a completed todo exposes **Create Journal Entry**. It opens +the current Deal Journal with a normal, editable form. The form copies only factual data from the todo: title, description, completion date, and zero minutes. It never generates a summary, duration, or billable status. @@ -40,8 +40,6 @@ own record. ## Visibility -The Plugin Manager can globally enable or disable the Todo plugin. The current -workspace host has no per-workspace or template-level contribution filter yet, so -a globally enabled Todo plugin contributes its tab to every workspace. Template -visibility will be handled with the workspace/template model rather than by a -Todo-specific exception. +The Plugin Manager can globally enable or disable the Todo plugin. A Deal template +controls whether its Todos tab is available; disabling the plugin hides the tab +without affecting stored todo records. diff --git a/plugins/activity/frontend/src/index.js b/plugins/activity/frontend/src/index.js index 5030482..638b560 100644 --- a/plugins/activity/frontend/src/index.js +++ b/plugins/activity/frontend/src/index.js @@ -154,7 +154,7 @@ var workspaceRoot = workspaceFromProps(props); var workspaceId = text(props && (props.workspaceId || (props.workspaceNode && props.workspaceNode.workspaceId))).trim(); 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 { mode: 'workspace', diff --git a/plugins/browser-inbox/frontend/src/index.js b/plugins/browser-inbox/frontend/src/index.js index d42513e..387f4ee 100644 --- a/plugins/browser-inbox/frontend/src/index.js +++ b/plugins/browser-inbox/frontend/src/index.js @@ -459,7 +459,7 @@ if (scope.mode === 'global') { filtersEl.appendChild(workspaceFilterEl); } 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); toolbar.appendChild(filtersEl); @@ -865,7 +865,7 @@ 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-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-label', textContent: tr('ui.status', null, 'Status') }), el('div', { className: 'browser-inbox-meta-value', textContent: capture.processed diff --git a/plugins/journal/frontend/src/index.js b/plugins/journal/frontend/src/index.js index 9145647..c4b4808 100644 --- a/plugins/journal/frontend/src/index.js +++ b/plugins/journal/frontend/src/index.js @@ -108,7 +108,7 @@ function scopeFromProps(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 { mode: 'workspace', key: WORKLOG_PREFIX + encodeKey(workspaceRoot), diff --git a/plugins/journal/plugin.json b/plugins/journal/plugin.json index 28b04ed..3f2aaf0 100644 --- a/plugins/journal/plugin.json +++ b/plugins/journal/plugin.json @@ -4,7 +4,7 @@ "name": "Journal", "version": "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" } }, "source": "official", "icon": "book-open", diff --git a/plugins/search/plugin.json b/plugins/search/plugin.json index 84c6458..ac626fb 100644 --- a/plugins/search/plugin.json +++ b/plugins/search/plugin.json @@ -4,7 +4,7 @@ "name": "Search", "version": "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" } }, "source": "official", "icon": "search", diff --git a/plugins/todo/plugin.json b/plugins/todo/plugin.json index 5c919f3..e303e6a 100644 --- a/plugins/todo/plugin.json +++ b/plugins/todo/plugin.json @@ -4,7 +4,7 @@ "name": "Todos", "version": "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" } }, "source": "official", "icon": "list-todo",