fix(e2e): increase fallback multiplier to 4.0× and workflow timeout to 40min

- Increase calibration fallback from 3.0× to 4.0× (100s per step) to accommodate
  slow native module initialization (nsfw watcher) in CI environments
- Update workflow timeout from 30min to 40min with calculation formula in comments
- Add guidance for future timeout adjustments based on scenario count growth
This commit is contained in:
linonetwo 2026-05-01 19:10:53 +08:00
parent 08d600cbdc
commit 5918e4f989
6 changed files with 614 additions and 3 deletions

View file

@ -0,0 +1,59 @@
[
{
"id": "proc_2026-04-29T1653_10415f",
"workspaceId": "mok8a5od",
"title": "prepare-e2e-build",
"command": "cd I:\\github\\TidGi-Desktop && pnpm run test:prepare-e2e 2>&1",
"cwd": "I:\\github\\TidGi-Desktop",
"status": "stopped",
"pid": 28884,
"startedAt": "2026-04-29T16:53:10.482Z",
"outputSizeBytes": 6774,
"notify": {
"sessionID": "ses_226dff628ffeEh32ekLSF2Ug9D",
"directory": "I:\\github\\TidGi-Desktop",
"sentAt": "2026-04-29T16:54:24.363Z"
},
"terminalReason": "finished",
"exitCode": 0,
"stoppedAt": "2026-04-29T16:54:24.349Z"
},
{
"id": "proc_2026-04-30T0023_0c6a5f",
"workspaceId": "mok8a5od",
"title": "ci-unit-tests",
"command": "cd I:\\github\\TidGi-Desktop && pnpm run test:unit 2>&1",
"cwd": "I:\\github\\TidGi-Desktop",
"status": "error",
"pid": 9852,
"startedAt": "2026-04-30T00:23:45.641Z",
"outputSizeBytes": 24244,
"notify": {
"sessionID": "ses_226dff628ffeEh32ekLSF2Ug9D",
"directory": "I:\\github\\TidGi-Desktop",
"sentAt": "2026-04-30T00:24:44.130Z"
},
"terminalReason": "failed",
"exitCode": 1,
"stoppedAt": "2026-04-30T00:24:44.114Z"
},
{
"id": "proc_2026-04-30T0024_74f973",
"workspaceId": "mok8a5od",
"title": "ci-e2e-prepare",
"command": "cd I:\\github\\TidGi-Desktop && pnpm run test:prepare-e2e 2>&1",
"cwd": "I:\\github\\TidGi-Desktop",
"status": "stopped",
"pid": 12620,
"startedAt": "2026-04-30T00:24:03.166Z",
"outputSizeBytes": 6774,
"notify": {
"sessionID": "ses_226dff628ffeEh32ekLSF2Ug9D",
"directory": "I:\\github\\TidGi-Desktop",
"sentAt": "2026-04-30T00:25:26.476Z"
},
"terminalReason": "finished",
"exitCode": 0,
"stoppedAt": "2026-04-30T00:25:26.466Z"
}
]

View file

