diff --git a/.github/workflows/pr-trusted.yml b/.github/workflows/pr-trusted.yml index 13c90ad810..40168b4565 100644 --- a/.github/workflows/pr-trusted.yml +++ b/.github/workflows/pr-trusted.yml @@ -633,6 +633,9 @@ jobs: - name: Verify Paperclip Runner run: pnpm --filter @paperclipai/paperclip-runner check:all + - name: Build Runner Evalbook viewer + run: pnpm --filter @paperclipai/paperclip-runner build:issue-thread + - name: Build run: pnpm build diff --git a/packages/paperclip-runner/package.json b/packages/paperclip-runner/package.json index c6d02304fc..a133b72024 100644 --- a/packages/paperclip-runner/package.json +++ b/packages/paperclip-runner/package.json @@ -183,7 +183,7 @@ "@types/node": "^24.0.0", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.5", - "@vitejs/plugin-react": "^6.1.1", + "@vitejs/plugin-react": "^4.7.0", "axe-core": "^4.12.1", "react": "^19.2.7", "react-dom": "^19.2.7", diff --git a/packages/paperclip-runner/scripts/runner-protocol-eval-workflow-security.test.mjs b/packages/paperclip-runner/scripts/runner-protocol-eval-workflow-security.test.mjs index d90a69e58e..cc1be0437d 100644 --- a/packages/paperclip-runner/scripts/runner-protocol-eval-workflow-security.test.mjs +++ b/packages/paperclip-runner/scripts/runner-protocol-eval-workflow-security.test.mjs @@ -8,6 +8,10 @@ const workflowPath = resolve( repositoryRoot, ".github/workflows/runner-protocol-live-evals.yml", ); +const trustedPrWorkflowPath = resolve( + repositoryRoot, + ".github/workflows/pr-trusted.yml", +); test("direct live eval workflow keeps paid execution behind stable actor authorization", async () => { const workflow = await readFile(workflowPath, "utf8"); @@ -32,6 +36,19 @@ test("direct live eval workflow keeps paid execution behind stable actor authori for (const action of actions) assert.match(action, /^[^@]+@[0-9a-f]{40}$/u); }); +test("pull request CI builds the canonical Evalbook viewer", async () => { + const workflow = await readFile(trustedPrWorkflowPath, "utf8"); + const buildJob = workflow.slice( + workflow.indexOf(" build:"), + workflow.indexOf(" verify_serialized_server:"), + ); + + assert.match( + buildJob, + /name: Build Runner Evalbook viewer[\s\S]*pnpm --filter @paperclipai\/paperclip-runner build:issue-thread/u, + ); +}); + test("resolves both repositories immutably and bounds total matrix concurrency", async () => { const workflow = await readFile(workflowPath, "utf8"); const authorize = workflow.slice(