Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
4891c0f
WIP: migration to ao mainnet / hyperbeam
jim-toth Mar 17, 2026
59f1916
WIP: debugging & include @permaweb/aoconnect overrides
jim-toth May 26, 2026
29d273a
WIP: Can spawn with evm using v0.9 hyperbeam node
jim-toth Jun 23, 2026
7cace1a
WIP: e2e tests
jim-toth Jul 9, 2026
b82bcab
merged from main
jim-toth Jul 15, 2026
a02d69f
Native operator-registry vertical slice (HyperBEAM migration pilot)
jim-toth Jul 23, 2026
499659d
Native relay-rewards vertical slice (HyperBEAM migration)
jim-toth Jul 25, 2026
7ba7be1
Tier-1 busted spec for native relay-rewards
jim-toth Jul 25, 2026
a48526e
Full WASM-harness parity for native relay-rewards (W-C)
jim-toth Jul 25, 2026
0b07f82
Native staking-rewards port + message-time support
jim-toth Jul 25, 2026
f4ae87d
Document the message-time clock's provenance and ordering limits
jim-toth Jul 25, 2026
adecc23
Legacy cross-check for native staking-rewards (W-B)
jim-toth Jul 25, 2026
3a16da6
Tier-3 real-seed validation for native staking-rewards (W-B)
jim-toth Jul 25, 2026
1740728
D11: native, fail-closed deploy replacing the genesis-wasm spawn script
jim-toth Jul 25, 2026
cd8ef5c
D12 + D13: verify a respawned process against the dump
jim-toth Jul 26, 2026
a19539a
Relay cross-check: assert branch coverage, not just agreement
jim-toth Jul 26, 2026
543f6e0
D3: verify access policy live on dev/stage/live
jim-toth Jul 26, 2026
c6fd756
D3: add opt-in DoS-posture checks (rate limit + body cap)
jim-toth Jul 26, 2026
fc11de7
D3: verify the p4 carve-out admits arbitrary wallets per-path
jim-toth Jul 26, 2026
a1a2974
D10: cover fractional round timestamps in both reward specs
jim-toth Jul 26, 2026
7555d03
D10: add a Tier-2 runner and the first test CI workflow
jim-toth Jul 26, 2026
3458955
D10: harden ao-test against fork PRs
jim-toth Jul 26, 2026
5b3be93
D10: drop the legacy mocha job from CI
jim-toth Jul 26, 2026
1eb7f02
D10: add the E2E orchestrator and close the relay oracle gap
jim-toth Jul 27, 2026
32338c9
D21: client-side module publishing with settlement + spawn verification
jim-toth Jul 27, 2026
52418d6
D21: manifests + recheck, and a size ladder for the bundler free-tier…
jim-toth Jul 27, 2026
cfa7f30
D21: check real finality, not just "a gateway has heard of it"
jim-toth Jul 27, 2026
ef06cb5
D11: stop deploy.ts producing processes a rebuilt node can never compute
jim-toth Jul 27, 2026
899c960
CI: run each commit once, not once per event
jim-toth Jul 27, 2026
74b869c
CI: make push main-only instead of deduping two triggers
jim-toth Jul 27, 2026
d6f88ff
CI: build the luerl image in the e2e job too
jim-toth Jul 27, 2026
c1bd698
ao: honour CONTAINER_ENGINE in every luerl caller
jim-toth Jul 27, 2026
146d03d
Carry the migration seed in the spawn message, not the module
jim-toth Jul 27, 2026
8856b3e
Pin @anyone-protocol/ao-client v0.1.2
jim-toth Jul 27, 2026
001db49
ao: centralize the deployer signing key in requireDeployerKey()
jim-toth Aug 5, 2026
649ecbf
ao: sustained e2e verticals, and the probes behind the cost work
jim-toth Aug 5, 2026
d5d6c39
ao: write gate — on-chain allowlist + p4 pricing device
jim-toth Aug 5, 2026
930c34a
Move legacy code under legacy/, add the mainnet contracts image
jim-toth Aug 5, 2026
6ec0901
ci: allow manual builds of the mainnet image
jim-toth Aug 5, 2026
2e47406
Add write gate publish job
jim-toth Aug 5, 2026
98ccaea
ao: deploy writes the PID to Consul
jim-toth Aug 5, 2026
07c207a
Point the stage deploy jobs at the mainnet runtime
jim-toth Aug 5, 2026
17a0ee9
One publish job for all modules
jim-toth Aug 5, 2026
58d8b2d
Hold contract state in Lua globals, not on the process message
jim-toth Aug 9, 2026
6b73557
Declare per-contract state roots; drop the local dump view
jim-toth Aug 9, 2026
0522bbf
Seed specs through the runtime; pin state placement and lazy init
jim-toth Aug 9, 2026
2812347
Read views via as/; verify first compute on spawn
jim-toth Aug 9, 2026
585cb83
Bump ao-client to v0.1.3
jim-toth Aug 9, 2026
575df19
Golden the staking view outputs against the legacynet dump
jim-toth Aug 9, 2026
b76e140
Flatten staking state to pair keys; Details as parallel typed maps
jim-toth Aug 9, 2026
f3756ef
Teach the staking harnesses the flat storage shape
jim-toth Aug 9, 2026
7dfdc19
Assert staking Details through the view that reassembles it
jim-toth Aug 9, 2026
54a7c26
Post-deployment verification report per contract
jim-toth Aug 9, 2026
f8fa83b
Add registrationCredits to the operator view
jim-toth Aug 10, 2026
b98e48d
Assert registrationCredits in the operator footprint
jim-toth Aug 10, 2026
fcfbb09
Pin publish job to the built mainnet image
jim-toth Aug 10, 2026
3977f1b
Read sustained tracked balances through views, not base paths
jim-toth Aug 10, 2026
3362473
Carve out every read verb the gate must not charge
jim-toth Aug 10, 2026
9c83bda
Functional walkthrough against a live node
jim-toth Aug 10, 2026
6a593ca
Send generated reports to a configurable directory
jim-toth Aug 10, 2026
e6b4cee
Pin the stage deploy jobs to the built image
jim-toth Aug 10, 2026
1789cdc
Add dev and live publish jobs alongside stage
jim-toth Aug 10, 2026
4294ad2
Pin the published module ids in the stage deploy jobs
jim-toth Aug 10, 2026
d6e137a
Verify the baked module bundle instead of overwriting it
jim-toth Aug 10, 2026
ec1c323
Re-pin the stage deploy jobs to the rebuilt image
jim-toth Aug 11, 2026
1ef24b4
Address the node directly from the deploy jobs
jim-toth Aug 11, 2026
081d81e
Count staking hodlers, and rebuild the seed oracle for the checked net
jim-toth Aug 11, 2026
01f2da7
Re-pin the stage deploy jobs to the hodler-count fix
jim-toth Aug 11, 2026
13d6bf8
Persist last-round details as per-fingerprint JSON and record the set…
jim-toth Aug 12, 2026
2fbd847
Add last_snapshot, which points at or redirects to the settle slot
jim-toth Aug 12, 2026
8bee3a1
Pin the stage publish job to the settle-slot build, without write-gate
jim-toth Aug 12, 2026
669098c
Pin the stage deploy jobs to the settle-slot build
jim-toth Aug 12, 2026
9fa81bd
Pin the stage deploys to the newly published module ids
jim-toth Aug 12, 2026
63db61f
Give the redirect a body, and stop typing empty ones
jim-toth Aug 12, 2026
8739c4b
Defer the runtime content-type guard to the next batched change
jim-toth Aug 12, 2026
d1cbc8f
Publish relay-rewards only, on the redirect-body fix
jim-toth Aug 12, 2026
451fc62
Point the publish job at the image that was actually built
jim-toth Aug 12, 2026
a551932
Pin the relay-rewards stage deploy to the republished module
jim-toth Aug 13, 2026
7c3c086
Serve the settle-slot round as application/json
jim-toth Aug 13, 2026
cedcd8d
Add the per-address round read, and stop recomputing address checksums
jim-toth Aug 13, 2026
0e1566b
Publish all three modules: the runtime change reaches every contract
jim-toth Aug 13, 2026
83fd329
Assert the leaf is not typed json, not that it is text/plain
jim-toth Aug 13, 2026
bac25b6
Pin the stage deploys to the batch modules
jim-toth Aug 13, 2026
d570974
Add a local fixture and write-path probes for dashboard testing
jim-toth Aug 14, 2026
4eaeda7
Carry per-operator relay counts in the staking round
jim-toth Aug 16, 2026
8a3c2b4
Pin the stage staking deploy to the republished module
jim-toth Aug 16, 2026
79bfa88
Add a staking round mirror for local dashboard testing
jim-toth Aug 16, 2026
8e02154
Revert "Pin the stage staking deploy to the republished module"
jim-toth Aug 16, 2026
92761e2
Pin the stage publish job to the relay-counts image
jim-toth Aug 16, 2026
78f9a91
Pin the stage staking deploy to the published module
jim-toth Aug 16, 2026
87e5594
Port the live deploy jobspecs to hyperbeam; assert the gated posture …
jim-toth Aug 18, 2026
a53effa
Document the read surface for consumers
jim-toth Aug 18, 2026
6ab70ff
Assert the root redirect and the seven non-chargable routes
jim-toth Aug 19, 2026
0225e9a
Verify published module bytes, bundle depth, and that MODULE_ID match…
jim-toth Aug 20, 2026
48d4cb5
Assert the gated posture on live
jim-toth Aug 20, 2026
295cb5c
Repin the live deploy jobspecs to the hardened deploy image
jim-toth Aug 20, 2026
594ae9a
Re-baseline the staking view golden, and hold the address sample fixed
jim-toth Aug 20, 2026
05b6213
Cover the bundler route in the access policy verifier
jim-toth Aug 21, 2026
c35dbc6
D22: snapshot, publish, verify and recover state from Arweave
jim-toth Aug 26, 2026
a7bb623
Add qualify-node: one reproducible procedure to bless a HyperBEAM image
jim-toth Aug 26, 2026
0ce6796
Carve the node self-entry out of the allow-list format check
jim-toth Aug 26, 2026
a9ba6d1
qualify-node: handle a build that stops exposing its device list
jim-toth Aug 27, 2026
b603528
Add the D24 acceptance probe: does a self-hosted bundle's data land?
jim-toth Aug 27, 2026
c493363
Add bundler-wallets carve-out to the write gate for self-hosted bundling
jim-toth Aug 27, 2026
04beb17
Re-record the qualification baseline against edge @ 14e9f68a
jim-toth Aug 27, 2026
4391fa6
Revert the write-gate bundler carve-out; admit the node via deploy-wa…
jim-toth Aug 27, 2026
785015b
Add gated-bundler-repro probe; reproduces the dev_lua link-encode fai…
jim-toth Aug 28, 2026
9d975b4
Add passive mode to bundler-landing for locked edges; judge the bundl…
jim-toth Aug 28, 2026
fe84435
Judge bundler POSTs on their signed subject; the upload envelope is u…
jim-toth Aug 28, 2026
82803c2
Confine the write-gate subject rule to the bundler route; it was a sl…
jim-toth Aug 28, 2026
569fabc
Gate the bundler route at the edge, not p4; revert the write-gate sub…
jim-toth Aug 28, 2026
bbbcdbb
Publish snapshots through the node's own bundler instead of direct L1
jim-toth Aug 28, 2026
c717311
Pin snapshot jobs to the image that carries the bundler publishing path
jim-toth Aug 29, 2026
5c6fdca
Gate HyperBEAM upgrades on an existing process surviving a trie write…
jim-toth Sep 1, 2026
7253c9e
Add respawn seeding from current node state, verified byte-identical …
jim-toth Sep 2, 2026
2814394
Publish the contract PID before verification and revert it on failure…
jim-toth Sep 2, 2026
0cfe8bd
Pin both operator-registry deploy jobs to the publish-then-verify image
jim-toth Sep 2, 2026
248aa91
Defer the spawn's forced first compute until the deployed PID is rout…
jim-toth Sep 2, 2026
32b9f23
Push the mainnet image straight from buildx instead of exporting it l…
jim-toth Sep 3, 2026
845b93b
Re-pin both operator-registry deploy jobs to the 32b9f23 image
jim-toth Sep 3, 2026
3449fec
Deliver the snapshot publisher key as a file from a base64 Vault secret
jim-toth Sep 3, 2026
b34b695
move publish-snapshot-stage to stage-protocol namespace
jim-toth Sep 4, 2026
74ff792
Use crons instead of cron in snapshot publisher job specs (deprecated…
jim-toth Sep 4, 2026
be96651
add consul block to snapshot jobs so the node service lookup renders
jim-toth Sep 4, 2026
06af16d
set BUNDLER explicitly and use http for in-cluster IP hosts
jim-toth Sep 4, 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
83 changes: 68 additions & 15 deletions .github/workflows/ao-build-and-publish-image.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,40 @@
name: Build & Publish AO Contracts Image
# Builds the AO MAINNET contracts image (Dockerfile-Mainnet) — the native contracts, their
# HyperBEAM runtime, and the publish/deploy tooling.
#
# This workflow used to build legacy/Dockerfile-AO (the aos/genesis-wasm contracts). It now
# builds the mainnet image INSTEAD, not alongside: the legacy contracts are what this migration
# replaced, so continuing to publish them would mean two images that look interchangeable and
# are not. legacy/Dockerfile-AO is kept for reference and simply no longer built by CI; the
# images it already published stay where they are, under the old name, frozen.
#
# The image name changed with it, so nothing published before this point can be confused with
# something built after.
#
# Tagged by commit SHA. That is what a Nomad publish/deploy job should pin, so the module ids it
# produces trace back to an exact commit — module ids are content-addressed, which only means
# something if the bytes that produced them do too.
name: Build & Publish AO Mainnet Contracts Image

on:
push:
branches: main
# Scoped to what the image is actually built from, so unrelated commits — including one
# that only touches this file — do not rebuild it.
paths:
- 'ao/**'
- 'Dockerfile-Mainnet'
- 'Dockerfile-Mainnet.dockerignore'
tags:
- v*
# Manual trigger, so a feature branch can be built for acceptance testing without
# merging to main first. Pick the branch in the "Run workflow" dropdown; the image is
# tagged by commit SHA either way, so a branch build cannot be mistaken for a main one.
#
# GitHub only offers this for workflows present on the DEFAULT branch, so the button
# appears once this file reaches main — after that it can target any branch.
workflow_dispatch:
env:
IMAGE_NAME: smart-contracts-ao
IMAGE_NAME: smart-contracts-ao-mainnet

jobs:
push:
Expand All @@ -18,26 +46,51 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: Build image
run: docker build . --file Dockerfile-AO --tag $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}"