@ -0,0 +1,159 @@
> tidgi@0.13.0 test:prepare-e2e I:\github\TidGi-Desktop
> cross-env READ_DOC_BEFORE_USING='docs/Testing.md' && pnpm run clean && pnpm run build:plugin && cross-env NODE_ENV=test DEBUG=electron-forge:* electron-forge package
> tidgi@0.13.0 clean I:\github\TidGi-Desktop
> pnpm run clean:cache && rimraf -- ./out ./logs ./userData-dev ./userData-test ./wiki-dev ./wiki-test ./test-artifacts ./node_modules/tiddlywiki/plugins/linonetwo
> tidgi@0.13.0 clean:cache I:\github\TidGi-Desktop
> rimraf -- ./node_modules/.vite .vite
> tidgi@0.13.0 build:plugin I:\github\TidGi-Desktop
> zx scripts/compilePlugins.mjs
Starting plugin compilation...
Building plugin: tidgi-ipc-syncadaptor
Output directories: 1
...ins\linonetwo\tidgi-ipc-syncadaptor\Startup\mount-tidgi-service.js 883b
Done in 10ms
...ywiki\plugins\linonetwo\tidgi-ipc-syncadaptor\fix-location-info.js 9.0kb
Done in 12ms
...lywiki\plugins\linonetwo\tidgi-ipc-syncadaptor\ipc-syncadaptor.js 24.7kb
Done in 15ms
...ugins\linonetwo\tidgi-ipc-syncadaptor\Startup\electron-ipc-cat.js 32.9kb
Done in 18ms
✓ Copied tidgi-ipc-syncadaptor to: I:\github\TidGi-Desktop\node_modules\tiddlywiki\plugins\linonetwo\tidgi-ipc-syncadaptor
✓ Completed tidgi-ipc-syncadaptor
Building plugin: tidgi-ipc-syncadaptor-ui
Output directories: 1
✓ Copied tidgi-ipc-syncadaptor-ui to: I:\github\TidGi-Desktop\node_modules\tiddlywiki\plugins\linonetwo\tidgi-ipc-syncadaptor-ui
✓ Completed tidgi-ipc-syncadaptor-ui
Building plugin: watch-filesystem-adaptor
Output directories: 1
...es\tiddlywiki\plugins\linonetwo\watch-filesystem-adaptor\loader.js 283b
Done in 4ms
...lywiki\plugins\linonetwo\watch-filesystem-adaptor\in-tagtree-of.js 2.2kb
Done in 5ms
...i\plugins\linonetwo\watch-filesystem-adaptor\routingUtilities.js 228.3kb
Done in 23ms
...ins\linonetwo\watch-filesystem-adaptor\WatchFileSystemAdaptor.js 681.8kb
Done in 56ms
✓ Copied watch-filesystem-adaptor to: I:\github\TidGi-Desktop\node_modules\tiddlywiki\plugins\linonetwo\watch-filesystem-adaptor
✓ Completed watch-filesystem-adaptor
✓ All plugins compiled successfully!
> Checking your system
2026-04-29T16:53:14.311Z electron-forge:check-system checking system, create ~/.skip-forge-system-check to stop doing this
> Checking package manager version
2026-04-29T16:53:14.314Z electron-forge:package-manager Resolved package manager to pnpm. (Derived from NODE_INSTALLER: undefined, npm_config_user_agent: pnpm/10.33.0 npm/? node/v22.20.0 win32 x64, lockfile: pnpm)
2026-04-29T16:53:14.916Z electron-forge:check-system Custom hoist pattern detected {"hoistPattern":"undefined","publicHoistPattern":"WARN `pnpm config get` would display an array as comma-separated list due to legacy implementation, use `--json` to print them as json\n*eslint*"}, assuming that the user has configured pnpm to package dependencies.
√ Found pnpm@10.33.0
√ Checking your system
[?25h> Preparing to package application
2026-04-29T16:53:15.615Z electron-forge:project-resolver searching for project in: I:\github\TidGi-Desktop
2026-04-29T16:53:15.619Z electron-forge:project-resolver package.json with forge dependency found in I:\github\TidGi-Desktop\package.json
2026-04-29T16:53:15.910Z electron-forge:plugin:vite hooking process events
√ Preparing to package application
> Running packaging hooks
> Running generateAssets hook
√ Running generateAssets hook
> Running prePackage hook
> [plugin-vite] Building production Vite bundles
> Building main and preload targets...
> Building renderer targets...
> Building src/main.ts target
> Building src/preload/index.ts target
2026-04-29T16:53:24.750Z electron-forge:plugin:vite no error in buildEnd and reached closeBundle so build succeeded
√ Building src/preload/index.ts target
2026-04-29T16:53:37.016Z electron-forge:plugin:vite no error in buildEnd and reached closeBundle so build succeeded
√ Building src/main.ts target
√ Building main and preload targets...
√ Built target renderer
√ Building renderer targets...
√ [plugin-vite] Building production Vite bundles
√ Running prePackage hook
√ Running packaging hooks
> Packaging application
Determining targets...
2026-04-29T16:54:01.998Z electron-forge:packager packaging with options {
asar: {
unpack: '{{**/.webpack/main/*.worker.*,**/.webpack/main/native_modules/path.txt,**/{.**,**}/**/*.node},**/{.**,**}/**/*.node}'
},
overwrite: true,
ignore: [Function (anonymous)],
quiet: true,
name: 'TidGi',
executableName: 'tidgi',
win32metadata: {
CompanyName: 'TiddlyWiki Community',
OriginalFilename: 'TidGi Desktop'
},
protocols: [ { name: 'TidGi Launch Protocol', schemes: [Array] } ],
icon: 'build-resources/icon.ico',
extraResource: [
'localization',
'template/wiki',
'build-resources/tidgiMiniWindow@2x.png',
'build-resources/tidgiMiniWindowTemplate@2x.png'
],
mac: {
category: 'productivity',
target: 'dmg',
icon: 'build-resources/icon.icns',
electronLanguages: [ 'en', 'zh-Hans', 'zh-Hant', 'ja', 'fr', 'ru' ]
},
appBundleId: 'com.tidgi',
afterPrune: [ [Function (anonymous)] ],
beforeAsar: [ [Function: _default] ],
dir: 'I:\\github\\TidGi-Desktop',
arch: 'x64',
platform: 'win32',
afterFinalizePackageTargets: [ [Function (anonymous)] ],
afterComplete: [ [Function (anonymous)] ],
afterCopy: [ [Function (anonymous)] ],
afterExtract: [ [Function (anonymous)] ],
out: 'I:\\github\\TidGi-Desktop\\out',
electronVersion: '41.1.1'
}
2026-04-29T16:54:02.008Z electron-forge:packager targets: [ { platform: 'win32', arch: 'x64' } ]
> Packaging for x64 on win32
> Copying files
> Preparing native dependencies
> Finalizing package
√ Copying files
√ Preparing native dependencies
Copy npm packages with node-worker dependencies with binary (dugite) or __filename usages (tiddlywiki), which cannot be prepared properly by webpack
Copying tiddlywiki dependency to dist
Copying packagePathsToCopyDereferenced
Copy dugite
Copy registry-js (Windows only)
√ Finalizing package
√ Packaging for x64 on win32
√ Packaging application
> Running postPackage hook
2026-04-29T16:54:23.631Z electron-forge:packager outputPaths: [ 'I:\\github\\TidGi-Desktop\\out\\TidGi-win32-x64' ]
√ Running postPackage hook
[?25h2026-04-29T16:54:23.632Z electron-forge:plugin:vite handling process exit with: { cleanup: true }

View file

@ -0,0 +1,230 @@
> tidgi@0.13.0 test:unit I:\github\TidGi-Desktop
> cross-env ELECTRON_RUN_AS_NODE=1 ./node_modules/.bin/electron --max-old-space-size=8192 ./node_modules/vitest/vitest.mjs run
 DEPRECATED  "environmentMatchGlobs" is deprecated. Use `test.projects` to define different configurations instead.
 RUN  v3.2.4 I:/github/TidGi-Desktop
✓ src/services/agentInstance/tools/__tests__/wikiSearchPlugin.test.ts (11 tests) 21ms
✓ src/services/agentInstance/tools/__tests__/wikiOperationPlugin.test.ts (7 tests) 12ms
✓ src/services/wiki/plugin/watchFileSystemAdaptor/__tests__/FileSystemAdaptor.routing.test.ts (24 tests) 14ms
✓ src/services/wikiEmbedding/__tests__/index.test.ts (6 tests) 232ms
✓ src/pages/ChatTabContent/components/MessageRenderer/__tests__/MessageRenderers.test.tsx (29 tests) 711ms
✓ src/services/wikiEmbedding/__tests__/sqlite-vec.test.ts (8 tests) 57ms
✓ src/services/agentInstance/agentFrameworks/__tests__/taskAgent.test.ts (4 tests) 189ms
✓ src/pages/ChatTabContent/components/__tests__/MessageBubble.test.tsx (9 tests) 201ms
✓ src/windows/Preferences/sections/__tests__/TidGiMiniWindow.test.tsx (29 tests) 2452ms
✓ src/services/agentInstance/tools/__tests__/messageManagementPlugin.test.ts (3 tests) 291ms
✓ src/services/agentInstance/__tests__/index.streaming.test.ts (4 tests) 104ms
✓ src/pages/Agent/TabContent/TabTypes/__tests__/CreateNewAgentContent.test.tsx (16 tests) 811ms
✓ src/services/agentInstance/tools/__tests__/fullReplacementPlugin.duration.test.ts (4 tests) 6ms
✓ src/components/__tests__/KeyboardShortcutRegister.test.tsx (20 tests) 2059ms
✓ KeyboardShortcutRegister Component > Confirm functionality > should close dialog after confirm  303ms
✓ src/pages/ChatTabContent/components/PromptPreviewDialog/__tests__/PromptPreviewDialog.promptConcat.test.tsx (3 tests) 366ms
✓ src/services/agentInstance/__tests__/scheduledTaskManager.test.ts (12 tests) 15ms
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render General section with key settings
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Performance section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Downloads section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Network section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Privacy section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Updates section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Miscellaneous section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
stderr | src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx > Preferences - All Sections Rendering > should render Notifications section
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
MUI: You have provided an out-of-range value `zh-Hans` for the select component.
Consider providing a value that matches one of the available options or ''.
The available values are "".
✓ src/windows/Preferences/__tests__/AllSectionsRendering.test.tsx (11 tests | 3 skipped) 1908ms
✓ Preferences - All Sections Rendering > should render General section with key settings  587ms
✓ src/services/agentInstance/agentFrameworks/__tests__/taskAgent.failure.test.ts (2 tests) 548ms
✓ basicPromptConcatHandler - failure path persists error message and logs > should cover two-round flow: tool_use then Chat.ConfigError.AIProviderError and print ordering  440ms
✓ src/windows/AddWorkspace/__tests__/NewWikiForm.test.tsx (12 tests) 1769ms
✓ NewWikiForm Component > User Interaction Tests > should handle wiki folder name input change  334ms
✓ NewWikiForm Component > User Interaction Tests > should handle tag name input for sub workspace  379ms
✓ src/services/wiki/plugin/watchFileSystemAdaptor/__tests__/FileSystemAdaptor.delete.test.ts (12 tests) 8ms
✓ src/services/wiki/plugin/watchFileSystemAdaptor/__tests__/InverseFilesIndex.test.ts (18 tests) 9ms
 src/services/workspaces/__tests__/useTidgiConfigSync.test.ts (8 tests | 2 failed) 23ms
 × Workspace useTidgiConfigSync > create > should set useTidgiConfigSync to true by default when creating workspace 16ms
 → No bindings found for service: "Symbol(Analytics)".
Trying to resolve bindings for "Symbol(Analytics) (Root service)".
Binding constraints:
- service identifier: Symbol(Analytics)
- name: -
 × Workspace useTidgiConfigSync > create > should set useTidgiConfigSync to false when useTidgiConfig is false 1ms
 → No bindings found for service: "Symbol(Analytics)".
Trying to resolve bindings for "Symbol(Analytics) (Root service)".
Binding constraints:
- service identifier: Symbol(Analytics)
- name: -
✓ Workspace useTidgiConfigSync > set > should write tidgi.config.json and strip syncable fields from settings.json when useTidgiConfigSync is true and tidgi.config.json exists 3ms
✓ Workspace useTidgiConfigSync > set > should NOT write tidgi.config.json and should keep syncable fields in settings.json when useTidgiConfigSync is false 1ms
✓ Workspace useTidgiConfigSync > set > should NOT write tidgi.config.json even when syncable fields changed if useTidgiConfigSync is false 0ms
✓ Workspace useTidgiConfigSync > sanitizeWorkspace > should read tidgi.config.json during initial load when useTidgiConfigSync is true 0ms
✓ Workspace useTidgiConfigSync > sanitizeWorkspace > should NOT read tidgi.config.json during initial load when useTidgiConfigSync is false 0ms
✓ Workspace useTidgiConfigSync > sanitizeWorkspace > should not read tidgi.config.json during runtime updates regardless of useTidgiConfigSync 0ms
✓ src/__tests__/security/injection-prevention.test.ts (20 tests) 4ms
✓ src/services/agentInstance/tools/__tests__/workspacesListPlugin.test.ts (5 tests) 19ms
✓ src/services/agentDefinition/__tests__/index.test.ts (6 tests) 215ms
✓ src/services/wiki/plugin/watchFileSystemAdaptor/__tests__/FileSystemAdaptor.save.test.ts (14 tests) 9462ms
✓ FileSystemAdaptor - Save Operations > saveTiddler - File Lock Retry > should give up after max retries on persistent lock  9233ms
✓ src/services/agentDefinition/__tests__/responsePatternUtility.test.ts (14 tests) 7ms
✓ src/windows/Preferences/sections/ExternalAPI/__tests__/index.test.tsx (12 tests) 2798ms
✓ ExternalAPI Component > should render loading state initially  428ms
✓ ExternalAPI Component > should show model selectors with autocomplete inputs  384ms
✓ ExternalAPI Component > should call delete API when default model is cleared and no embedding model exists  455ms
✓ ExternalAPI Component > should only clear default field when embedding model exists  339ms
✓ ExternalAPI Component > should call delete API when embedding model is cleared via autocomplete  348ms
✓ src/windows/Preferences/sections/ExternalAPI/__tests__/useAIConfigManagement.test.ts (7 tests) 512ms
✓ src/helpers/__tests__/url.test.ts (23 tests) 4ms
✓ src/services/externalAPI/__tests__/autoFillDefaultModels.test.ts (6 tests) 4ms
✓ src/pages/Agent/TabContent/TabTypes/__tests__/EditAgentDefinitionContent.test.tsx (18 tests) 8311ms
✓ EditAgentDefinitionContent > should handle agent name changes  4483ms
✓ EditAgentDefinitionContent > should show current agent information in form fields  357ms
✓ EditAgentDefinitionContent > should handle save button click  513ms
✓ EditAgentDefinitionContent > should disable save button when agent name is empty  532ms
✓ EditAgentDefinitionContent > should handle save action  431ms
✓ src/services/agentDefinition/__tests__/responsePatternUtility.security.test.ts (16 tests) 7ms
✓ src/windows/Preferences/sections/__tests__/Sync.timezone.test.ts (13 tests) 4ms
✓ src/services/agentInstance/__tests__/backgroundTaskSettings.test.ts (4 tests) 5ms
✓ src/services/wiki/plugin/watchFileSystemAdaptor/__tests__/FileSystemAdaptor.basic.test.ts (12 tests) 9ms
✓ src/pages/Main/__tests__/index.test.tsx (5 tests) 1234ms
✓ Main Page > should display workspace names and icons in sidebar  477ms
✓ src/services/wiki/wikiWorker/__tests__/ipcServerRoutes.test.ts (5 tests) 5ms
✓ src/services/agentInstance/__tests__/index.failure.test.ts (1 test) 119ms
✓ src/pages/Agent/TabContent/TabTypes/__tests__/NewTabContent.test.tsx (9 tests) 693ms
✓ src/components/TokenForm/__tests__/GitTokenForm.test.tsx (4 tests) 1766ms
✓ GitTokenForm > should update form when userInfo changes after OAuth login (BUG TEST)  343ms
✓ GitTokenForm > should call auth.set when user types in input fields  808ms
✓ GitTokenForm > should update form when userInfo is overwritten  319ms
✓ src/services/agentInstance/utilities/__tests__/schemaToToolContent.test.ts (6 tests) 6ms
✓ src/services/externalAPI/__tests__/externalAPI.logging.test.ts (2 tests) 98ms
✓ src/services/agentInstance/utilities/__tests__/messageDurationFilter.test.ts (9 tests) 5ms
✓ src/services/agentInstance/__tests__/index.wikiOperation.test.ts (1 test) 85ms
✓ src/windows/Preferences/sections/ExternalAPI/components/__tests__/ProviderConfig.test.tsx (5 tests) 808ms
✓ src/services/agentInstance/promptConcat/__tests__/promptConcatWithImage.test.ts (2 tests) 122ms
✓ src/services/preferences/definitions/__tests__/schemaValidation.test.ts (8 tests) 7ms
✓ src/services/agentInstance/promptConcat/__tests__/flattenPrompts.test.ts (3 tests) 3ms
✓ src/components/StorageService/__tests__/SearchGithubRepo.test.tsx (2 tests) 315ms
✓ src/pages/ChatTabContent/components/PromptPreviewDialog/__tests__/PromptPreviewDialog.ui.test.tsx (2 tests) 465ms
✓ PromptPreviewDialog - Tool Information Rendering > should render dialog when open=true  406ms
✓ src/constants/__tests__/appPaths.test.ts (5 tests) 4ms
✓ src/windows/Preferences/sections/ExternalAPI/components/__tests__/NewModelDialog.test.tsx (7 tests) 877ms
✓ NewModelDialog - ComfyUI workflow support > should show workflow file input for ComfyUI provider  407ms
✓ src/services/wiki/wikiWorker/__tests__/applyInitialPalette.test.ts (3 tests) 5ms
✓ src/services/agentInstance/__tests__/agentRepository.test.ts (3 tests) 4ms
✓ src/services/libs/__tests__/port.test.ts (5 tests) 34ms
✓ src/services/agentDefinition/__tests__/getAgentDefinitionTemplatesFromWikis.test.ts (2 tests) 3ms
✓ src/services/workspaces/__tests__/tokenAuth.test.ts (2 tests) 3ms
✓ src/pages/ChatTabContent/components/__tests__/PromptTree.test.tsx (1 test) 79ms
✓ src/services/agentInstance/__tests__/utilities.test.ts (2 tests) 3ms
✓ src/windows/Preferences/sections/ExternalAPI/__tests__/addProviderIntegration.test.tsx (4 tests) 1090ms
✓ ExternalAPI Add Provider with Embedding Model > should show add provider functionality  419ms
✓ ExternalAPI Add Provider with Embedding Model > should handle embedding model selection correctly  437ms
stdout | src/services/context/__tests__/contextService.spec.ts
[viteEntry] Using production file URL: file://I:/github/TidGi-Desktop/src/services/renderer/index.html __dirname: I:\github\TidGi-Desktop\src\services\windows
✓ src/services/context/__tests__/contextService.spec.ts (2 tests) 2ms
✓ src/__tests__/environment.test.ts (5 tests) 2ms
Sourcemap for "I:/github/TidGi-Desktop/node_modules/git-sync-js/dist/src/inspect.js" points to missing source files
Sourcemap for "I:/github/TidGi-Desktop/node_modules/git-sync-js/dist/src/errors.js" points to missing source files
Sourcemap for "I:/github/TidGi-Desktop/node_modules/git-sync-js/dist/src/interface.js" points to missing source files
Sourcemap for "I:/github/TidGi-Desktop/node_modules/git-sync-js/dist/src/utils.js" points to missing source files
✓ src/services/git/__tests__/gitSyncRepoDetection.test.ts (1 test) 476ms
✓ git-sync-js repo detection compatibility > treats Windows path format differences and benign stderr as a valid git repository  475ms
✓ features/supports/mockOpenAI.test.ts (6 tests) 15115ms
✓ Mock OpenAI Server > should integrate with streamFromProvider (SDK) for streaming responses  15053ms
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯
 FAIL  src/services/workspaces/__tests__/useTidgiConfigSync.test.ts > Workspace useTidgiConfigSync > create > should set useTidgiConfigSync to true by default when creating workspace
 FAIL  src/services/workspaces/__tests__/useTidgiConfigSync.test.ts > Workspace useTidgiConfigSync > create > should set useTidgiConfigSync to false when useTidgiConfig is false
Error: No bindings found for service: "Symbol(Analytics)".
Trying to resolve bindings for "Symbol(Analytics) (Root service)".
Binding constraints:
- service identifier: Symbol(Analytics)
- name: -
  throwBindingNotFoundError node_modules/@inversifyjs/core/src/planning/calculations/throwErrorWhenUnexpectedBindingsAmountFound.ts:59:9
  throwErrorWhenMultipleUnexpectedBindingsAmountFound node_modules/@inversifyjs/core/src/planning/calculations/throwErrorWhenUnexpectedBindingsAmountFound.ts:72:7
  throwErrorWhenUnexpectedBindingsAmountFound node_modules/@inversifyjs/core/src/planning/calculations/throwErrorWhenUnexpectedBindingsAmountFound.ts:26:5
  checkServiceNodeSingleInjectionBindings node_modules/@inversifyjs/core/src/planning/calculations/checkServiceNodeSingleInjectionBindings.ts:35:3
  buildPlanServiceNode node_modules/@inversifyjs/core/src/planning/actions/curryBuildPlanServiceNode.ts:63:7
  plan node_modules/@inversifyjs/core/src/planning/actions/plan.ts:103:42
  Y.buildPlanResult node_modules/@inversifyjs/container/src/container/services/ServiceResolutionManager.ts:260:36
  Y.get node_modules/@inversifyjs/container/src/container/services/ServiceResolutionManager.ts:80:41
  ne.get node_modules/@inversifyjs/container/src/container/services/Container.ts:111:43
  ne.<anonymous> src/services/workspaces/__tests__/useTidgiConfigSync.test.ts:67:33
 65|  }
 66|  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
 67|  return actual.container.get(identifier);
 |  ^
 68|  }),
 69|  }),
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯
 Test Files  1 failed | 64 passed (65)
 Tests  2 failed | 529 passed | 3 skipped (534)
 Start at  08:23:47
 Duration  55.49s (transform 3.66s, setup 71.52s, collect 57.67s, tests 56.59s, environment 38.36s, prepare 5.39s)
