feat(analytics): attribute requests by client surface and add CLI usage telemetry #31228
ci.yml
on: pull_request
Detect Version
Migrate Dev DB
/
Apply Database Migrations
Detect Desktop Changes
Matrix: Build AMD64
Matrix: Build ARM64 (GHCR Only)
Matrix: Test and Build / oauth-postgres
Matrix: Test and Build / test-shard
Test and Build
/
Lint and Test
2m 24s
Test and Build
/
Build App
2m 46s
Check Docs Changes
Matrix: Build Dev ECR
Deploy Trigger.dev (Dev)
Matrix: Create GHCR Manifests
Process Docs
/
Process Documentation Embeddings
Prune Desktop Prereleases
0s
Matrix: Attest Images
Desktop Release
/
Build, Sign, Notarize
Annotations
24 errors and 24 warnings
|
Test and Build / Test (shard 2)
Process completed with exit code 1.
|
|
app/api/workspaces/[id]/fork/route.test.ts > POST /api/workspaces/[id]/fork > still returns the created fork when the copy succeeds:
apps/sim/app/api/workspaces/[id]/fork/route.test.ts#L134
AssertionError: expected 500 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 500
❯ app/api/workspaces/[id]/fork/route.test.ts:134:29
|
|
app/api/workspaces/[id]/fork/route.test.ts > POST /api/workspaces/[id]/fork > classifies a refusal that drizzle wrapped in a transaction error:
apps/sim/app/api/workspaces/[id]/fork/route.test.ts#L107
AssertionError: expected 500 to be 409 // Object.is equality
- Expected
+ Received
- 409
+ 500
❯ app/api/workspaces/[id]/fork/route.test.ts:107:29
|
|
app/api/workspaces/[id]/fork/route.test.ts > POST /api/workspaces/[id]/fork > renders a full-folder-tree refusal as an actionable 409:
apps/sim/app/api/workspaces/[id]/fork/route.test.ts#L90
AssertionError: expected 500 to be 409 // Object.is equality
- Expected
+ Received
- 409
+ 500
❯ app/api/workspaces/[id]/fork/route.test.ts:90:29
|
|
Test and Build / Test (shard 2)
@sim/app#test: command (/home/runner/_work/sim/sim/apps/sim) /home/runner/.bun/bin/bun run test exited (1)
|
|
Test and Build / Test (shard 3)
Process completed with exit code 1.
|
|
app/api/workspaces/[id]/fork/promote/route.test.ts > POST /api/workspaces/[id]/fork/promote > classifies a refusal that drizzle wrapped in a transaction error:
apps/sim/app/api/workspaces/[id]/fork/promote/route.test.ts#L141
AssertionError: expected 500 to be 409 // Object.is equality
- Expected
+ Received
- 409
+ 500
❯ app/api/workspaces/[id]/fork/promote/route.test.ts:141:29
|
|
app/api/workspaces/[id]/fork/promote/route.test.ts > POST /api/workspaces/[id]/fork/promote > renders a full-folder-tree refusal as an actionable 409:
apps/sim/app/api/workspaces/[id]/fork/promote/route.test.ts#L127
AssertionError: expected 500 to be 409 // Object.is equality
- Expected
+ Received
- 409
+ 500
❯ app/api/workspaces/[id]/fork/promote/route.test.ts:127:29
|
|
app/api/workspaces/[id]/fork/promote/route.test.ts > POST /api/workspaces/[id]/fork/promote > names the other side of the edge for promoteFork to record the sync:
apps/sim/app/api/workspaces/[id]/fork/promote/route.test.ts#L116
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/workspaces/[id]/fork/promote/route.test.ts:116:29
|
|
app/api/schedules/execute/route.test.ts > Scheduled Workflow Execution API Route > GET handler (fire-and-forget) > acknowledges immediately with 202 and starts the tick in the background:
apps/sim/lib/api/server/credential-headers.ts#L17
TypeError: headers.has is not a function
❯ hasExternalApiCredentials lib/api/server/credential-headers.ts:17:15
❯ clientInfoFor lib/core/utils/with-route-handler.ts:101:63
❯ Module.<anonymous> lib/core/utils/with-route-handler.ts:168:15
❯ app/api/schedules/execute/route.test.ts:1601:30
|
|
app/api/schedules/execute/route.test.ts > Scheduled Workflow Execution API Route > GET handler (fire-and-forget) > returns the auth error when cron auth fails:
apps/sim/lib/api/server/credential-headers.ts#L17
TypeError: headers.has is not a function
❯ hasExternalApiCredentials lib/api/server/credential-headers.ts:17:15
❯ clientInfoFor lib/core/utils/with-route-handler.ts:101:63
❯ Module.<anonymous> lib/core/utils/with-route-handler.ts:168:15
❯ app/api/schedules/execute/route.test.ts:1595:30
|
|
app/_shell/providers/posthog-provider.test.tsx > PostHogProvider consent gating > initializes and publishes PostHog only while measurement consent is granted:
apps/sim/app/_shell/providers/posthog-provider.test.tsx#L107
AssertionError: expected last "vi.fn()" call to have been called with [ ObjectContaining{…} ]
- Expected
+ Received
[
- ObjectContaining {
- "capture": [Function Mock],
- },
+ null,
]
❯ app/_shell/providers/posthog-provider.test.tsx:107:34
|
|
Test and Build / Test (shard 3)
@sim/app#test: command (/home/runner/_work/sim/sim/apps/sim) /home/runner/.bun/bin/bun run test exited (1)
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > malformed stored rows > lets a client following nextCursor terminate and see every projectable row:
apps/sim/app/api/v2/custom-tools/route.test.ts#L396
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:396:33
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > malformed stored rows > emits a valid row exactly as stored, with no repair applied:
apps/sim/app/api/v2/custom-tools/route.test.ts#L358
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:358:22
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > malformed stored rows > serves the rest of the page when a row is not safely repairable:
apps/sim/app/api/v2/custom-tools/route.test.ts#L331
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:331:22
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > malformed stored rows > recovers a declaration missing the `type` discriminator:
apps/sim/app/api/v2/custom-tools/route.test.ts#L305
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:305:22
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > malformed stored rows > recovers a schema stored as a stringified JSON object:
apps/sim/app/api/v2/custom-tools/route.test.ts#L289
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:289:22
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > creates exactly one custom tool with the v2 source and status:
apps/sim/app/api/v2/custom-tools/route.test.ts#L245
AssertionError: expected 500 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 500
❯ app/api/v2/custom-tools/route.test.ts:245:29
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > resumes a cursor replayed under the filters it was minted with:
apps/sim/app/api/v2/custom-tools/route.test.ts#L224
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:224:28
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > refuses a cursor minted under a different filter:
apps/sim/app/api/v2/custom-tools/route.test.ts#L190
AssertionError: expected undefined to deeply equal Any<String>
- Expected:
Any<String>
+ Received:
undefined
❯ app/api/v2/custom-tools/route.test.ts:190:24
|
|
app/api/v2/custom-tools/route.test.ts > /api/v2/custom-tools > lists custom tools through the authorized application use case:
apps/sim/app/api/v2/custom-tools/route.test.ts#L156
AssertionError: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ app/api/v2/custom-tools/route.test.ts:156:29
|
|
Test and Build / Lint and Test
@sim/app#test: command (/home/runner/_work/sim/sim/apps/sim) /home/runner/.bun/bin/bun run test exited (1)
|
|
Test and Build / Lint and Test
Process completed with exit code 1.
|
|
Test and Build / Test (shard 2)
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Test (shard 2)
- Step: unknown (failed)
|
|
Test and Build / Test (shard 2)
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Test (shard 2)
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Test (shard 2)
- Step: unknown (failed)
|
|
Test and Build / Test (shard 2)
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Test (shard 2)
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Test (shard 2)
- Step: unknown (failed)
|
|
Test and Build / Test (shard 2)
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Test (shard 3)
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Test (shard 3)
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Test (shard 3)
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Test (shard 3)
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Test (shard 3)
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Test (shard 3)
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Lint and Test
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Lint and Test
- Step: unknown (failed)
|
|
Test and Build / Lint and Test
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Lint and Test
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Lint and Test
- Step: unknown (failed)
|
|
Test and Build / Lint and Test
Found 2 failed/cancelled steps in previous workflow steps
|
|
Test and Build / Lint and Test
Skipping sticky disk commit due to previous step failures
|
|
Test and Build / Lint and Test
- Step: unknown (failed)
|
|
Test and Build / Lint and Test
Found 2 failed/cancelled steps in previous workflow steps
|