# Login comes BEFORE the build now, because the build pushes.
- name: Log in to registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin

- name: Push image
# ─── Why buildx --push instead of build-then-push ────────────────────────────────────────
# `docker build` exports every layer into the local image store, and `docker push` then
# compresses and uploads them again: two full passes over a ~724 MB image. The export pass
# alone measured 181-196s on every run in Aug-Sep 2026, and on 2026-09-02 the runner
# SIGTERMed the build inside that window three times in a row (exit 143, no other output).
# That was not the commit, the base image, the region or the runner version — all four were
# identical to builds that passed, and the same commit builds clean locally.
#
# buildx streams layers straight to ghcr as they are produced, so the phase that was dying
# no longer exists. The Dockerfile and therefore the image contents are unchanged.
# BuildKit still honours Dockerfile-Mainnet.dockerignore, which is the second half of the
# image's file allowlist, so that control is preserved.
#
# ⚠️ The three output flags are LOAD-BEARING, because the deploy jobspecs pin
# <tag>@sha256:... and are verified against the registry's docker-content-digest. The
# manifest this pushes therefore has to keep exactly the shape `docker push` produced
# before this change:
# --provenance=false --sbom=false attestations are on by default for the
# docker-container driver, and they turn the tag into a manifest INDEX. The digest a
# jobspec pinned would then be an index digest, not the image digest a plain pull
# reports.
# oci-mediatypes=false buildx defaults to OCI media types; every image
# published so far is application/vnd.docker.distribution.manifest.v2+json.
# Verified against a throwaway local registry on 2026-09-02: with all three, the pushed
# manifest is vnd.docker.distribution.manifest.v2+json with 45 layers and no .manifests,
# matching the last good ghcr image (281439428b96f2...) exactly.
- name: Build and push image
run: |
IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME

# Change all uppercase to lowercase
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
# Strip "v" prefix from tag name
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# Use Docker `latest` tag convention
[ "$VERSION" == "main" ] && VERSION=stage
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION

docker tag $IMAGE_NAME $IMAGE_ID:${GITHUB_SHA}
docker push $IMAGE_ID:${GITHUB_SHA}
# The runner's default builder uses the docker driver, which cannot --push.
docker buildx create --use --name ci --driver docker-container

docker buildx build . \
--file Dockerfile-Mainnet \
--label "runnumber=${GITHUB_RUN_ID}" \
--tag $IMAGE_ID:${GITHUB_SHA} \
--provenance=false \
--sbom=false \
--output type=registry,oci-mediatypes=false
171 changes: 171 additions & 0 deletions .github/workflows/ao-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
name: AO Contracts — Tests

# CI has historically been manual in this repo; the two existing workflows only build and
# publish images. This one runs the contract suites. The tiers are deliberately separate
# jobs so a failure names the layer it happened in — Tier-1 is contract/runtime logic,
# Tier-2 is the same code through the real device VM (luerl), and they fail for different
# reasons. See docs/hyperbeam-migration/D8-port-safety-checklist.md.

# `push` is main-only on purpose. Listing a working branch here as well means every commit on
# it fires BOTH `push` and `pull_request` once a PR is open, and runs the whole workflow twice.
# Branch coverage comes from the PR instead — which is where the result is actually needed.
on:
push:
branches: [main]
paths: ['ao/**', '.github/workflows/ao-test.yml']
pull_request:
paths: ['ao/**', '.github/workflows/ao-test.yml']
workflow_dispatch:

