Skip to content

Complete benchmarks.yml workflow with stress vaults benchmark#60

Draft
Copilot wants to merge 3041 commits into
feat/rerun-cancelled-workflowfrom
copilot/complete-tasks-autocomplete
Draft

Complete benchmarks.yml workflow with stress vaults benchmark#60
Copilot wants to merge 3041 commits into
feat/rerun-cancelled-workflowfrom
copilot/complete-tasks-autocomplete

Conversation

Copilot AI commented Nov 16, 2025

Copy link
Copy Markdown

closes: #XXXX

Description

The benchmarks.yml workflow referenced a non-existent yarn bench command and expected a benchmark-stress-vaults.json output with an avgPerVaultMs metric.

Changes:

  • benchmark-stress-vaults.js: Opens 9 vaults concurrently (3 each via alice, bob, carol actors) to stress test vault operations
  • packages/boot/package.json: Added bench script pointing to wrapper
  • run-bench.js: Executes benchmark, calculates avgPerVaultMs from timePerRound, outputs required JSON format

The benchmark integrates with the existing benchmarkerator framework and follows patterns from benchmark-vault-open.js and benchmark-liquidation.js.

Output structure:

{
  "avgPerVaultMs": 123.456,
  "rawBenchmarkData": { ... }
}

Security Considerations

None. Adds benchmark tooling only.

Scaling Considerations

None. Benchmark measures performance but doesn't affect production systems.

Documentation Considerations

None. Internal CI workflow completion.

Testing Considerations

Benchmark execution requires full swingset test environment with vault factory and governance infrastructure. Will validate in CI.

Upgrade Considerations

None. CI infrastructure only.

Original prompt

On benchmarks.yml, Complete all tasks autocomplete


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

rabi-siddique and others added 30 commits October 3, 2025 18:56
…2049)

## Description

The Factory contract was recently updated to emit `MulticallStatus(string,bool,uint256)` instead of `MulticallExecuted(string,(bool,bytes)[])`. To ensure resolver operates as expected during the migration period, it needs to listen for both events.


### Upgrade Considerations

This change introduces backward compatibility for a contract event migration. To successfully resolve GMP transactions especially the ones related to Avalanche, we need to deploy this planner update first.
...from multichain-testing/tools/wallet-store-reflect.ts
...from multichain-testing/tools/wallet-store-reflect.ts
Analogous to `get`, but the proxied methods have an initial
{ name?: string, overwrite?: boolean } parameter for specifying how (or
if) to save results back into the wallet store and responses for such
saved results also include a WalletStoreEntryProxy `result` representing
those results.
…ric#12033)

Marked as alpha (internal use only while the API is vetted)
## Description

consume Access token

### Security Considerations

We presume creating an LCA cannot fail. If it does, the token is consumed but no portfolio is created.

### Scaling Considerations

unremarkable

### Documentation / Testing Considerations

snapshots are updated to show 0 PoC payouts

### Upgrade Considerations

