Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
4e71a74
add ict-rs
Mar 28, 2026
9ed2375
create api file
Mar 28, 2026
fdb575c
unify terp-rs
Mar 28, 2026
cbe458a
add ict-rs
Mar 31, 2026
ee740a9
refactor workspace wip
Mar 31, 2026
9ef1ebb
refactor workspace wip
Mar 31, 2026
e53c72c
moved headstash and ict-rs into their own library
May 19, 2026
d596cd6
add nips & pocket-watcher
May 19, 2026
e625e27
add some testing and better nip-01 support
May 21, 2026
0508cdc
prep calendar
May 22, 2026
4f27fbc
create cw721 metadata bridge
May 22, 2026
e3608aa
tune nips
May 22, 2026
35277ed
letgo
May 23, 2026
58bf5fb
gen-tools & nips
May 25, 2026
a2bdf80
nip21, nip19,nip44,nip65 progress
May 25, 2026
763bd3e
nip73, nip87, nip-73,
May 25, 2026
6f64471
tune tool-gen
May 26, 2026
da69035
nip-77 design, nostr suite test
May 26, 2026
b53a03f
prep nuts, tune gentools
May 26, 2026
da2943f
unify default test suite, add core bud structure in library,
May 31, 2026
b7f82c3
tune with current e2e goals
Jun 1, 2026
c72a0bc
tune
Jun 2, 2026
80891ba
improve layout of terp-rs crate
Jun 3, 2026
ab9fc20
bump entropy generator example, include ibc-type libraries feature gated
Jun 3, 2026
3a089f0
tune proto gen script
Jun 3, 2026
8317749
feature gate axum
Jun 4, 2026
d5f095d
remove website scripts
Jun 5, 2026
8476fc0
premine ibc-denoms graph rough draft
Jun 5, 2026
8ccff51
ibc-info
Jun 6, 2026
1222876
tune in prep for release
Jun 7, 2026
ab6f213
tuned ibc-info scripts to strictly follow ibc-data and assetlist specs
Jun 12, 2026
2707f69
readmes
Jun 12, 2026
3855213
correct ibc-data and assetlist generation support
Jun 13, 2026
4e2da03
tune ibc info scripts
Jun 19, 2026
9b2e2b9
add mvp 08-wasm-zebra-crosslink-light-client
Jun 19, 2026
7aaac4a
improve format, use internal types to minimize bloat, use cosmwasm in…
Jun 19, 2026
7c48f19
compiles
Jun 19, 2026
407ac4c
generate prost types
Jun 23, 2026
89b07f0
checkpoint: crosslink-lightclient
Jul 11, 2026
1ade364
docs: IBC data authenticity and multi-hop harness design
Jul 20, 2026
cd07d37
docs: IBC authenticity plan and parallel agent prompts
Jul 20, 2026
3246d09
feat(scripts): add 4-chain tokenfactory multihop authenticity harness
Jul 20, 2026
e6c3371
fix(scripts): borrow stdout strings in multihop denom-trace helper
Jul 20, 2026
55888a5
feat(scripts): extract ibc authenticity lib and golden tests
Jul 20, 2026
7d929ee
docs: agent C blind-spot critic prompt for IBC authenticity
Jul 20, 2026
7489ba4
docs: IBC authenticity blind-spot review (agent C)
Jul 20, 2026
4df2318
fix(scripts): close IBC authenticity loop from critic review
Jul 20, 2026
8c9a6a3
docs: IBC authenticity blind-spot follow-up (agent C)
Jul 20, 2026
8f52a7f
docs: offline corrected IBC preferred routes view
Jul 20, 2026
45081b9
release: terp-rs v0.0.2-dev snapshot
Jul 21, 2026
53587d2
docs(revenue): mark private-dex as target home for corridor settle
Jul 22, 2026
f3aae22
chore: home private-bridge product in terp-rs (out of spectrum grant …
Jul 22, 2026
a059748
fix(deps): prevent dual CosmWasm identity and correct multi-test package
Aug 6, 2026
37ee97d
docs(deps): CosmWasm-aligned v3.1.0-zk.N branch policy; retire freeze…
Aug 6, 2026
d9311ba
push progress
Aug 10, 2026
11a2b8a
fix(hash-market): deterministic VE and merkle/oracle order
Aug 19, 2026
9923469
Merge v0.0.2-dev into feat/zk-wasmvm.
Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Local wasm32 checks only. **Published CosmWasm artifacts MUST use the Docker
# optimizer (Rust 1.86 MSRV)** — see scripts/build-crosslink-wasm.sh.
# Host imports (db_*, ed25519_*, …) are provided by wasmvm at runtime.
[target.wasm32-unknown-unknown]
rustflags = ["-C", "link-arg=--allow-undefined"]
91 changes: 14 additions & 77 deletions .github/workflows/basic.yml
Original file line number Diff line number Diff line change
@@ -1,85 +1,22 @@
name: Basic
# DEPRECATED — replaced by tiered CI.
# See: ci-core.yml (always), ci-extended.yml (paths/labels), ci-heavy.yml (admin/nightly).
# This stub keeps history; job always succeeds with a pointer so old branch protection
# rules referencing "Basic" do not silently mean nothing forever.
name: Basic (deprecated)

on:
pull_request:
workflow_dispatch:

jobs:
compile:
name: Compile
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: 1.68.2
target: wasm32-unknown-unknown
override: true

- name: Compile WASM contract
uses: actions-rs/cargo@v1
with:
command: wasm
args: --locked

lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: 1.68.2
override: true
components: rustfmt, clippy
permissions:
contents: read

- uses: extractions/setup-just@v1

- name: Run cargo doc
uses: actions-rs/cargo@v1
with:
command: doc
args: -F library --no-deps

- name: Run cargo clippy
run: just lint

- name: Generate Schema
run: just schema

- name: Schema Changes
# fails if any changes not committed
run: |
CHANGES_IN_REPO=$(git status --porcelain)
if [[ -n "$CHANGES_IN_REPO" ]]; then
echo "Repository is dirty. Showing 'git status' and 'git --no-pager diff' for debugging now:"
git status && git --no-pager diff
exit 1
fi

coverage:
name: Coverage
jobs:
redirect:
name: use CI Core instead
runs-on: ubuntu-latest
container:
image: xd009642/tarpaulin:0.24.0
options: --security-opt seccomp=unconfined
steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Generate code coverage
- name: Notice
run: |
cargo tarpaulin --verbose --workspace --timeout 120 --out Xml

- name: Upload to codecov.io
uses: codecov/codecov-action@v2
with:
token: ${{secrets.CODECOV_TOKEN}}
fail_ci_if_error: true
echo "::warning::Workflow 'Basic' is deprecated. Real gates are CI Core / CI Extended / CI Heavy."
echo "See docs/ci.md and .github/workflows/ci-*.yml"
117 changes: 117 additions & 0 deletions .github/workflows/ci-core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Tier 0 — always on. Offline, no Docker, no secrets.
# Goal: exercise terp-scripts agent contracts + lightweight internal libs.
# Dense packing: internal libs run as 2 balanced multi-package matrix packs
# (not one job per crate). Offline IBC pipeline stays serial (data deps).
name: CI Core

on:
pull_request:
push:
branches:
- main
- master
- "feat/**"
workflow_dispatch:

concurrency:
group: ci-core-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
# Checkout root IS the terp-rs repo on GitHub (permissionlessweb/terp-rs).
# Local act sets GITHUB_WORKSPACE to this crate via scripts/act (monorepo bind).

jobs:
# ── Agent IBC offline plane (terp-scripts) — MUST stay serial ──────────
terp-scripts-offline:
name: terp-scripts offline (ibc unit/golden + validate)
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.86"
components: rustfmt, clippy

- name: Cache cargo
uses: Swatinem/rust-cache@v2
with:
workspaces: ". -> target"
shared-key: terp-scripts-offline

- name: Install just
uses: extractions/setup-just@v2

- name: Preflight offline
run: just scripts-ibc-preflight offline

- name: Offline IBC tests + rebuild-from-public
run: just scripts-ibc-offline

- name: Validate public/ (RunReport JSON)
run: just scripts-ibc-validate

- name: Assert validate ok via jq
run: |
set -euo pipefail
cargo run -p terp-scripts --bin terp-ibc --quiet -- validate --format json \
| tee /tmp/run_report.json
python3 - <<'PY'
import json, sys
r = json.load(open("/tmp/run_report.json"))
assert r.get("ok") is True, r
assert r.get("exit_code") == 0, r
assert r.get("tool") == "terp-ibc", r
print("RunReport OK:", r.get("verb"), r.get("duration_ms"), "ms")
PY

# ── Internal lib crates — dense 2-pack matrix (multi-package cargo) ───
internal-libs:
name: internal libs (${{ matrix.pack }})
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
include:
# Balanced packs: auth/sdk-ish vs light-client/nips (see docs/ci/dense-parallel-packing.md)
- pack: core-libs-a
- pack: core-libs-b
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.86"

- name: Cache cargo
uses: Swatinem/rust-cache@v2
with:
workspaces: ". -> target"
shared-key: internal-libs-${{ matrix.pack }}

- name: Dense pack lib tests
env:
CI_DENSE_PACK: ${{ matrix.pack }}
CI_DENSE_MODE: matrix
run: ./scripts/ci/dense-packs.sh pack "${CI_DENSE_PACK}"

# ── Gate: offline + all lib packs must pass ───────────────────────────
core-gate:
name: core gate
runs-on: ubuntu-latest
needs: [terp-scripts-offline, internal-libs]
steps:
- name: Core CI green
run: echo "CI Core passed (terp-scripts offline + dense internal lib packs)"
175 changes: 175 additions & 0 deletions .github/workflows/ci-extended.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# Tier 1 — path / label gated. Contracts + more crates when those paths change.
# Dense packing: 3 balanced contract packs + independent scripts-integration;
# optional zk heavy packs no longer wait on contracts-core (independent).
name: CI Extended

on:
pull_request:
paths:
- "contracts/**"
- "crates/**"
- "tests/**"
- "tools/**"
- "Cargo.toml"
- "Cargo.lock"
- "justfile"
- "scripts/ci/**"
- ".github/workflows/ci-extended.yml"
types: [opened, synchronize, reopened, labeled, ready_for_review]
push:
branches: [main, master]
paths:
- "contracts/**"
- "crates/**"
- "tests/**"
- "Cargo.toml"
- "Cargo.lock"
- "scripts/ci/**"
workflow_dispatch:
inputs:
full_contracts:
description: "Also run heavier authenticator/zk contract tests"
type: boolean
default: false

concurrency:
group: ci-extended-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
CARGO_TERM_COLOR: always
# Repo root on GHA is terp-rs; local act sets GITHUB_WORKSPACE via scripts/act.

jobs:
# Skip draft PRs unless labeled ci-extended (saves minutes).
should-run:
name: decide
runs-on: ubuntu-latest
outputs:
run: ${{ steps.d.outputs.run }}
heavy_contracts: ${{ steps.d.outputs.heavy_contracts }}
steps:
- id: d
env:
EVENT: ${{ github.event_name }}
DRAFT: ${{ github.event.pull_request.draft }}
LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
FULL: ${{ inputs.full_contracts }}
run: |
set -euo pipefail
run=true
heavy=false
if [[ "$EVENT" == "pull_request" && "$DRAFT" == "true" ]]; then
if [[ ",$LABELS," != *",ci-extended,"* && ",$LABELS," != *",ci-heavy,"* ]]; then
run=false
fi
fi
if [[ ",$LABELS," == *",ci-extended,"* || ",$LABELS," == *",ci-heavy,"* ]]; then
heavy=true
fi
if [[ "$FULL" == "true" ]]; then
heavy=true
fi
if [[ "$EVENT" == "workflow_dispatch" ]]; then
run=true
fi
echo "run=$run" >> "$GITHUB_OUTPUT"
echo "heavy_contracts=$heavy" >> "$GITHUB_OUTPUT"
echo "decide: run=$run heavy_contracts=$heavy"

# Dense 3-pack matrix — multi-package cargo per cell (not 8 sparse jobs)
contracts-core:
name: contracts (${{ matrix.pack }})
needs: should-run
if: needs.should-run.outputs.run == 'true'
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include:
- pack: contracts-a
- pack: contracts-b
- pack: contracts-c
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.86"
targets: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@v2
with:
workspaces: ". -> target"
shared-key: contracts-${{ matrix.pack }}
- name: Dense pack lib tests
env:
CI_DENSE_PACK: ${{ matrix.pack }}
CI_DENSE_MODE: matrix
run: ./scripts/ci/dense-packs.sh pack "${CI_DENSE_PACK}"
- name: Wasm check (pack-local subset)
# Only packages that both need wasm and live in this pack (avoids re-checking all packs).
run: |
set -euo pipefail
case "${{ matrix.pack }}" in
contracts-a)
for p in terp-ed25519 terp-passkey terp-vsck; do
echo "::group::wasm check $p"
cargo check -p "$p" --target wasm32-unknown-unknown --lib || cargo check -p "$p" --lib
echo "::endgroup::"
done
;;
contracts-c)
for p in cw-ics08-wasm-crosslink; do
echo "::group::wasm check $p"
cargo check -p "$p" --target wasm32-unknown-unknown --lib || cargo check -p "$p" --lib
echo "::endgroup::"
done
;;
*)
echo "no wasm subset for ${{ matrix.pack }}"
;;
esac

# Independent of contracts-core — zk packs are not data-dependent on core contracts
contracts-heavy:
name: contracts (zk / optional)
needs: [should-run]
if: needs.should-run.outputs.run == 'true' && needs.should-run.outputs.heavy_contracts == 'true'
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.86"
- uses: Swatinem/rust-cache@v2
with:
workspaces: ". -> target"
shared-key: contracts-heavy
- name: Optional zk-related packages (multi-package dense)
run: ./scripts/ci/dense-packs.sh contracts-heavy

scripts-integration:
name: terp-scripts non-ignored integration
needs: should-run
if: needs.should-run.outputs.run == 'true'
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.86"
- uses: Swatinem/rust-cache@v2
with:
workspaces: ". -> target"
shared-key: scripts-integration
- uses: extractions/setup-just@v2
- name: All non-ignored tests in terp-scripts
run: |
set -euo pipefail
# Does not run #[ignore] (Docker harness stays in CI Heavy).
cargo test -p terp-scripts --lib --tests
Loading
Loading