Rebase onto upstream/master (2026-08-26): 558 commits (d5b9f6c8..821573ed) #564
pr.yml
on: pull_request
policy
49s
Matrix: e2e_shards
Matrix: general_tests
Canary Dry Run
1m 8s
Matrix: verify_serialized_server
Annotations
66 errors and 2 warnings
|
Canary Dry Run
Process completed with exit code 2.
|
|
Canary Dry Run
'}' expected.
|
|
Typecheck + Release Registry
Cannot find name 'currentTable'.
|
|
Typecheck + Release Registry
Cannot find name 'currentTable'.
|
|
Typecheck + Release Registry
Cannot find name 'insertedValues'. Did you mean 'insertedTables'?
|
|
Typecheck + Release Registry
Cannot find name 'currentTable'.
|
|
Typecheck + Release Registry
Namespace '"/home/runner/work/paperclip/paperclip/packages/shared/src/index"' has no exported member 'CloudUpstreamRunEvent'.
|
|
Typecheck + Release Registry
Namespace '"/home/runner/work/paperclip/paperclip/packages/shared/src/index"' has no exported member 'CloudUpstreamConflict'.
|
|
Typecheck + Release Registry
Namespace '"/home/runner/work/paperclip/paperclip/packages/shared/src/index"' has no exported member 'CloudUpstreamWarning'.
|
|
Typecheck + Release Registry
Namespace '"/home/runner/work/paperclip/paperclip/packages/shared/src/index"' has no exported member 'CloudUpstreamSummaryCount'.
|
|
Typecheck + Release Registry
Object literal may only specify known properties, and 'configuredAuthJson' does not exist in type '{ runId: string; companyId: string; configuredCodexHome: string | null; configuredApiKey: string | null; effectiveCodexHome: string; target: MaybeResolvedExecutionTarget; cwd: string; env?: ProcessEnv | undefined; onLog: (stream: "stderr" | "stdout", chunk: string) => Promise<...>; }'.
|
|
Typecheck + Release Registry
Argument of type '"credential_rejected"' is not assignable to parameter of type 'SandboxProbeDiagnosticClassification'.
|
|
Build
Process completed with exit code 2.
|
|
Build
'}' expected.
|
|
Verify serialized server suites (5/5)
Process completed with exit code 1.
|
|
[@paperclipai/server] src/__tests__/health.test.ts > GET /health > surfaces redacted database backup warnings for anonymous authenticated probes:
server/src/__tests__/health.test.ts#L342
AssertionError: expected { status: 'ok', …(5) } to deeply equal { status: 'ok', …(7) }
- Expected
+ Received
{
"bootstrapInviteActive": false,
"bootstrapStatus": "ready",
"commit": "0123456789abcdef0123456789abcdef01234567",
- "databaseBackup": {
- "enabled": true,
- "status": "warning",
- "warnings": [
- {
- "code": "database_backup_stale",
- "message": "Latest database backup is stale.",
- },
- ],
- },
"deploymentExposure": "public",
"deploymentMode": "authenticated",
"status": "ok",
- "warnings": [
- {
- "code": "database_backup_stale",
- "message": "Latest database backup is stale.",
- },
- ],
}
❯ src/__tests__/health.test.ts:342:22
|
|
[@paperclipai/server] src/__tests__/health.test.ts > GET /health > finds conventional database backup failure markers without an explicit alert file:
server/src/__tests__/health.test.ts#L284
AssertionError: expected undefined to match object { status: 'warning', …(2) }
- Expected:
{
"lastFailure": {
"message": "db-backup-to-s3 failed beside backups",
"path": "/tmp/pcvt-3019-11-N6It09/t/paperclip-health-backups-root-czRFsH/db-backup-to-s3.failure",
},
"status": "warning",
"warnings": [
{
"code": "database_backup_last_failure",
"message": "db-backup-to-s3 failed beside backups",
},
],
}
+ Received:
undefined
❯ src/__tests__/health.test.ts:284:37
|
|
[@paperclipai/server] src/__tests__/health.test.ts > GET /health > surfaces database backup failure markers in full health details:
server/src/__tests__/health.test.ts#L251
AssertionError: expected undefined to match object { status: 'warning', …(2) }
- Expected:
{
"lastFailure": {
"message": "db-backup-to-s3 failed at 2026-07-06T03:17:00.000Z exit=1",
"path": "/tmp/pcvt-3019-11-N6It09/t/paperclip-health-backups-ONK4mK/db-backup-to-s3.failure",
},
"status": "warning",
"warnings": [
{
"code": "database_backup_last_failure",
"message": "db-backup-to-s3 failed at 2026-07-06T03:17:00.000Z exit=1",
},
],
}
+ Received:
undefined
❯ src/__tests__/health.test.ts:251:37
|
|
[@paperclipai/server] src/__tests__/health.test.ts > GET /health > surfaces a stale database backup warning in full health details:
server/src/__tests__/health.test.ts#L217
AssertionError: expected undefined to match object { status: 'warning', …(4) }
- Expected:
{
"backupDir": "/tmp/pcvt-3019-11-N6It09/t/paperclip-health-backups-rMrSxb",
"latestBackup": {
"ageHours": 33.7,
"name": "paperclip-20260705-031702.sql.gz",
},
"maxAgeHours": 26,
"status": "warning",
"warnings": [
{
"code": "database_backup_stale",
},
],
}
+ Received:
undefined
❯ src/__tests__/health.test.ts:217:37
|
|
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 (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
|
|
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 (4/5)
Canceling since a higher priority waiting request for pr-334 exists
|
|
Verify serialized server suites (4/5)
The operation was canceled.
|
|
[@paperclipai/server] src/__tests__/instance-settings-routes.test.ts > instance settings routes > local_trusted regression: the implicit local actor still reads everything:
server/src/__tests__/instance-settings-routes.test.ts#L818
Error: expected 200 "OK", got 500 "Internal Server Error"
❯ src/__tests__/instance-settings-routes.test.ts:818:54
❯ Test._assertStatus ../node_modules/.pnpm/supertest@7.2.2/node_modules/supertest/lib/test.js:309:14
❯ ../node_modules/.pnpm/supertest@7.2.2/node_modules/supertest/lib/test.js:365:13
❯ Test._assertFunction ../node_modules/.pnpm/supertest@7.2.2/node_modules/supertest/lib/test.js:342:13
❯ Test.assert ../node_modules/.pnpm/supertest@7.2.2/node_modules/supertest/lib/test.js:195:23
❯ localAssert ../node_modules/.pnpm/supertest@7.2.2/node_modules/supertest/lib/test.js:138:14
❯ Server.<anonymous> ../node_modules/.pnpm/supertest@7.2.2/node_modules/supertest/lib/test.js:152:11
|
|
e2e shard (2/3)
Canceling since a higher priority waiting request for pr-334 exists
|
|
e2e shard (2/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.
|
|
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.
|
|
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.
|
|
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 (4/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (4/5))
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 (1/5))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (server (1/5))
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 (workspaces-a (1/2))
Canceling since a higher priority waiting request for pr-334 exists
|
|
General tests (workspaces-a (1/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.
|
|
verify
Process completed with exit code 1.
|
|
e2e
Process completed with exit code 1.
|
|
PR
Canceling since a higher priority waiting request for pr-334 exists
|
|
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
|
46 KB |
sha256:06c5d388596e1058205e23c079ab016e69b913ca80b722fe54fad56105e16106
|
|
|
pr-lockfile
Expired
|
159 KB |
sha256:c2e981af8890fc6b27727c902b03c85b0230dbd4784f48abe651d687254bf34f
|
|