Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
95c4d6e
feat(compatibility-harness): add Zama compatibility validation harnes…
zama-cremaud Apr 2, 2026
a85b354
fix(compatibility-harness): validate PRIVATE_KEY format before use
zama-cremaud Apr 2, 2026
803e327
chore(compatibility-harness): bump SDK to 2.3.0-alpha.4 and fix Vite …
zama-cremaud Apr 7, 2026
c073a85
feat(compatibility-harness): MPC signer support + Crossmint adapter
zama-cremaud Apr 7, 2026
42c604d
feat(compatibility-harness): improve third-party DX and MPC adapter r…
zama-cremaud Apr 7, 2026
9b80305
feat(compatibility-harness): pluggable adapter via SIGNER_MODULE env var
zama-cremaud Apr 7, 2026
471c9e3
fix(compatibility-harness): fix SIGNER_MODULE alias regex replacing f…
zama-cremaud Apr 7, 2026
f1cf11c
fix(compatibility-harness): BigInt serialization + ready rejection ha…
zama-cremaud Apr 7, 2026
f192f45
docs(compatibility-harness): add SUMMARY.md — technical overview and …
zama-cremaud Apr 7, 2026
2449ccc
docs(compatibility-harness): remove Crossmint-specific mentions from …
zama-cremaud Apr 7, 2026
98f18c1
refactor(core): introduce adapter runtime and legacy signer bridge
zama-cremaud Apr 8, 2026
d4c2dac
refactor(tests): move to capability-based compatibility checks
zama-cremaud Apr 8, 2026
1a521e7
refactor(report): improve verdict synthesis and blocker reporting
zama-cremaud Apr 8, 2026
66a7625
docs: align README and summary with adapter-first harness model
zama-cremaud Apr 8, 2026
d5e5d19
refactor(examples): migrate crossmint sample to adapter interface
zama-cremaud Apr 8, 2026
a17b874
feat(examples): add turnkey compatibility adapter and docs
zama-cremaud Apr 8, 2026
4c47f75
refactor(report): isolate run artifacts and harden verdict output
zama-cremaud Apr 8, 2026
ecf7620
refactor(tests): classify infra blockers consistently across flows
zama-cremaud Apr 8, 2026
4476dab
refactor(core): improve adapter inference and read fallback coverage
zama-cremaud Apr 8, 2026
04bef56
docs: document infra synthesis and optional JSON report export
zama-cremaud Apr 8, 2026
1a8c2cb
docs(examples): align env/report vars and read-fallback expectations
zama-cremaud Apr 8, 2026
84222c6
feat(report): add versioned JSON artifact schema contract
zama-cremaud Apr 8, 2026
df6b01f
test(core): add unit coverage for diagnostics and profile inference
zama-cremaud Apr 8, 2026
14ea262
feat(examples): add openfort baseline adapter and compatibility docs
zama-cremaud Apr 8, 2026
054f7f9
refactor(review): tighten capability semantics and conservative class…
zama-cremaud Apr 8, 2026
30fe8b9
feat(verdict): introduce claim matrix resolver with rationale
zama-cremaud Apr 8, 2026
6af81d7
refactor(profile): separate declared vs observed capabilities with co…
zama-cremaud Apr 8, 2026
8752f4e
feat(diagnostics): add infrastructure error-code taxonomy
zama-cremaud Apr 8, 2026
640daac
feat(cli): add doctor preflight command and docs
zama-cremaud Apr 8, 2026
d7a55e9
feat(cli): add claim-based validate gate for CI
zama-cremaud Apr 8, 2026
d1126bb
docs(plan): add codex-oriented ticket backlog and acceptance criteria
zama-cremaud Apr 8, 2026
f1a92f6
feat(turnkey): add turnkey doctor/validate commands and guide
zama-cremaud Apr 8, 2026
abc4943
feat(runtime): add deterministic HARNESS_MOCK_MODE for offline valida…
zama-cremaud Apr 8, 2026
5723731
feat(report): enforce artifact schema contract and add golden fixtures
zama-cremaud Apr 8, 2026
cd098ae
feat(openfort): add openfort doctor/validate commands and usage guide
zama-cremaud Apr 8, 2026
7840e0f
feat(validate): add policy-file based CI gating controls
zama-cremaud Apr 8, 2026
c35c229
docs(report): add CI artifact consumption guide
zama-cremaud Apr 8, 2026
4b7e107
feat(ux): add init:adapter scaffold command for integrators
zama-cremaud Apr 8, 2026
f0bf96e
feat(ethereum): add optional ERC-1271 verification diagnostics
zama-cremaud Apr 8, 2026
45b1a5b
feat(network): add profile-based config scaffolding for sepolia/mainnet
zama-cremaud Apr 8, 2026
2e386ef
docs(network): align scope wording with profile-based configuration
zama-cremaud Apr 8, 2026
cbcf07e
ci: add deterministic GitHub Actions workflow for harness verification
zama-cremaud Apr 8, 2026
47b9c47
docs(plan): add harness-only strong-validation execution roadmap
zama-cremaud Apr 8, 2026
d30b7a8
feat(report): enforce canonical check registry and check IDs
zama-cremaud Apr 8, 2026
625ee1e
test(harness): add deterministic negative-path matrix coverage
zama-cremaud Apr 8, 2026
ba3541c
feat(verdict): enforce claim and check consistency guards
zama-cremaud Apr 8, 2026
ed9eb5e
feat(report): add structured claim evidence details payload
zama-cremaud Apr 8, 2026
73a34b0
feat(diagnostics): centralize blocked/inconclusive recommendations
zama-cremaud Apr 8, 2026
1c2372b
test(report): add artifact compatibility contract fixtures
zama-cremaud Apr 8, 2026
cb2a08d
test(examples): add baseline lockfiles and claim envelope guards
zama-cremaud Apr 8, 2026
2877896
feat(cli): add adapter quality gate command
zama-cremaud Apr 8, 2026
eb15107
ci: add optional live compatibility workflow with artifacts
zama-cremaud Apr 8, 2026
97157e3
docs(verdict): add claim playbooks and schema release discipline
zama-cremaud Apr 8, 2026
888af4b
docs(plan): mark T19-T30 tickets as completed
zama-cremaud Apr 8, 2026
6cec36f
docs: add internal technical summary v2 for peer review
zama-cremaud Apr 8, 2026
473eb47
style(docs): format compatibility harness markdown files
zama-cremaud Apr 8, 2026
719d63d
wip
zama-cremaud Apr 9, 2026
9002c1f
docs(summary): simplify and clarify SUMMARY_V2 for technical review
zama-cremaud Apr 9, 2026
20b4ec4
feat(capabilities): add structural/runtime/final evidence model
zama-cremaud Apr 9, 2026
3e68c0a
feat(capabilities): infer runtime observations from check outcomes
zama-cremaud Apr 9, 2026
c7365cf
feat(adapter-check): treat optional metadata as warnings
zama-cremaud Apr 9, 2026
b5eb046
feat(zama): add explicit write validation depth reporting
zama-cremaud Apr 9, 2026
39e7342
feat(verdict): add deterministic confidence levels
zama-cremaud Apr 9, 2026
b9b875f
feat(report): bump artifact schema to 1.3 with backward parse support
zama-cremaud Apr 9, 2026
bc48ea9
feat(cli): add init adapter template presets
zama-cremaud Apr 9, 2026
858cd2d
docs(harness): align schema 1.3 and adapter init guidance
zama-cremaud Apr 9, 2026
2fb3405
feat(cli): add crossmint doctor and validate shortcuts
zama-cremaud Apr 9, 2026
27ba4ac
feat(dx): add provider-specific adapter scaffold presets
zama-cremaud Apr 9, 2026
e776238
docs(summary): refresh SUMMARY_V2 with current harness capabilities
zama-cremaud Apr 9, 2026
630d18c
docs(summary): remove TLDR section from SUMMARY_V2
zama-cremaud Apr 9, 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
122 changes: 122 additions & 0 deletions examples/compatibility-harness/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# ══════════════════════════════════════════════════════════════════════════════
# Zama Compatibility Harness — Environment Configuration
# ══════════════════════════════════════════════════════════════════════════════
#
# Copy this file to .env and fill in the values for your adapter.
#
# Only ONE section is needed depending on the adapter you run:
# • Built-in EOA adapter (default src/adapter/index.ts) → set PRIVATE_KEY
# • Crossmint adapter (SIGNER_MODULE=./examples/crossmint/signer.ts)
# → set CROSSMINT_* vars
# • Turnkey adapter (SIGNER_MODULE=./examples/turnkey/signer.ts)
# → set TURNKEY_* vars
# • Openfort baseline adapter (SIGNER_MODULE=./examples/openfort/signer.ts)
# → set OPENFORT_* vars
# • Custom adapter module → set whatever it needs
#

