Rebase onto upstream/master (2026-08-26): 558 commits (d5b9f6c8..821573ed) #571
pr.yml
on: pull_request
policy
1m 8s
Matrix: e2e_shards
Matrix: general_tests
Canary Dry Run
3m 21s
Matrix: verify_serialized_server
Annotations
58 errors and 2 warnings
|
General tests (workspaces-b)
Process completed with exit code 1.
|
|
[@paperclipai/db] src/issue-thread-interaction-resolver-policy-migration.test.ts > issue interaction resolver policy migration > replays safely and completes a partial prior run:
packages/db/src/issue-thread-interaction-resolver-policy-migration.test.ts#L20
Error: ENOENT: no such file or directory, open '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0218_mushy_jack_murdock.sql'
❯ resolverPolicyMigrationStatements src/issue-thread-interaction-resolver-policy-migration.test.ts:20:24
❯ src/issue-thread-interaction-resolver-policy-migration.test.ts:95:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0218_mushy_jack_murdock.sql' }
|
|
[@paperclipai/db] src/issue-comment-on-behalf-migration.test.ts > issue comment on-behalf attribution migration > reapplies the migration and round-trips the nullable user attribution FK:
packages/db/src/issue-comment-on-behalf-migration.test.ts#L17
Error: ENOENT: no such file or directory, open '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0205_narrow_shiva.sql'
❯ migrationHash src/issue-comment-on-behalf-migration.test.ts:17:19
❯ src/issue-comment-on-behalf-migration.test.ts:38:79
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0205_narrow_shiva.sql' }
|
|
[@paperclipai/db] src/heartbeat-context-snapshot-index-migration.test.ts > heartbeat context_snapshot expression index migration > applies full migration chain and uses the new indexes:
packages/db/src/heartbeat-context-snapshot-index-migration.test.ts#L67
Error: ENOENT: no such file or directory, open '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0209_heartbeat_context_snapshot_indexes.sql'
❯ src/heartbeat-context-snapshot-index-migration.test.ts:67:28
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0209_heartbeat_context_snapshot_indexes.sql' }
|
|
[@paperclipai/db] src/decision-queue-migrations.test.ts > decision queue migrations > can be reapplied without changing schema or existing data:
packages/db/src/decision-queue-migrations.test.ts#L26
Error: ENOENT: no such file or directory, open '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0198_decision_queues_and_triage.sql'
❯ reapplyDecisionQueueMigrations src/decision-queue-migrations.test.ts:26:22
❯ src/decision-queue-migrations.test.ts:69:9
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0198_decision_queues_and_triage.sql' }
|
|
[@paperclipai/db] src/company-secret-proposals-migration.test.ts > company secret proposals migration > can be reapplied after its migration journal entry is removed:
packages/db/src/company-secret-proposals-migration.test.ts#L14
Error: ENOENT: no such file or directory, open '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0207_moaning_amazoness.sql'
❯ migrationHash src/company-secret-proposals-migration.test.ts:14:19
❯ src/company-secret-proposals-migration.test.ts:38:77
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0207_moaning_amazoness.sql' }
|
|
[@paperclipai/db] src/client.test.ts > applyPendingMigrations > preserves legacy runs while adding native persistence and replay-safe status versioning:
packages/db/src/client.test.ts#L26
Error: ENOENT: no such file or directory, open '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0227_modern_pandemic.sql'
❯ migrationHash src/client.test.ts:26:19
❯ src/client.test.ts:1415:37
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/paperclip/paperclip/packages/db/src/migrations/0227_modern_pandemic.sql' }
|
|
Verify serialized server suites (1/5)
Process completed with exit code 1.
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > schedules an infra retry for a setup failure caused by a transient sandbox provider worker restart:
server/src/__tests__/heartbeat-process-recovery.test.ts#L3368
AssertionError: Target cannot be null or undefined.
❯ src/__tests__/heartbeat-process-recovery.test.ts:3368:18
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > soft-drains: a second heartbeat service instance also suppresses new-run dispatch once shutdown begins:
server/src/services/heartbeat.ts#L10997
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
❯ Object.drainRunningRunsForShutdown src/services/heartbeat.ts:10997:41
❯ src/__tests__/heartbeat-process-recovery.test.ts:2070:28
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > soft-drains: a sub-interval drain timeout never oversleeps past the deadline:
server/src/services/heartbeat.ts#L10997
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
❯ Object.drainRunningRunsForShutdown src/services/heartbeat.ts:10997:41
❯ src/__tests__/heartbeat-process-recovery.test.ts:2025:21
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > soft-drains: the wait is bounded by the drain timeout:
server/src/services/heartbeat.ts#L10997
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
❯ Object.drainRunningRunsForShutdown src/services/heartbeat.ts:10997:41
❯ src/__tests__/heartbeat-process-recovery.test.ts:1987:21
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > soft-drains: a run still running at the drain deadline is interrupted and retried:
server/src/services/heartbeat.ts#L10997
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
❯ Object.drainRunningRunsForShutdown src/services/heartbeat.ts:10997:41
❯ src/__tests__/heartbeat-process-recovery.test.ts:1951:36
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > soft-drains: new-run dispatch is quiesced before the drain wait begins:
server/src/services/heartbeat.ts#L10997
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
❯ Object.drainRunningRunsForShutdown src/services/heartbeat.ts:10997:41
❯ src/__tests__/heartbeat-process-recovery.test.ts:1932:21
|
|
[@paperclipai/server] src/__tests__/heartbeat-process-recovery.test.ts > heartbeat orphaned process recovery > soft-drains: a run that finishes within the drain window is not interrupted:
server/src/services/heartbeat.ts#L10997
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
❯ Object.drainRunningRunsForShutdown src/services/heartbeat.ts:10997:41
❯ src/__tests__/heartbeat-process-recovery.test.ts:1888:36
|
|
Verify serialized server suites (2/5)
Process completed with exit code 1.
|
|
[@paperclipai/server] src/__tests__/invite-url-public-base-url.test.ts > invite URL: authPublicBaseUrl precedence > strips trailing slash from authPublicBaseUrl before joining with invite path:
server/src/routes/access.ts#L2658
Error: [vitest] No "instanceSettingsService" export is defined on the "../services/index.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
vi.mock(import("../services/index.js"), async (importOriginal) => {
const actual = await importOriginal()
return {
...actual,
// your mocked methods
}
})
❯ accessRoutes src/routes/access.ts:2658:28
❯ createApp src/__tests__/invite-url-public-base-url.test.ts:101:5
❯ src/__tests__/invite-url-public-base-url.test.ts:159:17
|
|
[@paperclipai/server] src/__tests__/invite-url-public-base-url.test.ts > invite URL: authPublicBaseUrl precedence > falls back to request-derived host when authPublicBaseUrl is not configured:
server/src/routes/access.ts#L2658
Error: [vitest] No "instanceSettingsService" export is defined on the "../services/index.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
vi.mock(import("../services/index.js"), async (importOriginal) => {
const actual = await importOriginal()
return {
...actual,
// your mocked methods
}
})
❯ accessRoutes src/routes/access.ts:2658:28
❯ createApp src/__tests__/invite-url-public-base-url.test.ts:101:5
❯ src/__tests__/invite-url-public-base-url.test.ts:144:17
|
|
[@paperclipai/server] src/__tests__/invite-url-public-base-url.test.ts > invite URL: authPublicBaseUrl precedence > uses authPublicBaseUrl for inviteUrl when configured, ignoring request host:
server/src/routes/access.ts#L2658
Error: [vitest] No "instanceSettingsService" export is defined on the "../services/index.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
vi.mock(import("../services/index.js"), async (importOriginal) => {
const actual = await importOriginal()
return {
...actual,
// your mocked methods
}
})
❯ accessRoutes src/routes/access.ts:2658:28
❯ createApp src/__tests__/invite-url-public-base-url.test.ts:101:5
❯ src/__tests__/invite-url-public-base-url.test.ts:126:17
|
|
[@paperclipai/ui] src/components/CompanySettingsSidebar.test.tsx > CompanySettingsSidebar operator-hidden entries > hides operator-hidden company pages:
ui/src/components/CompanySettingsSidebar.test.tsx#L628
AssertionError: expected 'PaperclipProfileEnvironmentsAccessHea…' to contain 'General'
Expected: "General"
Received: "PaperclipProfileEnvironmentsAccessHeartbeatsExperimentalPluginsAdapters"
❯ src/components/CompanySettingsSidebar.test.tsx:628:35
|
|
[@paperclipai/ui] src/components/CompanySettingsSidebar.test.tsx > CompanySettingsSidebar operator-hidden entries > skips operator-hidden pages and their queries:
ui/src/components/CompanySettingsSidebar.test.tsx#L595
AssertionError: expected 'PaperclipProfileEnvironmentsAccessExp…' to contain 'General'
Expected: "General"
Received: "PaperclipProfileEnvironmentsAccessExportImportExperimentalAdapters"
❯ src/components/CompanySettingsSidebar.test.tsx:595:35
|
|
[@paperclipai/ui] src/components/CompanySettingsSidebar.test.tsx > CompanySettingsSidebar > degrades closed: gated entries hidden while capabilities are unavailable:
ui/src/components/CompanySettingsSidebar.test.tsx#L503
AssertionError: expected 'PaperclipProfileEnvironmentsAccessHea…' to contain 'Company Settings'
Expected: "Company Settings"
Received: "PaperclipProfileEnvironmentsAccessHeartbeatsExportImportExperimentalPluginsAdapters"
❯ src/components/CompanySettingsSidebar.test.tsx:503:35
|
|
[@paperclipai/ui] src/components/CompanySettingsSidebar.test.tsx > CompanySettingsSidebar > renders instance plugin links while filtering sandbox-provider-only plugins:
ui/src/components/CompanySettingsSidebar.test.tsx#L419
AssertionError: expected [ …(4) ] to deeply equal [ …(2) ]
- Expected
+ Received
[
"/company/settings/instance/plugins/linear",
"/company/settings/instance/plugins/hybrid",
+ "/company/settings/instance/plugins/linear",
+ "/company/settings/instance/plugins/hybrid",
]
❯ src/components/CompanySettingsSidebar.test.tsx:419:66
|
|
[@paperclipai/ui] src/components/CompanySettingsSidebar.test.tsx > CompanySettingsSidebar > renders one unified settings list without company or instance headers:
ui/src/components/CompanySettingsSidebar.test.tsx#L238
AssertionError: expected Set{ '/company/settings', …(1) } to deeply equal Set{ '/company/settings' }
- Expected
+ Received
Set {
"/company/settings",
+ "/company/settings/instance/general",
}
❯ src/components/CompanySettingsSidebar.test.tsx:238:8
|
|
[@paperclipai/ui] src/components/AgentConfigForm.render.test.tsx > AgentConfigForm environment selector > shows the Login button for an agent with no own environment under the managed-sandbox-only policy:
ui/src/components/AgentConfigForm.render.test.tsx#L1380
AssertionError: expected undefined to be truthy
- Expected:
true
+ Received:
undefined
❯ src/components/AgentConfigForm.render.test.tsx:1380:52
|
|
[@paperclipai/ui] src/components/AgentConfigForm.render.test.tsx > AgentConfigForm environment selector > labels the platform-managed instance default by name, without the driver key:
ui/src/components/AgentConfigForm.render.test.tsx#L836
AssertionError: expected 'Default: LocalPaperclip Computer' to contain 'Default: Paperclip Computer'
Expected: "Default: Paperclip Computer"
Received: "Default: LocalPaperclip Computer"
❯ src/components/AgentConfigForm.render.test.tsx:836:35
|
|
[@paperclipai/ui] src/pages/NewAgent.test.tsx > NewAgent Claude subscription login > applies a stored token first and starts a replacement login with the captured version:
ui/src/pages/NewAgent.test.tsx#L379
Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
❯ src/pages/NewAgent.test.tsx:379:3
|
|
[@paperclipai/ui] src/pages/NewAgent.test.tsx > NewAgent Claude subscription login > stores the secret and adds the fixed binding through the create request, with no token in the DOM:
ui/src/pages/NewAgent.test.tsx#L338
Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
❯ src/pages/NewAgent.test.tsx:338:3
|
|
[@paperclipai/ui] src/pages/NewAgent.test.tsx > NewAgent Claude subscription login > shows Log in for a Claude sandbox before Create agent:
ui/src/pages/NewAgent.test.tsx#L329
AssertionError: expected undefined to be truthy
- Expected:
true
+ Received:
undefined
❯ src/pages/NewAgent.test.tsx:329:25
|
|
Verify serialized server suites (5/5)
Canceling since a higher priority waiting request for pr-334 exists
|
|
Verify serialized server suites (5/5)
The operation was canceled.
|
|
General tests (server (2/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (2/5))
The operation was canceled.
|
|
General tests (server (3/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (3/5))
The operation was canceled.
|
|
Canary Dry Run
Canceling since a higher priority waiting request for pr-334 exists
|
|
Canary Dry Run
The operation was canceled.
|
|
Verify serialized server suites (4/5)
Canceling since a higher priority waiting request for pr-334 exists
|
|
Verify serialized server suites (4/5)
The operation was canceled.
|
|
General tests (server (1/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (1/5))
The operation was canceled.
|
|
e2e shard (2/3)
Canceling since a higher priority waiting request for pr-334 exists
|
|
e2e shard (2/3)
The operation was canceled.
|
|
Verify serialized server suites (3/5)
Canceling since a higher priority waiting request for pr-334 exists
|
|
Verify serialized server suites (3/5)
The operation was canceled.
|
|
General tests (server (4/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (4/5))
The operation was canceled.
|
|
General tests (workspaces-a (2/2))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (workspaces-a (2/2))
The operation was canceled.
|
|
e2e shard (3/3)
Canceling since a higher priority waiting request for pr-334 exists
|
|
e2e shard (3/3)
The operation was canceled.
|
|
e2e shard (1/3)
Canceling since a higher priority waiting request for pr-334 exists
|
|
e2e shard (1/3)
The operation was canceled.
|
|
General tests (server (5/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (5/5))
The operation was canceled.
|
|
e2e
Process completed with exit code 1.
|
|
PR
Canceling since a higher priority waiting request for pr-334 exists
|
|
verify
Process completed with exit code 1.
|
|
e2e shard (2/3)
No files were found with the provided path: tests/e2e/playwright-report/
tests/e2e/test-results/. No artifacts will be uploaded.
|
|
e2e shard (1/3)
No files were found with the provided path: tests/e2e/playwright-report/
tests/e2e/test-results/. No artifacts will be uploaded.
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
playwright-report-2
|
136 KB |
sha256:9369388854aa1c51dd14be0ef77720402cb60e8bc60e32ec9b9ea020f5ca97f6
|
|
|
pr-lockfile
Expired
|
159 KB |
sha256:6c08639f462f76d2a269c8a13d24810b8b60e72501ef867af3ce10efbe362230
|
|