Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ description: Debug validator checkpoint inconsistencies where some validators ar
## When to Use

1. **Alert-based triggers:**

- Alert mentions "checkpoint inconsistency", "validator inconsistent", or "validators behind"
- Alert names like "Inconsistent latest checkpoints in validator set"
- Alert names containing "checkpoint inconsistency" with a threshold (e.g., "> 20")
Expand Down
1 change: 0 additions & 1 deletion .claude/skills/denylist-stuck-messages/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ Add message IDs to the relayer denylist configuration, create a PR, and deploy.
## When to Use

1. **After investigation:**

- User ran `/investigate-stuck-messages` and wants to denylist the found messages
- User says "denylist these" or "add these to blacklist"

Expand Down
1 change: 0 additions & 1 deletion .claude/skills/fix-merkle-root-mismatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ Before making any changes to the relayer database, you MUST:
| 1478 | 0xa66dbdc1874acfddf14e75e6a20dd1632e9e3206c5f5855884da0d26d8ca12fa | 9891872 |

2. Use `AskUserQuestion` to get explicit confirmation:

- Question: "Do you want to apply these merkle tree fixes to the relayer database?"
- Options: "Yes, apply fixes" / "No, cancel"

Expand Down
1 change: 0 additions & 1 deletion .claude/skills/investigate-merkle-root-mismatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ description: Investigate merkle root mismatch alerts between relayer and validat
## When to Use

1. **Alert-based triggers:**

- Alert mentions "merkle root mismatch"
- GCP logs show: "checkpoint root does not match canonical root from merkle proof"
- The `hyperlane_merkle_root_mismatch` metric is firing
Expand Down
1 change: 0 additions & 1 deletion .claude/skills/investigate-stuck-messages/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ Query the relayer API to investigate stuck messages, their retry counts, and err
## When to Use

1. **Alert-based triggers:**

- Alert: "Known app context relayer queue length > 0 for 40m"
- Any alert mentioning stuck messages in prepare queue
- High retry counts for specific app contexts
Expand Down
1 change: 0 additions & 1 deletion .claude/skills/warp-fork/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ Fork a warp route using the local HTTP registry.
0. Check if `http://localhost:3333` is running. If not, run the start-http-registry SKILL. If that fails, use `AskUserQuestion` to prompt the user for an alternate registry URL to use instead of `http://localhost:3333`.

1. First, use `AskUserQuestion` to prompt the user for the warp route ID:

- Question: "Which warp route would you like to fork?"
- Header: "Warp Route"
- Options: Provide 2-3 common examples if known, otherwise use generic placeholders. Note that the fork may fail if the warp routes are invalid. Re-prompt the user!
Expand Down
24 changes: 17 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,26 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}

- name: Run prettier (changed files)
- name: Run oxfmt (changed files)
if: github.event_name == 'pull_request'
run: >-
cat changed_files.txt |
xargs -r pnpm exec prettier --check --ignore-unknown --no-error-on-unmatched-pattern
run: |
cat changed_files.txt | grep -E '\.(js|ts|jsx|tsx|json|md)$' | \
xargs -r pnpm exec oxfmt --check --no-error-on-unmatched-pattern

- name: Run prettier for Solidity (changed files)
if: github.event_name == 'pull_request'
run: |
cat changed_files.txt | grep -E '\.sol$' | \
xargs -r pnpm exec prettier --check --no-error-on-unmatched-pattern

- name: Run oxfmt (all files)
if: github.event_name != 'pull_request'
run: pnpm exec oxfmt --check .
continue-on-error: true

- name: Run prettier (all files)
- name: Run prettier for Solidity (all files)
if: github.event_name != 'pull_request'
run: >-
pnpm exec prettier --check --ignore-unknown --no-error-on-unmatched-pattern .
run: pnpm exec prettier --check 'solidity/contracts/**/*.sol' 'solidity/test/**/*.sol'
continue-on-error: true

- name: Clean up
Expand Down
8 changes: 4 additions & 4 deletions .lintstagedrc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"*.js": ["oxlint", "prettier --write"],
"*.ts": ["oxlint", "prettier --write"],
"*.md": "prettier --write",
"*.js": ["oxlint", "oxfmt --write"],
"*.ts": ["oxlint", "oxfmt --write"],
"*.md": "oxfmt --write",
"*.sol": "prettier --write",
"*.json": "prettier --write"
"*.json": "oxfmt --write"
}
36 changes: 36 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"singleQuote": true,
"trailingComma": "all",
"ignorePatterns": [
"*.sol",
"solidity/**",
"*.rs",
"*.toml",
"*.sh",
"*.env",
"*.lock",
"*.Dockerfile",
"Dockerfile",
"**/dist/**",
".changeset/**",
"pnpm-lock.yaml",
".pnpm-store/**",
"rust/**",
"solidity/artifacts/**",
"solidity/cache/**",
"solidity/core-utils/typechain/**",
"solidity/lib/**",
"tools/**",
"typescript/cli/configs/**",
"typescript/helloworld/artifacts/**",
"typescript/helloworld/cache/**",
"typescript/helloworld/src/types/**",
"typescript/infra/helm/**/templates/**",
"typescript/infra/src/infrastructure/external-secrets/helm/templates/**",
"vectors/**"
]
}
29 changes: 6 additions & 23 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -1,25 +1,8 @@
{
"tabWidth": 2,
"singleQuote": true,
"trailingComma": "all",
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false
}
}
],
"importOrder": ["^@hyperlane-xyz/(.*)$", "^../(.*)$", "^./(.*)$"],
"importOrderSeparation": true,
"importOrderSortSpecifiers": true,
"importOrderParserPlugins": ["importAssertions", "typescript", "jsx"],
"plugins": [
"prettier-plugin-solidity",
"@trivago/prettier-plugin-sort-imports"
]
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false,
"plugins": ["prettier-plugin-solidity"]
}
4 changes: 4 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"recommendations": ["oxc.oxc-vscode", "esbenp.prettier-vscode"],
"unwantedRecommendations": []
}
32 changes: 27 additions & 5 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,28 @@
{
"rust-analyzer.linkedProjects": [
"./rust/main/Cargo.toml",
"./rust/sealevel/Cargo.toml",
],
}
"rust-analyzer.linkedProjects": [
"./rust/main/Cargo.toml",
"./rust/sealevel/Cargo.toml"
],
"editor.formatOnSave": true,
"[typescript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[solidity]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
52 changes: 25 additions & 27 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
Apache License
==============
# Apache License