# Supersede an in-flight run when new commits land on the same PR or branch — pushing three
# times in a minute should not leave three full runs racing. This is NOT what stops the workflow
# running twice per commit; the main-only `push` trigger above does that.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

# Least privilege, stated explicitly rather than inherited. These jobs only read the
# checkout — unlike the image-publish workflows, which need `packages: write`. Setting it
# here means a change to the org or repo default cannot silently widen this workflow's
# token. A `pull_request` from a fork already gets a read-only token with no access to
# secrets (which is exactly why this uses `pull_request` and never `pull_request_target`);
# this makes that explicit for same-repo runs too.
permissions:
contents: read

defaults:
run:
working-directory: ao

# Fork pull requests execute the contributor's code: two container builds plus a
# `bun install` that runs whatever lifecycle scripts their package.json declares. With a
# read-only token and no secrets that is not a credential risk, but it is free compute on
# our runners — and it would become remote code execution the day any of this moves to a
# self-hosted runner. Outside contributions are not expected in this repo, so every job
# below carries the same guard: run unless this is a PR from a different repository.
# Branch pushes and workflow_dispatch are unaffected — the condition is only false for
# fork PRs. (The guard is repeated per job rather than hoisted into `env:` because the
# `env` context is not available to a job-level `if:`.)
#
# Belt and braces with Settings > Actions > "Require approval for all outside
# collaborators": that setting is invisible from the repo and easy to lose to an org
# policy change, whereas this guard shows up in the diff.

