Uh oh!
There was an error while loading. Please reload this page.
test(perps): add Farmslot headless recipe smoke - #8957
Conversation
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
All alerts resolved. Learn more about Socket for GitHub. This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored. Ignoring alerts on:
|
abretonc7s
commented
Jun 1, 2026
@SocketSecurity ignore npm/@farmslot/recipe-harness@0.1.0 Accepting these package-specific alerts for this PR after review:
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 3811ad5. Configure here.
| - "@metamask-previews/*" | ||
| - "@lavamoat/*" | ||
| - "@ts-bridge/*" | ||
| - "@farmslot/*" |
There was a problem hiding this comment.
Scope wildcard bypasses age gate for all future packages
Medium Severity
The @farmslot/* wildcard in npmPreapprovedPackages bypasses the 3-day npmMinimalAgeGate for every package ever published under the @farmslot npm scope—not just the two packages actually used (@farmslot/recipe-harness and @farmslot/protocol). Unlike the other wildcarded scopes (@metamask, @lavamoat, @ts-bridge), @farmslot is a less-established third-party scope. Yarn supports listing specific package names here, which would limit the supply-chain exposure to only the packages this monorepo actually consumes.
Reviewed by Cursor Bugbot for commit 3811ad5. Configure here.
abretonc7s
commented
Jun 2, 2026
Closing this stacked PR as superseded. The intended final shape is now directly on #8893 so Core only needs one PR:
Superseded by #8893. |


Summary
Replaces the previous embedded Recipe v1 runner approach with a minimal headless consumer of the reusable Farmslot recipe harness.
This PR is intentionally stacked on #8893 (
feat/perps-e2e-validation) and keeps MetaMask core changes narrow:@farmslot/recipe-harnessas a devDependency for@metamask/perps-controllerpackages/perps-controller/recipes/yarn workspace @metamask/perps-controller recipe:controller-smokeThe recipe uses the shared
farmslot-recipeCLI and runs the existingPerpsController.trading.test.tssmoke suite, so it validates PerpsController public methods instead of embedding a custom runner or calling HyperLiquid directly from the recipe.Farmslot dependency
Published and source-merged before opening this PR:
@farmslot/protocol@0.5.0@farmslot/recipe-harness@0.1.0Validation
npm view @farmslot/protocol version->0.5.0npm view @farmslot/recipe-harness version->0.1.0yarn install --immutableyarn workspace @metamask/perps-controller recipe:controller-smokepass@farmslot/recipe-harness@0.1.0success: true,numFailedTests: 0,numTotalTests: 15yarn lintgit pushIndependent review
Note
Low Risk
Dev-only test harness and dependency wiring; no production controller or auth logic changes.
Overview
Adds a Farmslot headless recipe for
@metamask/perps-controllerso controller trading smoke can run via the sharedfarmslot-recipeCLI instead of a custom embedded runner.The workspace wires
@farmslot/recipe-harnessas a dev dependency, arecipe:controller-smokescript, and package-localrecipes/controller-smoke.recipe.jsonplusheadless.action-manifest.json. The recipe runsPerpsController.trading.test.ts, checks exit code and Jest JSON (success, zero failures, minimum test count), and indexes the report under.recipe-artifacts/.Repo hygiene:
.gitignoreentries for recipe output and local agent dirs;.yarnrc.ymlpreapproves@farmslot/*for the npm age gate;yarn.lockpicks up the new packages.Reviewed by Cursor Bugbot for commit 3811ad5. Bugbot is set up for automated code reviews on this repo. Configure here.