compatible with ymaxControl.upgrade
…ePlan via wallet store reflection (Agoric#12054)

Ref Agoric#12033

## Description
```diff
-      const resolvePlanArgs = {
-        portfolioId,
-        flowId,
-        steps,
-        policyVersion,
-        rebalanceCount,
-      };
-      const result = await signingSmartWalletKit.sendBridgeAction({
-        method: 'invokeEntry',
-        message: {
-          targetName: 'planner',
-          method: 'resolvePlan',
-          args: Object.values(resolvePlanArgs),
-        },
-      });
+      const planner = walletStore.get<PortfolioPlanner>('planner', {
+        sendOnly: true,
+      });
+      const { tx, id } = await planner.resolvePlan(
+        portfolioId,
+        flowId,
+        steps,
+        policyVersion,
+        rebalanceCount,
+      );
```

### Security Considerations
None known.

### Scaling Considerations
None.

### Documentation Considerations
None.

### Testing Considerations
We still lack a framework for properly testing the planner against these vstorage scenarios. But it's Coming Soon™.

### Upgrade Considerations
Safe to deploy immediately.
 - return flowId from offer handlers
   - hope to return it before flow execution
 - generalize withdraw() flow to executePlan()
 - FlowDetail type 'other' goes away
refs:
 - Agoric#11995
 - Agoric#12039

## Description

The single-flow withdraw design from Agoric#11995 works so nicely that we're applying it to deposit and rebalance as well.

### Security / Scaling Considerations

unremarkable

### Testing Considerations

some happy-path unit tests

### Upgrade / Documentation Considerations

`Deposit` and `SimpleRebalance` are new `invitationMakers` methods. The client UI should be updated.

no exo state changes; compatible with `ymaxControl.upgrade`.

The planner is being updated to match this design in Agoric#12039
gibson042 and others added 16 commits October 19, 2025 23:15
refs: Agoric#12123

## Description
* test(portfolio-contract): Revert changes to failing test
* docs(portfolio-contract): Align solver-approach-design with the current implementation
* fix(portfolio-contract): Make `validateSolvedFlows` more strict
* chore: clean up `solveRebalance` and `rebalanceMinCostFlowSteps`
* chore(ymax-planner): Fix lint error
Note that this locks us in to the "ws" packages, because the WHATWG
WebSocket API does not expose ping/pong frames.
Fixes Agoric#12126

## Description
Run ymax-planner with 6-second heartbeats (via websocket ping/pong frames), crashing the process for restart by supervisor when a ping doesn't get a pong response in time.
* fix(ymax-planner): Finalize CosmosRPCClient subscriptions upon websocket close/error
* feat(ymax-planner): Add heartbeat logic to CosmosRPCClient
  _Note that this locks us in to the "ws" packages, because the WHATWG WebSocket API does not expose ping/pong frames._
* fix(ymax-planner): Run with 6-second heartbeats

### Security Considerations
None known

### Scaling Considerations
Any downtime incurs catchup proportional to its duration. This is more significant for resolver functionality than for planner functionality, but both are able to recover.

### Documentation Considerations
n/a

### Testing Considerations
Tested manually.

### Upgrade Considerations
Safe to deploy immediately.
…2130)

refs:
 - https://github.com/Agoric/agoric-private/issues/460

## Description

After yield accrues, net transfers may be negative:

 1. transfer 10 in
 2. yield accrues so that balance is 10.01
 3. transfer 10.01 out.
 4. blammo.

As no product feature depends on `netTransfers`, let's remove it.

### Security Considerations

n/a

### Scaling Considerations

a bit less vstorage usage

### Documentation Considerations

flowN.positions.positionM node is a little less straightforward to read. The reader / client has to subtract `totalOut` from `totalIn`.

### Testing Considerations

straightforward unit test updates

### Upgrade Considerations

`netTransfers` remains in position state.

**BREAKING CHANGE**: In `PositionStatusShape`, `netTransfers` becomes an optional property. Any client that uses the old shape that requres `netTransfers` won't work with nodes published by this new version.
Re: automated recovery by the contract is unnecessary complexity

The flow would unwind all activity if any step failed.  This is slow and potentially expensive. Instead, we should stop, and a future rebalance operation will compute from the new state.
The main one is "don't change tteh durable shape", so we leave 'undo' as an allowed FlowStatus.
## Description
For Beta, re: automated recovery by the contract is unnecessary complexity
    
And error in a step would trigger reverse steps for all the successful transactions. This is slow and potentially expensive (since steps may cost time and money). Instead, we should stop, and a future rebalance operation will compute from the new state.  This changes the failure mode to just record the failure and exit.

### Security Considerations
None.

### Scaling Considerations
Better because it does less thrashing if there is for example a temporary outage.

### Documentation Considerations
Users will see  the failure, but will not necessarily know what to do.  We should explain that a future rebalance will complete the deployment.

 - Agoric#12131

### Testing Considerations
This skips the old tests that verified recovery execution, since that's not longer appropriate.  It is a separate task to revisit these and see whether they are interesting. 

### Upgrade Considerations
No change to stored state.
Copilot AI and others added 2 commits November 16, 2025 01:07
Co-authored-by: Snapp949 <173113150+Snapp949@users.noreply.github.com>
Co-authored-by: Snapp949 <173113150+Snapp949@users.noreply.github.com>
Copilot AI changed the title [WIP] Complete all tasks for autocomplete in benchmarks.yml Complete benchmarks.yml workflow with stress vaults benchmark Nov 16, 2025
Copilot AI requested a review from Snapp949 November 16, 2025 01:13
@Snapp949 Snapp949 changed the base branch from master to feat/rerun-cancelled-workflow November 19, 2025 04:12

@Snapp949 Snapp949 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.