Commit Graph

157 Commits (22b05f57b464c2d66f20ab7b21920e3987468252)

Author SHA1 Message Date
mirivlad 22b05f57b4 fix: show inbox capture target context 2026-06-05 08:10:33 +08:00
mirivlad a8df9d118c fix: hide explorer action for inbox links 2026-06-05 08:07:39 +08:00
mirivlad 91b5629e01 fix: open inbox artifacts by type 2026-06-05 08:06:06 +08:00
mirivlad db47d31183 docs: describe unified capture inbox flow 2026-06-05 07:51:08 +08:00
mirivlad 4755d3199d chore: update embedded gui assets 2026-06-05 07:51:00 +08:00
mirivlad 0e5d13ff01 fix: ignore global hotkeys in editable fields 2026-06-05 07:47:07 +08:00
mirivlad f112e9a2d0 feat: add local inbox and links tabs 2026-06-05 07:44:38 +08:00
mirivlad c1dfc456ec feat: unify frontend capture pipeline 2026-06-05 07:41:15 +08:00
mirivlad 9e70e36f7f feat: add native clipboard capture bridge 2026-06-05 07:34:45 +08:00
mirivlad bcb093d453 feat: resolve inbox links separately 2026-06-05 07:33:10 +08:00
mirivlad 336037d887 feat: track capture context in inbox 2026-06-05 07:30:00 +08:00
mirivlad 6eaa4cda49 feat: assign and delete inbox artifacts 2026-06-05 02:15:27 +08:00
mirivlad a96a316883 feat: capture files and images in inbox 2026-06-05 02:06:21 +08:00
mirivlad 326f6f283d feat: capture clipboard links in inbox gui 2026-06-05 01:55:38 +08:00
mirivlad 44d0be2649 feat: add text and url inbox capture 2026-06-05 01:46:22 +08:00
mirivlad d6ef3a973a feat: model inbox capture artifacts 2026-06-05 01:40:08 +08:00
mirivlad 2e86229350 fix: restrict inbox to captured artifacts 2026-06-05 01:35:27 +08:00
mirivlad 58a74acbf6 test: capture inbox and trash gui smoke 2026-06-05 01:07:51 +08:00
mirivlad cc83cd3476 feat: expose trash in gui 2026-06-05 01:05:57 +08:00
mirivlad 035f877280 feat: add interactive inbox view 2026-06-05 00:59:57 +08:00
mirivlad 02d68ca3f4 feat: edit suggestions before accepting worklog 2026-06-05 00:53:13 +08:00
mirivlad eb6a861310 feat: edit and delete worklog entries 2026-06-05 00:48:12 +08:00
mirivlad 272a7f870b docs: update gui verification workflow 2026-06-04 19:50:44 +08:00
mirivlad 644ec0ed00 test: cover sync conflict warnings 2026-06-04 19:48:02 +08:00
mirivlad cc59f928a8 test: harden file manager regressions 2026-06-04 19:44:28 +08:00
mirivlad 2284f893f8 test: exercise gui smoke actions 2026-06-04 19:39:27 +08:00
mirivlad cb6c06fdc5 fix: style workspace settings actions 2026-06-04 19:34:03 +08:00
mirivlad 767c03ba8c test: add rendered gui smoke harness 2026-06-04 18:59:07 +08:00
mirivlad 20e605bab7 chore: add gui smoke check 2026-06-04 07:49:34 +08:00
mirivlad cc157a2d36 fix: stabilize settings icons and back label 2026-06-04 07:47:40 +08:00
mirivlad c40d8c9dd3 fix: show sync warnings in settings 2026-06-04 03:53:17 +08:00
mirivlad 7641a311cc build: clean embedded assets before copy 2026-06-04 03:50:38 +08:00
mirivlad 7e709e140d build: refresh embedded gui assets 2026-06-04 03:49:12 +08:00
mirivlad 3a20e1b093 docs: update roadmap status from current code 2026-06-04 03:47:31 +08:00
mirivlad bb0bb608e3 chore: sync english locale keys 2026-06-04 03:44:25 +08:00
mirivlad 3c6bc097e1 fix: show manual sync conflicts in gui 2026-06-04 03:39:52 +08:00
mirivlad e2aad19cc4 fix: avoid outgoing ops during remote template apply 2026-06-04 03:36:44 +08:00
mirivlad 0c0b0d98c7 fix: keep plugin templates separate from system templates 2026-06-04 03:34:18 +08:00
mirivlad a526661825 docs: align vault storage documentation with code 2026-06-04 03:32:02 +08:00
mirivlad 58795b66b2 fix: keep default templates and plugins folder working 2026-06-04 03:28:32 +08:00
mirivlad 9d14ba50af test: restore vault and worklog test baseline 2026-06-04 03:25:04 +08:00
mirivlad a69dc845e6 fix: vault init on startup; add nil guards to all bindings; fix SA_ONSTACK signal crash; deduplicate settings button; add i18n for vault error 2026-06-04 00:37:14 +08:00
mirivlad f92394e3d7 feat: settings window polish, sync widget fix, dark form controls
- Fix: settings overlay uses on:click|self so sidebar clicks don't close it
- Fix: openSettings(section) supports opening at specific tab
- Fix: 'Настроить' opens Settings → Синхронизация instead of Общие
- Style: dark theme select with custom arrow, global :global() CSS
- Style: settings cards, section descriptions, button/layout polish
- Style: settings gear buttons (icon-button pattern, 32px, soft hover)
- Style: settings sidebar with disabled stubs, consistent icons
- i18n: add generalDesc, workspaceDesc, appearance, localization keys
2026-06-03 23:09:40 +08:00
mirivlad e30a75c5a0 fix: openActivityTarget navigates to parent folder and previews files
- resolveActivityTarget uses 'targetId'/'targetPath' for all types
  (note, file, folder) instead of type-specific property names
