paperclip/packages/paperclip-runner/scripts
Dotta 313d6ca115
fix(runner): materialize pinned OpenCode binary (#12782)
## Thinking Path

> - Paperclip manages AI agents and their provider runtimes.
> - Paid runner validation installs target dependencies with lifecycle
scripts disabled.
> - OpenCode leaves a sentinel executable until its package lifecycle
script runs.
> - Running arbitrary lifecycle code would weaken the paid-secret
boundary.
> - This pull request materializes one exact pinned binary before
secrets are exposed.
> - The benefit is working OpenCode validation without trusting
dependency install scripts.

## Linked Issues or Issue Description

**What happened?**

Every local OpenCode paid cell stopped before provider startup because
`pnpm install --ignore-scripts` correctly retained
`opencode-ai/bin/opencode.exe` as a sentinel.

**Expected behavior**

The trusted workflow must make the exact lockfile-pinned OpenCode
executable available without running package lifecycle scripts.

**Steps to reproduce**

Run a local legacy or native OpenCode paid cell from the trusted
workflow after the target dependency install. The provider health check
reports that the OpenCode postinstall script was not run.

**Paperclip version or commit**

Default branch commit `865b4854fb44d3689f1c0ff17e3e715d52aaea73`.

## What Changed

- Materialize only `opencode-linux-x64-baseline@1.18.17` into the
matching `opencode-ai@1.18.17` package.
- Verify package identity, version, regular-file type, SHA-256 equality,
executable permissions, and runtime `--version`.
- Invoke the helper for local OpenCode and breadth cells and for remote
provider-pack assembly.
- Retain `pnpm install --ignore-scripts`.
- Add helper and trusted-workflow security regressions.

## Verification

- Helper syntax checks passed.
- Helper unit tests passed: 2/2.
- Workflow-security tests passed: 5/5.
- Prettier, actionlint, and diff whitespace checks passed.

## Risks

Risk is low and contained to paid runner setup. The helper supports only
Linux x64, fails closed on package or version drift, and runs before
provider credentials enter the job.

## Model Used

OpenAI GPT-5 Codex with repository tools and code execution.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change.
- [x] I have specified the model used.
- [x] I have checked ROADMAP.md and confirmed this does not duplicate
planned core work.
- [x] I have searched GitHub for duplicate or related PRs and found
none.
- [x] I have described the issue in this PR with the bug template
labels.
- [x] I have not referenced internal or instance-local issues.
- [x] My branch name describes the change.
- [x] Focused local tests pass.
- [x] I added tests for the change.
- [x] I updated the runner E2E security documentation.
- [x] I documented the risks above.
2026-09-03 14:12:17 -05:00
..
lib feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
acpx-sidecar-contract.mjs feat(runner): define ACPX sidecar contract (#12386) 2026-08-30 11:59:14 -05:00
aws-agentcore-provisioning.test.mjs test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
aws-agentcore.sh test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
build-provider-pack.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
capability-aws-agentcore-smoke.mjs test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
capability-clean-room-smoke.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
capability-cookie-jar.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
capability-explorer-fixtures.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
capability-issue-thread-server.mjs test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
capability-issue-thread-smoke.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-browser-tokens.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-capability-csp-bundle.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-capability-inventory.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-capability-inventory.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-clean-consumers.mjs feat(runner): add offline evaluation tooling (#12653) 2026-09-01 05:19:47 -05:00
check-forbidden-imports.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-forbidden-imports.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-numbered-milestones.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-numbered-milestones.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-package-boundaries.mjs feat(runner): add offline evaluation tooling (#12653) 2026-09-01 05:19:47 -05:00
check-runner-workflow-traceability.mjs feat(runner): add offline evaluation tooling (#12653) 2026-09-01 05:19:47 -05:00
check-tracked-imports.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
check-tracked-imports.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
generate-acpx-sidecar-contract.mjs feat(runner): normalize ACPX provider events (#12416) 2026-08-31 00:52:41 -05:00
generate-capability-contract.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
generate-capability-inventory.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
generate-operation-groups.ts feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
generate-protocol-coverage.mjs test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
generate-protocol-manifest.mjs test(runner): add question adapter conformance (#12409) 2026-08-30 22:09:03 -05:00
generate-protocol-schema-module.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
generate-replay-goldens.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
generate-semantic-action-catalog.mjs Add canonical semantic action catalog to Paperclip Runner (#12121) 2026-08-24 16:26:21 -05:00
generate-semantic-contracts.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
live-console-browser-server.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
live-console-browser-server.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
live-console-demo-server.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
local-runner-browser-server.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
local-runner-browser-server.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
materialize-opencode-binary.mjs fix(runner): materialize pinned OpenCode binary (#12782) 2026-09-03 14:12:17 -05:00
materialize-opencode-binary.test.mjs fix(runner): materialize pinned OpenCode binary (#12782) 2026-09-03 14:12:17 -05:00
protocol-contract.mjs test(runner): add question adapter conformance (#12409) 2026-08-30 22:09:03 -05:00
run-capability-eval-suite.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
run-capability-live-eval-matrix.mjs test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
run-runner-live-eval-schedule.mjs test(runner): add full-stack acceptance and eval gates (#12700) 2026-09-02 08:55:08 -05:00
run-runner-workflow-evals.mjs feat(runner): add offline evaluation tooling (#12653) 2026-09-01 05:19:47 -05:00
run-scenario-chat-demo.sh feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
stage-runner-binary.mjs feat(runner): add flagged Codex execution adapter (#12188) 2026-08-25 16:03:41 -05:00
validate-doc-links.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
validate-doc-links.test.mjs feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00
verify-rootless-linux.sh feat(runner): add SDK and developer tooling (#12608) 2026-08-31 21:33:11 -05:00