diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d4ee9dda..ad802136 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,9 @@ jobs: - name: Block manual lockfile edits if: github.head_ref != 'chore/refresh-lockfile' run: | - changed="$(git diff --name-only "${{ github.event.pull_request.base.sha }}" "${{ github.event.pull_request.head.sha }}")" + # Diff the PR branch against its merge base so recent base-branch commits + # do not masquerade as changes made by the PR itself. + changed="$(git diff --name-only "${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }}")" if printf '%s\n' "$changed" | grep -qx 'pnpm-lock.yaml'; then echo "Do not commit pnpm-lock.yaml in pull requests. CI owns lockfile updates." exit 1 @@ -45,7 +47,7 @@ jobs: - name: Validate dependency resolution when manifests change run: | - changed="$(git diff --name-only "${{ github.event.pull_request.base.sha }}" "${{ github.event.pull_request.head.sha }}")" + changed="$(git diff --name-only "${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }}")" manifest_pattern='(^|/)package\.json$|^pnpm-workspace\.yaml$|^\.npmrc$|^pnpmfile\.(cjs|js|mjs)$' if printf '%s\n' "$changed" | grep -Eq "$manifest_pattern"; then pnpm install --lockfile-only --ignore-scripts --no-frozen-lockfile diff --git a/packages/adapters/acpx-local/src/server/execute.test.ts b/packages/adapters/acpx-local/src/server/execute.test.ts index ccdea013..5ebc239e 100644 --- a/packages/adapters/acpx-local/src/server/execute.test.ts +++ b/packages/adapters/acpx-local/src/server/execute.test.ts @@ -176,10 +176,11 @@ describe("acpx_local runtime skill isolation", () => { const root = await makeTempRoot(); const sourceCodexHome = path.join(root, "source-codex-home"); const paperclipHome = path.join(root, "paperclip-home"); + const paperclipInstanceId = "test-instance"; const managedCodexHome = path.join( paperclipHome, "instances", - "default", + paperclipInstanceId, "companies", "company-1", "codex-home", @@ -193,9 +194,11 @@ describe("acpx_local runtime skill isolation", () => { const previousCodexHome = process.env.CODEX_HOME; const previousPaperclipHome = process.env.PAPERCLIP_HOME; + const previousPaperclipInstanceId = process.env.PAPERCLIP_INSTANCE_ID; try { process.env.CODEX_HOME = sourceCodexHome; process.env.PAPERCLIP_HOME = paperclipHome; + process.env.PAPERCLIP_INSTANCE_ID = paperclipInstanceId; await runExecutor({ agent: "codex", stateDir: path.join(root, "state"), @@ -207,6 +210,8 @@ describe("acpx_local runtime skill isolation", () => { else process.env.CODEX_HOME = previousCodexHome; if (previousPaperclipHome === undefined) delete process.env.PAPERCLIP_HOME; else process.env.PAPERCLIP_HOME = previousPaperclipHome; + if (previousPaperclipInstanceId === undefined) delete process.env.PAPERCLIP_INSTANCE_ID; + else process.env.PAPERCLIP_INSTANCE_ID = previousPaperclipInstanceId; } const authStat = await fs.lstat(managedAuth);