Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
45a7404
chore(deps): bump actions/setup-node from 5 to 6
dependabot[bot] May 2, 2026
b62b1d8
chore(deps): bump actions/upload-artifact from 4 to 7
dependabot[bot] May 2, 2026
a797411
chore(deps): bump actions/checkout from 5 to 6
dependabot[bot] May 2, 2026
e504b6a
chore(deps): bump actions/github-script from 7 to 9
dependabot[bot] May 2, 2026
deff8a2
chore(deps): bump the frontend-minor-patch group with 13 updates
dependabot[bot] May 2, 2026
05e3c98
Merge pull request #7 from iap/dependabot/npm_and_yarn/frontend-minor…
iap May 3, 2026
d3152b6
Merge pull request #5 from iap/dependabot/github_actions/actions/chec…
iap May 3, 2026
da1bd9c
Merge pull request #3 from iap/dependabot/github_actions/actions/setu…
iap May 3, 2026
39efb7f
Merge pull request #4 from iap/dependabot/github_actions/actions/uplo…
iap May 3, 2026
bef8732
Merge pull request #6 from iap/dependabot/github_actions/actions/gith…
iap May 3, 2026
729b438
fix(readiness): run pre-checks before contracts working directory exists
iap May 3, 2026
42160a7
fix(frontend): remove non-component export from button ui
iap May 3, 2026
62c7c34
ci(security): add codeql and dependency review gates
iap May 3, 2026
dd0b1a8
chore(security): add local slither install and core scan targets
iap May 3, 2026
1dcab6c
docs(phase1): add comprehensive contributor & deployment runbooks
iap May 5, 2026
b763d4e
chore(deps): bump github/codeql-action from 3 to 4 (#16)
dependabot[bot] May 5, 2026
81574ac
chore(ci): bump dependency-review-action from v4 to v5
iap May 5, 2026
ee8a183
chore(ci): disable CodeQL triggers until repo transferred to org with…
iap May 5, 2026
ff58873
Enable org-transfer governance: CodeQL, Gitleaks, release-gate contai…
iap May 6, 2026
7fb3338
fix(ci): add USER root in release-gate Dockerfile for apt-get permiss…
iap May 6, 2026
8925df3
ci(security): fix dependency review tag and use OSS gitleaks CLI
iap May 6, 2026
3ed0b08
ci(security): fix gitleaks PATH on github runner
iap May 6, 2026
71f688f
ci(security): run gitleaks scan via docker image
iap May 6, 2026
8128007
ci(security): remove hardcoded key and scope gitleaks to workspace
iap May 6, 2026
afb066c
ci(contracts): fix anvil key extraction for release check
iap May 6, 2026
c98f13a
ci(contracts): require 64-byte anvil private key extraction
iap May 6, 2026
773f284
ci: always run contracts/frontend checks on protected branches (#21)
iap May 6, 2026
0573b9b
ci: phase-1 reusable workflows for frontend, slither, and secrets sca…
iap May 6, 2026
51c8f1c
fix(contracts): bridge approval safety + IRYLA interface decoupling
iap May 6, 2026
24b716e
docs: sync governance and CI docs with current protections
iap May 6, 2026
4064cab
chore(deps): bump frontend minor/patch dependencies
dependabot[bot] May 7, 2026
280faa8
fix(deps): bump vite 6.1.0 → 6.4.2 (security)
iap May 7, 2026
91b6a69
test(contracts): add missing unit test coverage
iap May 7, 2026
0a8ded7
chore(governance): migrate CODEOWNERS to @trade/maintainers team
iap May 7, 2026
df25264
chore(ci): switch CodeRabbit to assertive profile
iap May 7, 2026
fbc3ce4
fix(docs): add VALIDATE_MODE to staging checklist prerequisites
iap May 7, 2026
e5ecd9e
chore(docs): remove stale pre-transfer planning documents
iap May 7, 2026
98e49c1
chore(governance): clean up CODEOWNERS
iap May 7, 2026
638344e
fix(ci): workflow correctness and consistency fixes
iap May 7, 2026
35009d8
feat(contracts): migrate AttestedSettlementVerifier to EIP-712
iap May 7, 2026
d2e24c3
chore: improve gitignore coverage
iap May 7, 2026
9c45f70
fix(ci): reliability and correctness fixes
iap May 7, 2026
8bfc148
chore(deps): ignore transitive alerts from super-cli
iap May 7, 2026
3cbd048
docs: add SECURITY.md
iap May 7, 2026
5fa1d83
chore(deps): bump @types/node from 22.13.1 to 25.6.1
dependabot[bot] May 7, 2026
ee25173
chore(deps): bump typescript from 5.7.3 to 6.0.3
dependabot[bot] May 7, 2026
71dc94c
chore(deps): bump frontend-minor-patch group
dependabot[bot] May 7, 2026
b6e9060
chore(deps): bump docker/setup-buildx-action from 3 to 4
dependabot[bot] May 8, 2026
9d85729
chore(deps): bump frontend-minor-patch group
dependabot[bot] May 8, 2026
79a9295
fix: stale references and check name mismatches
iap May 8, 2026
d3ea0f5
test(contracts): add bridge integration test against supersim
iap May 8, 2026
bd423c0
test(contracts): add bridge adapter invariant fuzz tests
iap May 8, 2026
85c8c00
fix(governance): sync check lists and fix ruleset condition
iap May 8, 2026
9f93aa8
chore(governance): document new ruleset structure
iap May 8, 2026
55d374d
feat(token): rename RYLA display name to 'RYLA Credits'
iap May 8, 2026
2f21c7d
test
iap May 9, 2026
4de5277
fix(ci): use matrix language as CodeQL job name
iap May 9, 2026
fdfa7d3
chore(config): harden staging profile and document environment setup
iap May 9, 2026
30cedd5
feat(frontend): replace dev dashboard with protocol info page
iap May 9, 2026
889b926
chore(docs): cleanup and NatSpec improvements
iap May 10, 2026
44a9400
fix(contracts): document setVerifier interface check limitation
iap May 10, 2026
384880a
docs: add protocol philosophy to README
iap May 10, 2026
22d9276
fix(ci): add working-directory override to pre-checkout branch enforc…
iap May 10, 2026
c31b5bd
fix(ops): enable post-deploy in rehearse-production-lock
iap May 10, 2026
98811e0
fix(ops): export deployed verifier address to env before PostDeployMA…
iap May 10, 2026
8d590eb
fix(ci): exclude Anvil default key from secrets drift guard
iap May 10, 2026
6e74b1e
test
iap May 10, 2026
3b5720b
fix(docs): correct two inaccurate invariants in THREAT_MODEL.md
iap May 10, 2026
8627f4b
fix(contracts): move consumedIntents assignment before external call …
iap May 10, 2026
bdcc79e
chore(governance): set canary to 0 required approvals for solo mainta…
iap May 10, 2026
4057da5
docs(contracts): add NatSpec to settleMint and settleBurn
iap May 10, 2026
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
4 changes: 2 additions & 2 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ language: "en-US"
early_access: false

reviews:
profile: "chill"
request_changes_workflow: false
profile: "assertive"
request_changes_workflow: true
high_level_summary: true
review_status: true
collapse_walkthrough: false
Expand Down
53 changes: 42 additions & 11 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,14 +1,45 @@
# Global default owner
* @iap
# Format: <path> @owner
# Paths are matched top-to-bottom; first match wins.

# Protocol-critical scope
/contracts/src/** @iap
/contracts/script/** @iap
/contracts/test/** @iap
/contracts/RUNBOOK.md @iap
/contracts/README.md @iap
* @trade/maintainers

# Contracts

/contracts/src/** @trade/maintainers
/contracts/test/** @trade/maintainers
/contracts/script/** @trade/maintainers
/contracts/foundry.toml @trade/maintainers
/contracts/Makefile @trade/maintainers
/contracts/RUNBOOK.md @trade/maintainers
/contracts/README.md @trade/maintainers

# CI and governance
/.github/workflows/** @iap
/.github/PRODUCTION_GOVERNANCE_CHECKLIST.md @iap
/BRANCHING.md @iap

/.github/workflows/** @trade/maintainers
/.github/PRODUCTION_GOVERNANCE_CHECKLIST.md @trade/maintainers
/.github/CODEOWNERS @trade/maintainers
/BRANCHING.md @trade/maintainers
/CONTRIBUTING.md @trade/maintainers

# Frontend

/src/** @trade/maintainers
/index.html @trade/maintainers

# Configuration and build

/package.json @trade/maintainers
/pnpm-lock.yaml @trade/maintainers
/tsconfig*.json @trade/maintainers
/vite.config.ts @trade/maintainers
/eslint.config.js @trade/maintainers
/.prettierrc.json @trade/maintainers
/mprocs.yaml @trade/maintainers
/remappings.txt @trade/maintainers

# Documentation

/README.md @trade/maintainers
/DEPLOYMENT.md @trade/maintainers
/TROUBLESHOOTING.md @trade/maintainers
/LICENSE @trade/maintainers
62 changes: 55 additions & 7 deletions .github/PRODUCTION_GOVERNANCE_CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,24 @@ GitHub path: `Settings -> Branches -> Add branch protection rule`
- Enable `Dismiss stale pull request approvals when new commits are pushed`
- Enable `Require status checks to pass before merging`
- Add required checks:
- `Analyze (javascript-typescript)`
- `gitleaks / Gitleaks Scan`
- `Detect Secrets Drift`
- `Release Gate Container`
- `Dependency Review`
- `Contracts Unit + Invariant`
- `Contracts Release Check (Dry-Run + Execute Smoke)`
- `Slither Core Contracts`
- `Secrets Drift Guard`
- `Contracts Production Mode Smoke`
- `slither-core / Slither Core Contracts`
- `frontend-checks / Frontend Checks (Node 20)`
- `frontend-checks / Frontend Checks (Node 22)`
- `Validate Release PR Checklist`
- `Validate Release Evidence`
- Optional additional checks (recommended but not globally required):
- `Contracts Unit + Invariant`
- `Contracts Env Guard`
- `Contracts Evidence Manifest`
- `Governance Policy Guard`
- Governance policy PR rule:
- If PR changes `scripts/github/apply-governance.sh`, `BRANCHING.md`, or this checklist, ensure `Validate Governance Policy Consistency` passes before merge.
- Enable `Require branches to be up to date before merging`
Expand All @@ -34,10 +46,21 @@ GitHub path: `Settings -> Branches -> Add branch protection rule`
- Enable `Dismiss stale pull request approvals when new commits are pushed`
- Enable `Require status checks to pass before merging`
- Add required checks:
- `Analyze (javascript-typescript)`
- `gitleaks / Gitleaks Scan`
- `Detect Secrets Drift`
- `Release Gate Container`
- `Dependency Review`
- `Contracts Unit + Invariant`
- `Contracts Release Check (Dry-Run + Execute Smoke)`
- `Slither Core Contracts`
- `Secrets Drift Guard`
- `Contracts Production Mode Smoke`
- `slither-core / Slither Core Contracts`
- `frontend-checks / Frontend Checks (Node 20)`
- `frontend-checks / Frontend Checks (Node 22)`
- Optional additional checks (recommended but not globally required):
- `Contracts Unit + Invariant`
- `Contracts Env Guard`
- `Governance Policy Guard`
- Governance policy PR rule:
- If PR changes `scripts/github/apply-governance.sh`, `BRANCHING.md`, or this checklist, ensure `Validate Governance Policy Consistency` passes before merge.
- Enable `Require branches to be up to date before merging`
Expand All @@ -50,10 +73,21 @@ GitHub path: `Settings -> Branches -> Add branch protection rule`
- Enable `Require a pull request before merging`
- Enable `Require status checks to pass before merging`
- Add required checks:
- `Analyze (javascript-typescript)`
- `gitleaks / Gitleaks Scan`
- `Detect Secrets Drift`
- `Release Gate Container`
- `Dependency Review`
- `Contracts Unit + Invariant`
- `Contracts Release Check (Dry-Run + Execute Smoke)`
- `Slither Core Contracts`
- `Secrets Drift Guard`
- `Contracts Production Mode Smoke`
- `slither-core / Slither Core Contracts`
- `frontend-checks / Frontend Checks (Node 20)`
- `frontend-checks / Frontend Checks (Node 22)`
- Optional additional checks (recommended but not globally required):
- `Contracts Unit + Invariant`
- `Contracts Env Guard`
- `Governance Policy Guard`
- Governance policy PR rule:
- If PR changes `scripts/github/apply-governance.sh`, `BRANCHING.md`, or this checklist, ensure `Validate Governance Policy Consistency` passes before merge.
- Choose one model:
Expand Down Expand Up @@ -111,7 +145,7 @@ You can apply most settings via script:
cd /path/to/mark
export GH_PAT=<github_token_with_repo_admin_scope>
# optional:
# export GH_REPO=iap/mark
# export GH_REPO=trade/mark
# export MAIN_REVIEW_COUNT=2
# export DEV_REVIEW_COUNT=1
# export MAIN_PUSH_ALLOW_USERS=iap
Expand All @@ -129,3 +163,17 @@ What this script applies:
- `production` environment creation
- optional production required reviewers by user ID
- optional direct-push restrictions via `*_PUSH_ALLOW_*` allowlists


## 9) Verify active protections after transfer

Run the verification script with a repo-admin token:

```bash
cd /path/to/mark
export GH_PAT=<github_token_with_repo_admin_scope>
# optional: export GH_REPO=your-org/mark
./scripts/github/verify-governance.sh
```

Expected output: all three branches (`dev`, `canary`, `main`) report `PASS` and required checks include CodeQL (`Analyze (javascript-typescript)`), `gitleaks / Gitleaks Scan`, and `Dependency Review`.
16 changes: 16 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ Use this template only for production candidate merges.

- [ ] `Contracts Unit + Invariant` CI passed
- [ ] `Contracts Release Check (Dry-Run + Execute Smoke)` CI passed
- [ ] `Contracts Production Mode Smoke` CI passed
- [ ] `Slither Core Contracts` CI passed
- [ ] `Analyze (javascript-typescript)` CI passed
- [ ] `Gitleaks Scan` CI passed
- [ ] `Dependency Review` CI passed
- [ ] `Frontend Checks (Node 20)` CI passed
- [ ] `Frontend Checks (Node 22)` CI passed
- [ ] `Contracts Mainnet Readiness` run from `main` branch
- [ ] Readiness artifact uploaded and reviewed
- [ ] Verify output reviewed (role/config expectations)
Expand All @@ -27,6 +33,16 @@ Evidence links/values:
- [ ] Security reviewer approval
- [ ] Deployment operator approval

## Staging Go/No-Go (Pre-Mainnet)

Reference: `contracts/STAGING_GO_NO_GO_CHECKLIST.md`

- [ ] Staging rehearsal workflow succeeded (`contracts-staging-rehearsal.yml`)
- [ ] Production-lock verify succeeded (`contracts-production-lock-verify.yml`)
- [ ] Staging evidence artifacts reviewed (`mark-staging-release`, `mark-staging-rehearsal`, `mark-production-lock-verify`)
- [ ] Freshness and lineage policy passed (`contracts-promotion-checklist.yml`)
- [ ] Final Go/No-Go decision documented with links

## Deployment Inputs

- RPC target:
Expand Down
16 changes: 16 additions & 0 deletions .github/actions/setup-foundry/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Setup Foundry

description: Install pinned Foundry toolchain used by repository workflows.

inputs:
foundry-version:
description: Foundry version (for example 1.5.0 or nightly-<commit>)
required: true

runs:
using: composite
steps:
- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: ${{ inputs.foundry-version }}
28 changes: 28 additions & 0 deletions .github/actions/setup-node-pnpm/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Setup Node + pnpm

description: Setup Node.js and activate a pinned pnpm version via corepack.

inputs:
node-version:
description: Node.js version
required: true
pnpm-version:
description: pnpm version to activate via corepack
required: false
default: "9.0.2"

runs:
using: composite
steps:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
package-manager-cache: false

- name: Setup pnpm (corepack)
shell: bash
run: |
corepack enable
corepack prepare pnpm@${{ inputs.pnpm-version }} --activate
pnpm --version
19 changes: 17 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
day: "monday"
time: "03:00"
timezone: "UTC"
open-pull-requests-limit: 10
open-pull-requests-limit: 5
labels:
- "dependencies"
- "ci"
Expand All @@ -16,19 +17,33 @@ updates:

- package-ecosystem: "npm"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
day: "monday"
time: "03:30"
timezone: "UTC"
open-pull-requests-limit: 10
open-pull-requests-limit: 8
labels:
- "dependencies"
- "frontend"
- "security"
allow:
- dependency-type: "direct"
- dependency-type: "indirect"
groups:
frontend-minor-patch:
update-types:
- "minor"
- "patch"
commit-message:
prefix: "chore(deps)"
ignore:
# Transitive deps from @eth-optimism/super-cli (dev/deploy tool, not runtime).
# No upstream fix available — re-evaluate when super-cli bumps these packages.
- dependency-name: "@hono/node-server"
versions: ["<= 1.13.8"]
- dependency-name: "drizzle-orm"
versions: ["<= 0.38.1"]
- dependency-name: "@stablelib/ed25519"
versions: ["<= 1.0.3"]
51 changes: 51 additions & 0 deletions .github/workflows/_reusable-contracts-slither.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Reusable Contracts Slither

on:
workflow_call:
inputs:
foundry_version:
description: Foundry version used for Slither compile path
required: false
default: "1.5.0"
type: string

jobs:
slither-core:
name: Slither Core Contracts
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.11"

- name: Install Slither
run: pip install slither-analyzer==0.11.5

- name: Setup Foundry
uses: ./.github/actions/setup-foundry
with:
foundry-version: ${{ inputs.foundry_version }}

- name: Run Slither on MARK core contracts
working-directory: contracts
run: |
for target in \
src/token/RYLA.sol \
src/bridge/MARKBridgeAdapter.sol \
src/settlement/MARKSettlementModule.sol \
src/settlement/verifier/AttestedSettlementVerifier.sol
do
slither "$target" \
--solc-remaps "@interop-lib/=lib/interop-lib/src/ @openzeppelin/=lib/createx/lib/openzeppelin-contracts/" \
--exclude-dependencies \
--exclude "naming-convention,timestamp,arbitrary-send-erc20,reentrancy-balance,reentrancy-benign" \
--filter-paths "lib|test|script|out|cache" \
--fail-medium
done
48 changes: 48 additions & 0 deletions .github/workflows/_reusable-frontend-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Reusable Frontend Checks

on:
workflow_call:
inputs:
node_versions:
description: JSON array of Node versions
required: false
default: '["20","22"]'
type: string
pnpm_version:
description: pnpm version used by corepack
required: false
default: "9.0.2"
type: string

jobs:
frontend-checks:
name: Frontend Checks (Node ${{ matrix.node }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node: ${{ fromJSON(inputs.node_versions) }}

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Setup Node + pnpm
uses: ./.github/actions/setup-node-pnpm
with:
node-version: ${{ matrix.node }}
pnpm-version: ${{ inputs.pnpm_version }}

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Typecheck
run: pnpm -s typecheck

- name: Lint
run: pnpm -s lint

- name: Build frontend
run: pnpm -s build:frontend
Loading