ELIFECYCLE Command failed with exit code 1.

View file

@ -0,0 +1,159 @@
> tidgi@0.13.0 test:prepare-e2e I:\github\TidGi-Desktop
> cross-env READ_DOC_BEFORE_USING='docs/Testing.md' && pnpm run clean && pnpm run build:plugin && cross-env NODE_ENV=test DEBUG=electron-forge:* electron-forge package
> tidgi@0.13.0 clean I:\github\TidGi-Desktop
> pnpm run clean:cache && rimraf -- ./out ./logs ./userData-dev ./userData-test ./wiki-dev ./wiki-test ./test-artifacts ./node_modules/tiddlywiki/plugins/linonetwo
> tidgi@0.13.0 clean:cache I:\github\TidGi-Desktop
> rimraf -- ./node_modules/.vite .vite
> tidgi@0.13.0 build:plugin I:\github\TidGi-Desktop
> zx scripts/compilePlugins.mjs
Starting plugin compilation...
Building plugin: tidgi-ipc-syncadaptor
Output directories: 1
...ins\linonetwo\tidgi-ipc-syncadaptor\Startup\mount-tidgi-service.js 883b
Done in 10ms
...ywiki\plugins\linonetwo\tidgi-ipc-syncadaptor\fix-location-info.js 9.0kb
Done in 13ms
...lywiki\plugins\linonetwo\tidgi-ipc-syncadaptor\ipc-syncadaptor.js 24.7kb
Done in 19ms
...ugins\linonetwo\tidgi-ipc-syncadaptor\Startup\electron-ipc-cat.js 32.9kb
Done in 20ms
✓ Copied tidgi-ipc-syncadaptor to: I:\github\TidGi-Desktop\node_modules\tiddlywiki\plugins\linonetwo\tidgi-ipc-syncadaptor
✓ Completed tidgi-ipc-syncadaptor
Building plugin: tidgi-ipc-syncadaptor-ui
Output directories: 1
✓ Copied tidgi-ipc-syncadaptor-ui to: I:\github\TidGi-Desktop\node_modules\tiddlywiki\plugins\linonetwo\tidgi-ipc-syncadaptor-ui
✓ Completed tidgi-ipc-syncadaptor-ui
Building plugin: watch-filesystem-adaptor
Output directories: 1
...es\tiddlywiki\plugins\linonetwo\watch-filesystem-adaptor\loader.js 283b
Done in 5ms
...lywiki\plugins\linonetwo\watch-filesystem-adaptor\in-tagtree-of.js 2.2kb
Done in 6ms
...i\plugins\linonetwo\watch-filesystem-adaptor\routingUtilities.js 228.3kb
Done in 28ms
...ins\linonetwo\watch-filesystem-adaptor\WatchFileSystemAdaptor.js 681.8kb
Done in 62ms
✓ Copied watch-filesystem-adaptor to: I:\github\TidGi-Desktop\node_modules\tiddlywiki\plugins\linonetwo\watch-filesystem-adaptor
✓ Completed watch-filesystem-adaptor
✓ All plugins compiled successfully!
> Checking your system
2026-04-30T00:24:07.305Z electron-forge:check-system checking system, create ~/.skip-forge-system-check to stop doing this
> Checking package manager version
2026-04-30T00:24:07.310Z electron-forge:package-manager Resolved package manager to pnpm. (Derived from NODE_INSTALLER: undefined, npm_config_user_agent: pnpm/10.33.0 npm/? node/v22.20.0 win32 x64, lockfile: pnpm)
2026-04-30T00:24:08.070Z electron-forge:check-system Custom hoist pattern detected {"hoistPattern":"undefined","publicHoistPattern":"WARN `pnpm config get` would display an array as comma-separated list due to legacy implementation, use `--json` to print them as json\n*eslint*"}, assuming that the user has configured pnpm to package dependencies.
√ Found pnpm@10.33.0
√ Checking your system
[?25h> Preparing to package application
2026-04-30T00:24:09.308Z electron-forge:project-resolver searching for project in: I:\github\TidGi-Desktop
2026-04-30T00:24:09.315Z electron-forge:project-resolver package.json with forge dependency found in I:\github\TidGi-Desktop\package.json
2026-04-30T00:24:09.717Z electron-forge:plugin:vite hooking process events
√ Preparing to package application
> Running packaging hooks
> Running generateAssets hook
√ Running generateAssets hook
> Running prePackage hook
> [plugin-vite] Building production Vite bundles
> Building main and preload targets...
> Building renderer targets...
> Building src/main.ts target
> Building src/preload/index.ts target
2026-04-30T00:24:21.382Z electron-forge:plugin:vite no error in buildEnd and reached closeBundle so build succeeded
√ Building src/preload/index.ts target
2026-04-30T00:24:37.212Z electron-forge:plugin:vite no error in buildEnd and reached closeBundle so build succeeded
√ Building src/main.ts target
√ Building main and preload targets...
√ Built target renderer
√ Building renderer targets...
√ [plugin-vite] Building production Vite bundles
√ Running prePackage hook
√ Running packaging hooks
> Packaging application
Determining targets...
2026-04-30T00:25:03.025Z electron-forge:packager packaging with options {
asar: {
unpack: '{{**/.webpack/main/*.worker.*,**/.webpack/main/native_modules/path.txt,**/{.**,**}/**/*.node},**/{.**,**}/**/*.node}'
},
overwrite: true,
ignore: [Function (anonymous)],
quiet: true,
name: 'TidGi',
executableName: 'tidgi',
win32metadata: {
CompanyName: 'TiddlyWiki Community',
OriginalFilename: 'TidGi Desktop'
},
protocols: [ { name: 'TidGi Launch Protocol', schemes: [Array] } ],
icon: 'build-resources/icon.ico',
extraResource: [
'localization',
'template/wiki',
'build-resources/tidgiMiniWindow@2x.png',
'build-resources/tidgiMiniWindowTemplate@2x.png'
],
mac: {
category: 'productivity',
target: 'dmg',
icon: 'build-resources/icon.icns',
electronLanguages: [ 'en', 'zh-Hans', 'zh-Hant', 'ja', 'fr', 'ru' ]
},
appBundleId: 'com.tidgi',
afterPrune: [ [Function (anonymous)] ],
beforeAsar: [ [Function: _default] ],
dir: 'I:\\github\\TidGi-Desktop',
arch: 'x64',
platform: 'win32',
afterFinalizePackageTargets: [ [Function (anonymous)] ],
afterComplete: [ [Function (anonymous)] ],
afterCopy: [ [Function (anonymous)] ],
afterExtract: [ [Function (anonymous)] ],
out: 'I:\\github\\TidGi-Desktop\\out',
electronVersion: '41.1.1'
}
2026-04-30T00:25:03.031Z electron-forge:packager targets: [ { platform: 'win32', arch: 'x64' } ]
> Packaging for x64 on win32
> Copying files
> Preparing native dependencies
> Finalizing package
√ Copying files
√ Preparing native dependencies
Copy npm packages with node-worker dependencies with binary (dugite) or __filename usages (tiddlywiki), which cannot be prepared properly by webpack
Copying tiddlywiki dependency to dist
Copying packagePathsToCopyDereferenced
Copy dugite
Copy registry-js (Windows only)
√ Finalizing package
√ Packaging for x64 on win32
√ Packaging application
> Running postPackage hook
2026-04-30T00:25:25.685Z electron-forge:packager outputPaths: [ 'I:\\github\\TidGi-Desktop\\out\\TidGi-win32-x64' ]
√ Running postPackage hook
[?25h2026-04-30T00:25:25.686Z electron-forge:plugin:vite handling process exit with: { cleanup: true }

View file

@ -64,7 +64,10 @@ jobs:
# Set Chinese locale for i18n testing
LANG: zh_CN.UTF-8
LC_ALL: zh_CN.UTF-8
timeout-minutes: 30
# Timeout calculation: BASE_TIMEOUT (25s) × fallback_multiplier (4.0) × scenario_count (~65) / 60 ≈ 108min
# Conservative 40min allows for CI overhead, native module init, and future scenario growth
# If E2E suite grows significantly, increase proportionally or implement calibration preflight
timeout-minutes: 40
# Upload test artifacts (screenshots, logs)
- name: Upload test artifacts

View file

@ -100,13 +100,14 @@ export function getPerformanceMultiplier(): number {
}
// Fallback if calibration preflight did not run.
// Conservative 4.0× to accommodate slow CI environments and native module initialization
console.warn(
'[E2E Calibration] Calibration file not found, using fallback multiplier 3.0×',
'[E2E Calibration] Calibration file not found, using fallback multiplier 4.0×',
);
console.warn(
'[E2E Calibration] Expected preflight calibration to run before cucumber startup',
);
return 3.0;
return 4.0;
}
/**