paperclip/scripts
Devin Foley 44dde2dec4
ci: reuse dependency caches without per-PR uploads (#13300)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Cloud releases wait for source verification before deployment.
> - That verification reuses compiled Rust dependencies to finish
sooner.
> - PR jobs save large pnpm stores under separate merge refs and
different lockfile keys.
> - Those copies compete with master build caches for the repository's
10 GB cache limit.
> - This PR makes PR dependency caches restore-only and reuses
master-compatible keys.
> - A separate pin update will activate the reviewed workflow.

## Linked Issues or Issue Description

**What happened?**
PR merge refs accumulated roughly 700 MB copies of the same pnpm store.
Master Rust caches disappeared, and Cloud readiness run
[34656098157](https://github.com/paperclipai/paperclip/actions/runs/34656098157)
rebuilt dependencies after cache misses. The repository currently has a
10 GB limit. GitHub rejected a request for 50 GB; that setting needs
separate organization/billing access.

**Expected behavior**
PR jobs should reuse downloaded packages without evicting post-merge
compilation caches through duplicate uploads.

**Steps to reproduce**
1. Run several PRs while the checked-in lockfile needs policy
regeneration.
2. Compare the setup-node keys in PR jobs and master jobs.
3. List Actions caches by ref, key, and archive size. The PR keys repeat
across merge refs.

**Paperclip version or commit**
f12b647ae, before this change.

**Deployment mode**
GitHub Actions, with GitHub-hosted and allowlisted AWS PR runners.

Refs #13267 (empty pnpm store prevention). Searched open issues and PRs
for pnpm cache duplication and found no duplicate implementation. This
change leaves the paused capacity documentation PR #13280 alone.

## What Changed

- Replace setup-node cache writes with pinned `actions/cache/restore` in
all seven PR install job definitions.
- Restore against the checked-in lockfile before downloading the
regenerated policy artifact. Keep every install frozen against that
artifact.
- Allow an OS/architecture-specific pnpm fallback and disable automatic
setup-node caching.
- Remove dependency-store caching from the resolution-only policy job.
- Add eight regression tests, update the existing stacked-lockfile cache
assertion, and document cache behavior and storage settings.

## Verification

- Passed 505 workflow, routing, cache, and source-verification tests:
`node --test '.github/scripts/tests/*.test.mjs'
scripts/__tests__/e2e-shard.test.mjs
scripts/__tests__/run-vitest-stable-shard.test.mjs
scripts/__tests__/release-verify-workflow.test.mjs
scripts/cloud-source-verification.test.mjs`.
- Passed `actionlint .github/workflows/pr-trusted.yml` and `git diff
--check`.
- The AWS routing gate is unchanged. Author, event sender, and rerun
actor must still be allowlisted.
- This definition PR does not change the active `pr.yml` pin. After
review and merge, authorize its immutable merge SHA additively and
activate it in a separate PR. Verify a populated restore and no cache
uploads in an allowlisted PR.
- All 32 checks passed or were intentionally skipped on
`44b31eca590f61b75cae646de43c491b6c4deae7`, including full native Runner
verification, application build, server/workspace tests, and browser
shards. Current-head Greptile is 5/5 with no findings. No application
code changes in this PR.

## Risks

- New dependencies present only in a PR may download again on each run
until master saves a cache containing them. Frozen installation remains
the source of dependency resolution.
- Missing or expired stores fall back to normal package downloads.
- Existing PR copies remain until expiry or a separate targeted cleanup.
No cache entries are deleted here.
- The workflow only takes effect after the separate immutable pin
rotation. Storage billing settings are not changed by this PR.

## Model Used

OpenAI GPT-6 through Codex, with reasoning, repository tools, and code
execution. The exact serving model ID and context window are not exposed
by this environment.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-09-11 17:31:15 -07:00
..
__tests__ ci: reuse dependency caches without per-PR uploads (#13300) 2026-09-11 17:31:15 -07:00
install-sh-fixtures
…
lib feat: add experimental native chat connectors (#13038) 2026-09-10 10:06:45 -05:00
mcp-fixtures fix: continue interrupted task conversations with bounded retries (#13237) 2026-09-11 12:16:04 -05:00
smoke feat: add experimental native chat connectors (#13038) 2026-09-10 10:06:45 -05:00
tests feat: add experimental native chat connectors (#13038) 2026-09-10 10:06:45 -05:00
acpx-patch-packaging.test.mjs fix(paperclip-runner): bump claude-agent-acp pin to 0.73.0 (#13162) 2026-09-10 11:35:33 -07:00
assert-cloud-image-sentry.mjs Install the declared Sentry server package into the hosted image (#12330) 2026-08-27 19:10:49 -07:00
assert-orphan-reaping.sh fix(docker): make tini PID 1 in the server image so adopted orphans are reaped (#12137) 2026-08-25 09:52:39 -07:00
backfill-issue-reference-mentions.ts
…
backup-db.sh
…
benchmark-skill-preparation.ts fix(skills): reuse validated runtime revisions during preparation (#13042) 2026-09-08 09:35:32 -05:00
bootstrap-npm-package.mjs feat(release): bootstrap new npm packages with a placeholder publish (#11757) 2026-08-19 19:38:17 -07:00
bootstrap-npm-package.test.mjs feat(release): bootstrap new npm packages with a placeholder publish (#11757) 2026-08-19 19:38:17 -07:00
build-npm.sh
…
build-standalone-public-packages.mjs
…
capture-pap-2351-binding-picker.mjs
…
chat-adapter-patch-packaging.test.mjs feat: add opt-in chat provider and data foundation (#13100) 2026-09-09 13:49:12 -05:00
check-docker-deps-stage.mjs
…
check-forbidden-tokens.mjs
…
check-module-boundaries.mjs refactor(server): move the admission half of the deferred wake state machine into the wake-queue module (#13136) 2026-09-10 00:55:48 -07:00
check-module-boundaries.test.mjs refactor(server): move the admission half of the deferred wake state machine into the wake-queue module (#13136) 2026-09-10 00:55:48 -07:00
check-no-git-push.mjs
…
check-no-git-push.test.mjs
…
check-node-version-policy.mjs fix(build): enforce Node 24 across Paperclip (#11792) 2026-08-21 10:17:52 -07:00
check-release-package-bootstrap.mjs
…
check-release-package-bootstrap.test.mjs
…
check-task-chat-motion.mjs
…
check-token-gates.mjs
…
clean-install-git.sh
…
clean-install-npm.sh
…
clean-onboard-git.sh
…
clean-onboard-npm.sh
…
clean-onboard-ref.sh
…
cli-bundled-npm-dependencies.mjs
…
cloud-readiness.mjs fix(ci): verify deployable cloud artifacts independently (#13192) 2026-09-10 21:08:29 -07:00
cloud-source-verification.mjs fix(ci): reuse cloud source verification for npm canaries (#13233) 2026-09-11 09:26:26 -07:00
cloud-source-verification.test.mjs fix(ci): reuse cloud source verification for npm canaries (#13233) 2026-09-11 09:26:26 -07:00
codemod-extract-colors.mjs
…
codemod-extract-misc.mjs
…
codemod-extract-sizes.mjs
…
codemod-extract-type.mjs
…
codemod-type-ladder.mjs
…
codex-acp-network-policy.test.mjs fix(adapters): prevent engine fallback and preserve usable runtime defaults (#13105) 2026-09-09 13:27:24 -05:00
create-github-release.sh feat(release): draft stable notes at beta publish, read them from master at promotion (#11567) 2026-08-17 20:47:23 -07:00
dev-both.mjs
…
dev-runner-native-binary.mjs feat(runner): integrate Codex native execution (#12616) 2026-08-31 22:51:17 -05:00
dev-runner-options.ts fix(dev): honor --data-dir isolation (#12193) 2026-08-26 09:08:31 -05:00
dev-runner-output.mjs
…
dev-runner-output.ts
…
dev-runner-paths.mjs
…
dev-runner-snapshot.mjs
…
dev-runner.mjs
…
dev-runner.ts fix(runner): recover native sessions across restarts (#12845) 2026-09-04 15:03:53 -05:00
dev-service-profile.ts
…
dev-service.ts fix(dev): honor --data-dir isolation (#12193) 2026-08-26 09:08:31 -05:00
discord-daily-digest.sh
…
docker-build-test.sh fix(docker): make tini PID 1 in the server image so adopted orphans are reaped (#12137) 2026-08-25 09:52:39 -07:00
docker-entrypoint.sh
…
docker-onboard-smoke.sh Follow the current onboarding arc in the release smoke (#12423) 2026-08-28 07:21:08 -07:00
docker-onboard-smoke.test.mjs Follow the current onboarding arc in the release smoke (#12423) 2026-08-28 07:21:08 -07:00
draft-stable-notes.sh feat(release): thorough notes skeletons — nest each PR's summary at creation (#12124) 2026-08-24 20:51:33 -07:00
draft-stable-notes.test.mjs feat(release): thorough notes skeletons — nest each PR's summary at creation (#12124) 2026-08-24 20:51:33 -07:00
e2e-install-lifecycle.sh fix(build): enforce Node 24 across Paperclip (#11792) 2026-08-21 10:17:52 -07:00
e2e-mcp-user-stories.mjs
…
e2e-shard-durations.json test(e2e): shorten and split Smoke Lab coverage (#12506) 2026-08-31 10:15:39 -05:00
e2e-shard.mjs feat(connections): connect services from native task feeds (#13058) 2026-09-08 15:55:26 -05:00
e2e-update-migrations.sh
…
ensure-plugin-build-deps.mjs fix(cli): recover abandoned workspace build locks (#13288) 2026-09-11 18:25:42 -05:00
ensure-workspace-package-links.ts
…
extract-proposed-events.mjs
…
extract-proposed-events.test.mjs
…
general-server-shard-durations.json refactor: remove automatic productivity reviews (#13263) 2026-09-11 15:46:35 -05:00
general-server-shard.mjs
…
generate-company-assets.ts
…
generate-feature-catalog.ts
…
generate-npm-package-json.mjs fix(build): enforce Node 24 across Paperclip (#11792) 2026-08-21 10:17:52 -07:00
generate-org-chart-images.ts
…
generate-org-chart-satori-comparison.ts
…
generate-plugin-package-json.mjs
…
generate-runner-api-reference.mjs feat(runner): add guarded API search and call fallback (#13003) 2026-09-07 14:14:43 -05:00
generate-runner-experimental-api-metadata.mjs feat(runner): add guarded API search and call fallback (#13003) 2026-09-07 14:14:43 -05:00
generate-ui-package-json.mjs
…
ingest-app-definitions.mjs feat(connections): add AgentMail inboxes and email tasks (#13256) 2026-09-11 16:56:38 -05:00
install.sh fix(build): enforce Node 24 across Paperclip (#11792) 2026-08-21 10:17:52 -07:00
kill-agent-browsers.sh
…
kill-dev.sh
…
kill-vitest.sh
…
kill-workspaces.sh
…
link-plugin-dev-sdk.mjs
…
link-plugin-dev-sdk.test.js
…
measure-issue-chat-long-thread.mjs
…
migrate-inline-env-secrets.ts
…
paperclip-commit-metrics.ts
…
paperclip-issue-update.sh fix: verify issue-update writes instead of inferring success (#12051) 2026-08-23 16:56:51 -07:00
prepare-bundled-package.mjs Build isolated preview artifacts for exact-source deployments (#13041) 2026-09-08 09:21:58 -05:00
prepare-server-ui-dist.sh
…
preview-artifacts.mjs fix(release): publish exact-source cloud migrators on merge (#13188) 2026-09-10 21:07:38 -07:00
preview-artifacts.test.mjs fix(ci): bake the managed runtime identity into cloud images (#13210) 2026-09-11 00:58:27 -07:00
provision-worktree-runtime.sh fix(scripts): silence pnpm DEP0169 at provisioning install call sites (#12228) 2026-08-26 10:42:13 -07:00
provision-worktree.sh fix(workspaces): preserve dependency provisioning failures (#13093) 2026-09-09 10:14:58 -05:00
release-lib.sh fix(release): skip lifecycle scripts for bundle staging (#12585) 2026-08-31 09:14:08 -05:00
release-lib.test.mjs fix(release): skip lifecycle scripts for bundle staging (#12585) 2026-08-31 09:14:08 -05:00
release-package-manifest.json feat: add kimi-local adapter for Kimi Code CLI (CLI + ACP engines) (#9967) 2026-08-20 12:06:33 -07:00
release-package-map.mjs
…
release-package-map.test.mjs
…
release-registry-versions.mjs
…
release-registry-versions.test.mjs
…
release.sh feat(release): draft stable notes at beta publish, read them from master at promotion (#11567) 2026-08-17 20:47:23 -07:00
repair-pr-prep-workspace-attachment.mjs fix(workspaces): attach PR preparation to existing branches (#11703) 2026-08-21 17:23:18 -05:00
request-hot-restart.ts
…
rollback-latest.sh
…
run-typecheck-build-gaps.mjs
…
run-vitest-stable.mjs fix(ci): split release chat verification into test shards (#13198) 2026-09-10 20:30:30 -07:00
runner-api-eval-worker.ts feat(connections): connect services from native task feeds (#13058) 2026-09-08 15:55:26 -05:00
screenshot-blocked-inbox.mjs
…
screenshot-file-viewer.mjs
…
screenshot-fork-flow.mjs
…
screenshot-notion-connect-flow.mjs
…
screenshot-one.mjs
…
screenshot-pap2373.mjs
…
screenshot-recovery-card.cjs
…
screenshot-subissues.mjs
…
screenshot-verdicts.mjs
…
screenshot.cjs
…
serialized-shard-durations.json
…
serve-storybook-static.mjs
…
service-onboard-smoke.sh test(release-smoke): cover the background-service leg of onboarding (#12151) 2026-08-25 01:05:27 -07:00
service-onboard-smoke.test.mjs test(release-smoke): cover the background-service leg of onboarding (#12151) 2026-08-25 01:05:27 -07:00
storybook-visual-baseline.mjs
…
test-install-sh-docker.sh fix(build): enforce Node 24 across Paperclip (#11792) 2026-08-21 10:17:52 -07:00
test-line-shard.mjs fix(ci): split release chat verification into test shards (#13198) 2026-09-10 20:30:30 -07:00
verify-release-registry-state.mjs
…
verify-release-registry-state.test.mjs
…