- openActivityTarget for files: resolves the file node via
  GetNodeDetail, navigates to its parent folder in the Files tab,
  then auto-previews the file if it's a previewable type
- For root-level files (no parent_id): loads root items
- Removed spurious OpenFolder(targetPath) call that silently failed
  because OpenFolder expects a node ID, not a filesystem path
2026-06-03 17:32:18 +08:00
mirivlad 4ec03c849f fix: openActivityTarget now loads fileItems before showing Files tab
selectNode() resets fileItems=[] and activeTab='overview'. Setting
activeTab='files' programmatically does not trigger the tab click
handler that calls loadFolder(), so the file tree stays empty.

Fix: explicitly call await loadFolder(selectedNode.id) in the files
branch of openActivityTarget.

Also: unified resolveActivityTarget return shape to always use
targetId/targetPath regardless of targetType.
2026-06-03 17:23:42 +08:00
mirivlad 0bebcdce8c docs: update AGENTS.md with WriteDebugLog, regression tests, resolveActivityTarget 2026-06-03 17:07:00 +08:00
mirivlad 3e55b08e6f feat: WriteDebugLog binding writes frontend logs to <vault>/.verstak/debug.log
- New cmd/verstak-gui/bindings_debug.go: WriteDebugLog(msg) appends a
  timestamped line to the vault's .verstak/debug.log
- Frontend: console.log replaced with writeDebugLog() which calls
  wailsCall('WriteDebugLog', ...) — works in production Wails builds
- Both acceptTodaySuggestion and acceptJournalSuggestion log eventIds,
  events, and errors to the file
2026-06-03 17:06:17 +08:00
mirivlad 9338b0a851 test: add journal regression, repeated activity, manual entry tests + resolveActivityTarget helper
Tests added to suggest_test.go:
- TestJournalFullRegression: GetSuggestions -> verify eventIds match
  events -> AcceptSuggestionWith -> verify all 3 linked via
  worklog_entry_events + JOIN + GetWorklogEntryEvents
- TestSuggestionOnRepeatedActivity: first event accepted, new event
  created -> GetSuggestions still returns suggestion for the new event
- TestManualWorklogEntry: CreateWorklogFull -> source=manual,
  billable/approximate/details preserved, GetWorklogEntryEvents empty

Frontend:
- resolveActivityTarget(ev) pure function returning { nodeId, tab,
  noteId/fileId/targetPath } based on targetType
- openActivityTarget(ev) uses resolveActivityTarget for navigation
2026-06-03 16:49:30 +08:00
mirivlad db869a7c97 docs: update AGENTS.md with Wails []string fix, event link validation, openActivityTarget 2026-06-03 16:00:54 +08:00
mirivlad b42aa35ee8 fix: bypass Wails v2 []string marshalling via JSON.stringify + end-to-end test
Root cause: Wails v2.12.0 cannot reliably marshal []string arguments
from JavaScript to Go when called through positional binding.
The event IDs array arrived empty on the Go side, causing no
worklog_entry_events INSERTs.

Fix:
- AcceptSuggestionWith now accepts eventIDsJSON (string) instead of
  eventIDs ([]string). Frontend passes JSON.stringify(eventIds).
- Backend json.Unmarshal into []string before validation.
- Pre-insert validation: each eventID checked in activity_events.
- Atomic tx: entry create + linking in single Begin/Commit.
- INSERT (not INSERT OR IGNORE) — failure is a hard error.
- Post-commit verification: JOIN COUNT(*) must match len(eventIDs).
- End-to-end test: TestAcceptSuggestionWithEndToEnd creates a node,
  3 activity events, accepts suggestion, verifies all 3 linked.

Other changes:
- GetWorklogEntryEvents: fixed column name (details_json -> metadata).
- openActivityTarget(ev): new function for 'Посмотреть' button that
  navigates to specific note/file/folder instead of just opening node.
- All 'openNodeById(ev.nodeId)' in event contexts replaced with
  'openActivityTarget(ev)'.
2026-06-03 16:00:17 +08:00