# ── Built-in EOA Adapter ──────────────────────────────────────────────────────
#
# Only needed when using the built-in adapter (default test path).
# Not required when using a custom module through SIGNER_MODULE.
#
# The account must hold Sepolia ETH for the Transaction Execution test.
# Faucets: https://sepoliafaucet.com | https://faucet.alchemy.com/faucets/ethereum-sepolia
#
PRIVATE_KEY=0x

# ── Crossmint MPC Adapter ─────────────────────────────────────────────────────
#
# Only needed when running:
# SIGNER_MODULE=./examples/crossmint/signer.ts npm test
# See examples/crossmint/COMPATIBILITY.md for setup details.
#
# CROSSMINT_API_KEY=your_server_side_api_key
#
# Wallet locator — one of:
# email:alice@example.com:evm-smart-wallet
# userId:abc123:evm-smart-wallet
# phoneNumber:+1234567890:evm-smart-wallet
# CROSSMINT_WALLET_LOCATOR=email:alice@example.com:evm-smart-wallet
#
# Optional: supply the wallet 0x address directly to skip the API lookup at startup.
# If omitted, the address is resolved via GET /wallets/{locator} before tests run.
# CROSSMINT_WALLET_ADDRESS=0x

# ── Turnkey API Key Adapter ───────────────────────────────────────────────────
#
# Only needed when running:
# SIGNER_MODULE=./examples/turnkey/signer.ts npm test
# See examples/turnkey/COMPATIBILITY.md for setup details.
#
# Required:
# TURNKEY_ORG_ID=...
# TURNKEY_PRIVATE_KEY_ID=...
# TURNKEY_API_PUBLIC_KEY=...
# TURNKEY_API_PRIVATE_KEY=...
#
# Optional:
# TURNKEY_WALLET_ADDRESS=0x...
# TURNKEY_BASE_URL=https://api.turnkey.com
# TURNKEY_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY

# ── Openfort EOA Baseline Adapter ─────────────────────────────────────────────
#
# Only needed when running:
# SIGNER_MODULE=./examples/openfort/signer.ts npm test
# See examples/openfort/COMPATIBILITY.md for scope and caveats.
#
# OPENFORT_TEST_PRIVATE_KEY=0x...
#
# Optional: adapter-specific RPC override (defaults to RPC_URL)
# OPENFORT_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY

# ── Network ───────────────────────────────────────────────────────────────────
#
# Profile selector:
# - sepolia (default)
# - mainnet (requires explicit RELAYER_URL)
#
# NETWORK_PROFILE=sepolia
#
# Sepolia JSON-RPC endpoint. Defaults to a public endpoint.
# Override with Infura / Alchemy for better reliability.
#
# RPC_URL=https://ethereum-sepolia-rpc.publicnode.com

# ── Relayer ───────────────────────────────────────────────────────────────────
#
# Zama relayer base URL. Defaults to the public Sepolia testnet relayer.
# Override for a private or mainnet relayer.
#
# RELAYER_URL=https://relayer.testnet.zama.org/v2
#
# API key forwarded as x-api-key. Not required for the public Sepolia relayer.
# Required for mainnet or private relayers.
#
# RELAYER_API_KEY=