jobs:
tier1:
name: Tier-1 — busted on Lua 5.3
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4

# Lua 5.3 specifically, not LuaJIT: LuaJIT is 5.1 and would diverge from luerl's 5.3
# semantics (integers, //, math.type) — which is the whole point of this tier.
- name: Build the Tier-1 toolchain image
run: docker build -t anyone-lua-spec:5.3 spec/

- name: Run specs
run: |
docker run --rm -v "$PWD":/work -w /work anyone-lua-spec:5.3 spec/

tier2:
name: Tier-2 — luerl 1.3.0 (device VM)
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4

# luerl 1.3.0 is pinned on purpose — it is what HyperBEAM v0.9-FINAL vendors in its
# rebar.lock. Bumping it here would stop this tier from testing what the node runs.
- name: Build the luerl runner image
run: docker build -t anyone-luerl:1.3.0 spec/luerl/

- name: Run scenarios
env:
CONTAINER_ENGINE: docker
TIMEOUT: '600'
run: ./spec/run-tier2.sh

e2e:
name: E2E — full suite on a local HyperBEAM node
# Same fork guard as the tiers above, rather than the blanket `!= 'pull_request'` this used
# to carry. That exclusion is not survivable now `push` is main-only: PRs would be the only
# event a working branch fires, so e2e would never run until merge. The original concern was
# that `bun install` re-introduces a contributor-controlled lifecycle-script surface — but
# that is a FORK problem, and the fork guard addresses it precisely.
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4

- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.14

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

# The suite's oracle stage shells out to this image (build-relay-probe.ts and
# build-staking-oracle.ts run the frozen round under luerl to produce the parity
# expectations). Tier-2 builds it too, but jobs get separate runners with separate
# docker daemons, so it has to be built here as well — it is local-only and cannot
# be pulled. Without it the oracles fail and both parity verticals then ENOENT.
- name: Build the luerl runner image
run: docker build -t anyone-luerl:1.3.0 spec/luerl/

# v0.9-FINAL is what the cluster runs. The image is public (anonymous ghcr token works),
# so no registry secret is needed. --network host so the suite can reach 8734 directly;
# the ephemeral wallet is fine because nothing here is published to Arweave.
- name: Start a HyperBEAM node
run: |
docker run -d --name hb-e2e --network host \
-e HB_ALLOW_EPHEMERAL_WALLET=true \
-e HB_WALLET_PATH=/app/wallet.json \
ghcr.io/memetic-block/hyperbeam-docker:v0.9-FINAL

- name: Wait for the node
run: |
for i in $(seq 1 60); do
if curl -sf --max-time 5 http://localhost:8734/~meta@1.0/info/address >/dev/null; then
echo "node up after ${i}s: $(curl -s http://localhost:8734/~meta@1.0/info/address)"
exit 0
fi
sleep 1
done
echo "node never became ready"; docker logs hb-e2e | tail -40; exit 1

# --publish-container: module registration is a `bin/hb eval` INSIDE the node container
# (there is no HTTP path for it — see util/hb-client.ts moduleIdFor). Against dev/stage
# that step needs cluster access, which is why the stage run is re-homed to D14.
- name: Run the E2E suite
env:
HB_URL: http://localhost:8734
CONTAINER_ENGINE: docker
run: bun run scripts/run-e2e.ts --publish-container hb-e2e

- name: Upload failure logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-logs
path: ao/dist/e2e-logs/
if-no-files-found: ignore

- name: Node logs on failure
if: failure()
run: docker logs hb-e2e | tail -100

- name: Stop the node
if: always()
run: docker rm -f hb-e2e || true

# The legacy mocha suite (`bun run test`, test/spec/**) is deliberately NOT run here.
# It drives the obsolete aos-WASM harness against the legacynet contracts, which now carry
# luerl workarounds their specs were never updated for. It is retained in the repo purely
# as a COVERAGE REFERENCE — when adding behaviour to a native contract, read those specs to
# see what the legacy suite asserted — but it is not executed by CI and is not a gate.
# A coverage comparison against it was done in D10 (legacy 262 assertions vs native 285;
# the gaps it surfaced are closed), so it has already served that purpose once.
42 changes: 0 additions & 42 deletions .github/workflows/smartweave-build-and-publish-image.yml

This file was deleted.

5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
.keys
.claude
.vscode
.keys/
.claude/
38 changes: 38 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "tsx",
"type": "node",
"request": "launch",

// Debug current file in VSCode
"program": "${file}",

/*
* Path to tsx binary
* Assuming locally installed
*/
"runtimeExecutable": "tsx",

/*
* Open terminal when debugging starts (Optional)
* Useful to see console.logs
*/
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",

// Files to exclude from debugger (e.g. call stack)
"skipFiles": [
// Node.js internal core modules
"<node_internals>/**",

// Ignore all dependencies (optional)
"${workspaceFolder}/node_modules/**",
],
}
]
}
4 changes: 2 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"ao/node_modules",
"evm",
"operations",
"smartweave",
"ao-core",
"legacy/smartweave",
"legacy/ao-core",
"ao/scripts"
]
}
Loading