_Version 2.0, January 2004_
_&lt;<http://www.apache.org/licenses/>&gt;_
Expand Down Expand Up @@ -89,27 +88,27 @@ You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:

* **(a)** You must give any other recipients of the Work or Derivative Works a copy of
this License; and
* **(b)** You must cause any modified files to carry prominent notices stating that You
changed the files; and
* **(c)** You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
- **(a)** You must give any other recipients of the Work or Derivative Works a copy of
this License; and
- **(b)** You must cause any modified files to carry prominent notices stating that You
changed the files; and
- **(c)** You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
- **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.

You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
Expand Down Expand Up @@ -180,16 +179,15 @@ the same “printed page” as the copyright notice for easier identification wi
third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,10 @@ For an alpha or beta version, follow the directions [here](https://github.com/ch
To manually trigger Agent or Monorepo Docker builds in CI, you can use the workflows provided in the repository. Here are the steps to do so:

1. **Navigate to the workflow:**

- For agents, go to the [Rust Docker Workflow](https://github.com/hyperlane-xyz/hyperlane-monorepo/actions/workflows/rust-docker.yml).
- For the monorepo, go to the [Monorepo Docker Workflow](https://github.com/hyperlane-xyz/hyperlane-monorepo/actions/workflows/monorepo-docker.yml).

2. **Trigger the workflow:**

- On the workflow page, click on the "Run workflow" button.
- You may need to select a branch and decide whether to trigger builds for the `arm64` platform.

Expand Down
5 changes: 4 additions & 1 deletion docs/2025-11-20-multi-vm-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,10 @@ import { AltVM } from '@hyperlane-xyz/provider-sdk';
import { GasAction, MinimumRequiredGasByAction } from '@hyperlane-xyz/utils';

// After
import { GasAction, MinimumRequiredGasByAction } from '@hyperlane-xyz/provider-sdk';
import {
GasAction,
MinimumRequiredGasByAction,
} from '@hyperlane-xyz/provider-sdk';
```

#### Protocol Type Imports (No Change Needed)
Expand Down
6 changes: 0 additions & 6 deletions docs/ai-agents/operational-debugging.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,26 +72,22 @@ After identifying the alert, immediately check the corresponding dashboards for
### Key Dashboards for Debugging

1. **Easy Dashboard** (`uid: fdf6ada6uzvgga`)

- **Primary panels for incidents:**
- "Prepare queues per Hyperlane App" - Filter by `app_context` to see specific application issues
- "Critical Reprepare Reasons" - Shows operation_status breakdown for stuck messages
- "Prepare queue diffs" - Identifies sudden queue buildups
- **Variables:** Set `chain` and `RelayerContext` filters to narrow down issues

2. **Relayers v2 & v3** (`uid: k4aYDtK4k`)

- "Prepare Queues by Remote" - Overall queue health by destination chain
- "Queue Lengths" - Detailed view with queue_name breakdown
- "Messages Processed" - Verify if messages are flowing

3. **RPC Usage & Errors** (`uid: bdbwtrzoms5c0c`)

- Check RPC error rates when suspecting infrastructure issues
- Monitor specific chain RPC health

4. **Lander Dashboard** (`uid: 197feea9-f831-48ce-b936-eaaa3294a3f6`)

- **Transaction submission metrics:**
- "Building Queue Length" - Messages waiting to be built into transactions
- "Inclusion Queue Length" - Transactions waiting for inclusion on-chain
Expand All @@ -106,7 +102,6 @@ After identifying the alert, immediately check the corresponding dashboards for
- **Key for debugging:** High inclusion queue length indicates transaction submission issues

5. **Validator Dashboard - In-house** (`uid: xrNCvpK4k`)

- **Critical validator health metrics:**
- "Unsigned Messages" - Messages observed but not yet signed by validators
- "Messages Signed" - Rate of checkpoint signing activity
Expand Down Expand Up @@ -175,7 +170,6 @@ rate(hyperlane_lander_finalized_transactions[5m])
- Filter by `app_context` to isolate the problematic application
- Look at `operation_status` labels to understand error type
2. **Identify error patterns:**

- `Retry(Error estimating costs for process call)` → Gas estimation failure, check for contract reverts
- `Retry(Could not fetch metadata)` → Usually temporary, only investigate if persistent
- `Retry(ApplicationReport(...))` → Application-specific errors
Expand Down
Loading
Loading