# ── Reporting ─────────────────────────────────────────────────────────────────
#
# Optional machine-readable report artifact path.
# Example:
# REPORT_JSON_PATH=./reports/latest.json
#
# REPORT_JSON_PATH=

# ── Harness Runtime ──────────────────────────────────────────────────────────
#
# Deterministic local mode:
# - disables network/relayer/registry-dependent validations in the test suite
# - marks those checks as UNTESTED with explicit rationale
#
# HARNESS_MOCK_MODE=1

# ── Validation Gate Policy (optional) ────────────────────────────────────────
#
# Use with `npm run validate`:
# - policy file path (JSON), see ./validation-policy.example.json
# - optional env override to accept PARTIAL outcomes as pass
#
# VALIDATION_POLICY_PATH=./validation-policy.example.json
# VALIDATION_ALLOW_PARTIAL=false
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Compatibility Harness CI

on:
push:
pull_request:

jobs:
verify:
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm

- name: Install dependencies
run: npm ci

- name: Typecheck
run: npm run typecheck

- name: Test (deterministic mock mode)
env:
HARNESS_MOCK_MODE: "1"
run: npm test

- name: Validate gate (deterministic mock mode)
env:
HARNESS_MOCK_MODE: "1"
run: |
set +e
npm run validate
status=$?
echo "validate exit code: $status"
# In deterministic mock mode, authorization is untested by design.
# Accept PASS(0), PARTIAL(10), INCONCLUSIVE(30) as non-regression outcomes.
if [ "$status" -eq 0 ] || [ "$status" -eq 10 ] || [ "$status" -eq 30 ]; then
exit 0
fi
exit "$status"
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Compatibility Harness Live (Optional)

on:
workflow_dispatch:
inputs:
signer_module:
description: "Adapter module path (optional)"
required: false
type: string
validation_target:
description: "Validation target"
required: false
default: AUTHORIZATION_AND_WRITE
type: choice
options:
- AUTHORIZATION
- AUTHORIZATION_AND_WRITE
schedule:
- cron: "0 3 * * *"

jobs:
live-validate:
name: Live Validate (Non-Blocking)
runs-on: ubuntu-latest
timeout-minutes: 30
continue-on-error: true
env:
PRIVATE_KEY: ${{ secrets.HARNESS_PRIVATE_KEY }}
RPC_URL: ${{ secrets.HARNESS_RPC_URL }}
RELAYER_URL: ${{ secrets.HARNESS_RELAYER_URL }}
RELAYER_API_KEY: ${{ secrets.HARNESS_RELAYER_API_KEY }}
NETWORK_PROFILE: ${{ secrets.HARNESS_NETWORK_PROFILE }}
REPORT_JSON_PATH: reports/live/latest-report.json
VALIDATION_TARGET: ${{ github.event.inputs.validation_target || 'AUTHORIZATION_AND_WRITE' }}
SIGNER_MODULE: ${{ github.event.inputs.signer_module }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm

- name: Install dependencies
run: npm ci

- name: Typecheck
run: npm run typecheck

- name: Run live validation (capture exit code)
id: live_validate
run: |
mkdir -p reports/live
set +e
npm run validate 2>&1 | tee reports/live/validate.log
status=${PIPESTATUS[0]}
echo "$status" > reports/live/validate.exitcode
echo "exit_code=$status" >> "$GITHUB_OUTPUT"
exit 0

- name: Upload live artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: compatibility-harness-live-${{ github.run_id }}
path: reports/live
if-no-files-found: warn

- name: Publish run summary
if: always()
run: |
echo "## Compatibility Harness Live Run" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "- Non-blocking: yes (continue-on-error job)" >> "$GITHUB_STEP_SUMMARY"
echo "- validate exit code: ${{ steps.live_validate.outputs.exit_code }}" >> "$GITHUB_STEP_SUMMARY"
echo "- Artifact: compatibility-harness-live-${{ github.run_id }}" >> "$GITHUB_STEP_SUMMARY"
4 changes: 4 additions & 0 deletions examples/compatibility-harness/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
dist/
.env
reports/
Loading
Loading