Skip to content

feat: use arkade-regtest for regtest environment#106

Open
Kukks wants to merge 54 commits intomasterfrom
feat/use-arkade-regtest
Open

feat: use arkade-regtest for regtest environment#106
Kukks wants to merge 54 commits intomasterfrom
feat/use-arkade-regtest

Conversation

@Kukks
Copy link
Copy Markdown
Collaborator

@Kukks Kukks commented Mar 26, 2026

Summary

  • Replace custom test.docker-compose.yml and cors.nginx.conf with arkade-regtest submodule
  • Pin arkd to v0.8.11 via .env.regtest
  • Simplify CI: remove nigiri GH Action, use regtest/start-env.sh
  • Trim test/e2e/setup.mjs to SDK-specific setup only (wait for readiness)

Test plan

  • ./regtest/start-env.sh starts full environment
  • pnpm test:unit passes
  • pnpm test:integration-docker passes
  • CI workflow completes successfully

Summary by CodeRabbit

  • Chores
    • CI split into lint, unit, build, and integration jobs with manual trigger and improved diagnostics.
    • Added a pinned regtest submodule and a new regtest environment file with updated container images and runtime overrides; new start/stop/clean entry points added and legacy Docker Compose lifecycle scripts removed.
  • Tests
    • E2E/integration setup simplified to readiness-only checks (no side-effect orchestration); minor test command adjustment.
  • Removed
    • Legacy CORS proxy and legacy multi-container compose test configuration deleted.

Replace bespoke test.docker-compose.yml + cors.nginx.conf with shared
arkade-regtest submodule. Pins arkd to v0.8.11 via .env.regtest.
Simplify CI by removing nigiri GH Action and docker build steps.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 26, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Externalized regtest into a git submodule, added .env.regtest overrides, removed local Docker Compose regtest and a CORS proxy, reworked CI into lint/unit/build/integration (integration uses submodule), replaced package.json Docker scripts with regtest shell delegates, and simplified e2e setup to only poll service readiness.

Changes

Cohort / File(s) Summary
Regtest config & submodule
​.env.regtest, .gitmodules, regtest
Added .env.regtest with ARKD_IMAGE, ARKD_WALLET_IMAGE, ARKD_VTXO_TREE_EXPIRY, ARKD_BOARDING_EXIT_DELAY; added/updated regtest git submodule and bumped its ref.
CI workflow
.github/workflows/ci.yml
Replaced single test job with lint, unit, build, integration; added workflow_dispatch; integration now checks out submodules, restores regtest cache, starts regtest via scripts, runs wallet setup and pnpm test:integration-docker, captures container logs on failure, and always cleans up.
Package scripts
package.json
Removed Docker Compose–based regtest lifecycle scripts; added regtest:start, regtest:stop, regtest:clean that call ./regtest/*-env.sh; updated regtest flow to run regtest:cleanregtest:starttest:setup-docker.
Removed Compose & proxy configs
test.docker-compose.yml, cors.nginx.conf
Deleted full test.docker-compose.yml multi-container regtest compose and removed cors.nginx.conf CORS proxy configuration.
E2E setup & tests
test/e2e/setup.mjs, test/e2e/arkade-swaps.test.ts
setup.mjs: removed orchestration/funding/wallet/channel logic; now polls waitForArkServer() and waitForBoltzPairs() only. arkade-swaps.test.ts: adjusted Docker exec to docker exec -t ark arkd note ....

Sequence Diagram(s)

sequenceDiagram
  participant GH as "GitHub Actions"
  participant Repo as "Repository (with regtest submodule)"
  participant Submod as "regtest submodule\n(./regtest/*-env.sh)"
  participant Docker as "Docker Engine"
  participant Tests as "Integration Tests"

  GH->>Repo: checkout (with submodules)
  GH->>GH: setup Node/Go, restore caches
  GH->>Submod: run start script
  Submod->>Docker: bring up regtest containers
  Docker->>Submod: report readiness
  GH->>Repo: run wallet setup script
  GH->>Tests: run pnpm test:integration-docker
  Tests->>Docker: exercise services
  alt test failure
    GH->>Docker: collect logs for named containers
  end
  GH->>Submod: run clean/stop script (always)
  Submod->>Docker: teardown containers
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • VHTLC recovery + e2e setup #46: Modifies regtest/integration tooling, package scripts, e2e setup, and Docker image references—strong overlap with these changes.

Suggested reviewers

  • pietro909
  • bordalix
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: use arkade-regtest for regtest environment' directly summarizes the main change: migrating from custom Docker Compose/Nginx configs to the arkade-regtest submodule.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/use-arkade-regtest

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

🔍 PR Review — feat: use arkade-regtest for regtest environment

Net change: +95 / −748 — excellent cleanup.

What this does

Replaces the entire custom Docker Compose test stack (281-line test.docker-compose.yml, CORS proxy, nginx conf, all manual LND/Boltz/Fulmine setup in setup.mjs) with the shared arkade-regtest submodule. CI is split into parallel lint/unit/build jobs with integration gated behind them.

Key observations

1. Orphaned cors.Dockerfile
cors.nginx.conf is deleted but cors.Dockerfile still exists in the repo. Since the CORS proxy container was part of the old compose stack and is no longer referenced, this file should be removed too.

2. Submodule pins to a feature branch
.gitmodules points to branch = feat/shared-regtest-env-discovery — this works while ArkLabsHQ/arkade-regtest#1 is in flight, but once that PR merges, the branch may be deleted. The submodule commit pin (e33f8e4) will still resolve, but the branch tracking becomes stale. Worth updating to main after arkade-regtest#1 merges.

3. CI: Good parallelization, one concern
The integration job correctly adds submodules: true and depends on lint/unit/build. The actions/cache@v4 for regtest/_build keyed on .env files is a nice touch. The failure-step log capture references the right container names (ark, boltz, boltz-lnd, boltz-fulmine) — make sure these match what start-env.sh creates (they should, based on the arkade-regtest compose).

4. Setup script simplification is clean
Reducing setup.mjs from ~350 lines to just two wait functions is a big win. The waitForBoltzPairs check against /v2/swap/submarine for "ARK" is a practical readiness probe. Port 9069 is the CORS proxy port from the old stack — verify this is the correct Boltz API port in the new regtest environment (likely 9001 directly, unless arkade-regtest runs its own proxy).

5. Package scripts
Clean mapping: regtest:start/stop/clean delegate to submodule scripts. --frozen-lockfile in CI is correct. Removed scripts (test:setup, test:build-docker, etc.) have no remaining references.

6. Go toolchain in CI
setup-go@v5 with Go 1.23 is added for the integration job — presumably needed by start-env.sh to build something. Worth a comment in the workflow if this isn't obvious.

Cross-repo dependency

This PR depends on ArkLabsHQ/arkade-regtest#1 and mirrors the pattern from arkade-os/ts-sdk#386. Coordination needed: merge arkade-regtest first, then update submodule refs in both SDKs.

Verdict

Solid migration. Address the orphaned Dockerfile and verify the Boltz API port, then good to merge (after arkade-regtest#1 lands).

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@package.json`:
- Around line 66-69: Update the package.json scripts regtest:start,
regtest:stop, regtest:clean and the composite regtest to perform a submodule
preflight before invoking ./regtest/*.sh; specifically, prepend each script
invocation with a guard that ensures the regtest submodule is populated (e.g.,
run a check and call git submodule update --init --recursive if needed) so the
shell scripts exist before running them, and keep the same script names
regtest:start, regtest:stop, regtest:clean, regtest.

In `@regtest`:
- Line 1: The README currently lacks instructions to initialize git submodules
required for regtest; update README.md to add a brief "Local setup" note
instructing contributors to run git submodule update --init --recursive after
cloning (or clone with --recurse-submodules), and/or add an automated step in
package.json by creating a postinstall script (e.g., "postinstall": "git
submodule update --init --recursive") so npm install will initialize submodules
before running npm run regtest:start; reference the regtest:start script name
and ensure the documentation and package.json change mention the need for
submodules to avoid missing script files.

In `@test/e2e/setup.mjs`:
- Around line 53-54: The Ark readiness probe can wrongly succeed on HTTP error
pages because waitForArkServer() shells out to curl -s which exits 0 on 404/500;
update waitForArkServer() so the curl invocation uses the fail flag (e.g.,
--fail or -f with -sS) or otherwise checks the HTTP status and returns non-zero
on non-2xx responses, so the setup() readiness gate (await waitForArkServer())
will fail on HTTP errors instead of treating an error page as healthy.
- Around line 30-35: The readiness probe is checking Boltz on port 9069 while
the SDK's BoltzSwapProvider defaults to port 9001, causing mismatch; fix by
updating the BoltzSwapProvider constructors in swap-manager.test.ts and
arkade-swaps.test.ts to include apiUrl: "http://localhost:9001" (e.g., new
BoltzSwapProvider({ network: "regtest", apiUrl: "http://localhost:9001" }));
alternatively, if you prefer changing the probe, update the URL used in
setup.mjs's execSync curl call to http://localhost:9001/v2/swap/submarine so the
readiness check matches the SDK default.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c73245a5-c77d-4c8b-b7b8-9eed8e5793db

📥 Commits

Reviewing files that changed from the base of the PR and between 794a81e and da4d629.

📒 Files selected for processing (8)
  • .env.regtest
  • .github/workflows/ci.yml
  • .gitmodules
  • cors.nginx.conf
  • package.json
  • regtest
  • test.docker-compose.yml
  • test/e2e/setup.mjs
💤 Files with no reviewable changes (2)
  • cors.nginx.conf
  • test.docker-compose.yml

Comment on lines +66 to +69
"regtest:start": "./regtest/start-env.sh",
"regtest:stop": "./regtest/stop-env.sh",
"regtest:clean": "./regtest/clean-env.sh",
"regtest": "pnpm regtest:clean && pnpm regtest:start && pnpm test:setup-docker"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Add a submodule preflight before invoking these scripts.

These commands assume ./regtest/*.sh already exists, but a normal clone leaves the regtest gitlink empty until git submodule update --init --recursive is run. That makes pnpm regtest* fail immediately for contributors and any CI checkout that does not fetch submodules.

🔧 Minimal guard
-        "regtest:start": "./regtest/start-env.sh",
+        "regtest:start": "[ -x ./regtest/start-env.sh ] || { echo 'Missing regtest submodule. Run: git submodule update --init --recursive' >&2; exit 1; }; ./regtest/start-env.sh",

Apply the same guard to regtest:stop and regtest:clean.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 66 - 69, Update the package.json scripts
regtest:start, regtest:stop, regtest:clean and the composite regtest to perform
a submodule preflight before invoking ./regtest/*.sh; specifically, prepend each
script invocation with a guard that ensures the regtest submodule is populated
(e.g., run a check and call git submodule update --init --recursive if needed)
so the shell scripts exist before running them, and keep the same script names
regtest:start, regtest:stop, regtest:clean, regtest.

regtest Outdated
@@ -0,0 +1 @@
Subproject commit e33f8e417a19c18f7413f772521e9646d5f2e198
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Check CI workflow for recursive submodule checkout =="
rg -n -C3 'actions/checkout|submodules:\s*(true|recursive)' .github/workflows/ci.yml || true

echo
echo "== Check docs/scripts for local submodule init/update guidance =="
rg -n -C2 'submodule (update|init)|--recurse-submodules|git clone .*--recurse-submodules|regtest/start-env.sh' README.md . github || true

echo
echo "== Verify .gitmodules includes regtest submodule =="
cat .gitmodules

Repository: arkade-os/boltz-swap

Length of output: 1626


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Search README for setup/installation/development instructions =="
fd -t f 'README' . | head -5 | while read f; do
  echo "File: $f"
  rg -n -C5 'setup|install|development|clone.*submodule|git submodule' "$f" || echo "(no matches)"
done

echo
echo "== Check package.json for setup/postinstall/prepare hooks =="
rg -n '"scripts"|postinstall|prepare' package.json -A 20

echo
echo "== Check if lint/unit/build jobs reference regtest =="
rg -n 'regtest' .github/workflows/ci.yml || echo "(no regtest references outside regtest job)"

Repository: arkade-os/boltz-swap

Length of output: 3446


Document submodule initialization for local development.

CI's regtest job correctly uses submodules: true, but local setup documentation lacks guidance on initializing submodules. Contributors cloning without --recurse-submodules and running npm run regtest:start will encounter missing script files. Add submodule initialization steps to README.md or create a setup hook in package.json (e.g., postinstall script).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@regtest` at line 1, The README currently lacks instructions to initialize git
submodules required for regtest; update README.md to add a brief "Local setup"
note instructing contributors to run git submodule update --init --recursive
after cloning (or clone with --recurse-submodules), and/or add an automated step
in package.json by creating a postinstall script (e.g., "postinstall": "git
submodule update --init --recursive") so npm install will initialize submodules
before running npm run regtest:start; reference the regtest:start script name
and ensure the documentation and package.json change mention the need for
submodules to avoid missing script files.

Comment on lines +30 to +35
const response = execSync(
"curl -s http://localhost:9069/v2/swap/submarine",
{ encoding: "utf8", stdio: "pipe" }
);
const newCount = JSON.parse(newCountResponse).chain_stats.tx_count;
if (newCount > initialCount) {
console.log(" ✔ Confirmed");
return txid;
if (response.includes('"ARK"')) {
console.log(" ✔ Boltz pairs ready");
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n 'new\s+BoltzSwapProvider\s*\(' -C2
rg -n 'apiUrl\s*:' -C2 test src

Repository: arkade-os/boltz-swap

Length of output: 6145


🌐 Web query:

What default API URL does new BoltzSwapProvider({ network: "regtest" })use in@arkade-os/sdk version 0.4.6?

💡 Result:

The default API URL for new BoltzSwapProvider({ network: "regtest" }) in @arkade-os/sdk version 0.4.6 is http://127.0.0.1:9001 or http://localhost:9001. This is based on Boltz Backend regtest configuration where the API server binds to host "127.0.0.1" port 9001, as shown in official Boltz documentation for regtest Docker Compose setup used in development. Arkade SDK's BoltzSwapProvider, when configured with network "regtest", uses this standard local Boltz regtest endpoint since no explicit apiUrl is provided in the constructor call, and examples show explicit local URLs for regtest-like environments (mutinynet uses custom subdomain, but regtest defaults to localhost). The SDK integrates with Boltz for swaps, and regtest assumes local Boltz backend running.

Citations:


Boltz readiness check URL port mismatch: setup checks 9069, SDK defaults to 9001.

The setup readiness probe at http://localhost:9069/v2/swap/submarine will pass independently of whether the SDK can reach Boltz. The SDK default for network: "regtest" is http://localhost:9001—not 9069. Both test/e2e/swap-manager.test.ts:39 and test/e2e/arkade-swaps.test.ts:252 create new BoltzSwapProvider({ network: "regtest" }) without specifying apiUrl, so they use the SDK's default port 9001. Either add apiUrl: "http://localhost:9001" to those BoltzSwapProvider constructors, or change the setup probe to check port 9001.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/setup.mjs` around lines 30 - 35, The readiness probe is checking
Boltz on port 9069 while the SDK's BoltzSwapProvider defaults to port 9001,
causing mismatch; fix by updating the BoltzSwapProvider constructors in
swap-manager.test.ts and arkade-swaps.test.ts to include apiUrl:
"http://localhost:9001" (e.g., new BoltzSwapProvider({ network: "regtest",
apiUrl: "http://localhost:9001" })); alternatively, if you prefer changing the
probe, update the URL used in setup.mjs's execSync curl call to
http://localhost:9001/v2/swap/submarine so the readiness check matches the SDK
default.

Comment on lines +53 to +54
await waitForArkServer();
await waitForBoltzPairs();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Make the Ark probe fail on HTTP errors before using it as the only gate.

waitForArkServer() still shells out to curl -s, which returns exit code 0 on HTTP 404/500 responses. Now that setup() only waits on readiness probes, a transient error page on :7070 can mark the environment as ready and move the flake into the tests.

🔧 Minimal hardening
-            execSync("curl -s http://localhost:7070/v1/info", {
+            execSync("curl -fsS http://localhost:7070/v1/info", {
                 stdio: "pipe",
             });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/setup.mjs` around lines 53 - 54, The Ark readiness probe can wrongly
succeed on HTTP error pages because waitForArkServer() shells out to curl -s
which exits 0 on 404/500; update waitForArkServer() so the curl invocation uses
the fail flag (e.g., --fail or -f with -sS) or otherwise checks the HTTP status
and returns non-zero on non-2xx responses, so the setup() readiness gate (await
waitForArkServer()) will fail on HTTP errors instead of treating an error page
as healthy.

Git submodules on Windows lose execute permissions. Ensure
scripts are executable before running in CI.
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

🔍 PR Review — boltz-swap#106

Sibling PR: ts-sdk#386 (same pattern, same submodule commit)

Summary

Replaces the custom test.docker-compose.yml (281 lines including Boltz backend, LND, Fulmine, PostgreSQL, CORS proxy) and cors.nginx.conf with the shared arkade-regtest submodule. CI split into 4 jobs (lint, unit, build run in parallel; integration gates on all three). Test setup reduced from ~350 lines of imperative provisioning (LND channel balancing, Fulmine wallet creation, Boltz startup) to readiness polling.

Key Observations

Architecture — good:

  • Net -748 lines. This repo had the heaviest Docker setup (Boltz + LND + Fulmine + CORS proxy) so the consolidation payoff is largest here.
  • Integration job correctly depends on [lint, unit, build] — slightly different from ts-sdk which only depends on [lint, unit]. Both are reasonable; this is more conservative.

Version pinning:

  • .env.regtest pins arkd to v0.8.11 (vs v0.9.0 in ts-sdk). This is correct — boltz-swap tests against the version its swaps are validated against. The version delta is intentional and appropriate.

Submodule branch pinning:

  • Same concern as ts-sdk#386: .gitmodules tracks feat/shared-regtest-env-discovery, not main. Recommend merging arkade-regtest#1 first.

Test setup (test/e2e/setup.mjs):

  • Now polls waitForArkServer + waitForBoltzPairs (checks http://localhost:9069/v2/swap/submarine for "ARK" in response). This means arkade-regtest must handle the entire Boltz/LND/Fulmine bootstrap internally — the old 10-step LND channel balancing, Fulmine wallet creation, and Boltz config injection are all delegated. If any of those steps fail silently in the submodule, the Boltz pairs endpoint check should catch it (it won't return ARK pairs until everything is wired).

CI log capture on failure:

  • Captures ark, boltz, boltz-lnd, boltz-fulmine — good coverage. These container names must match arkade-regtest's naming. Verify they do.

Security

  • No secrets in .env.regtest. ✅
  • Old Boltz config with hardcoded PostgreSQL creds, LND paths, and Fulmine keys removed — now managed by the submodule. ✅
  • CORS proxy (cors.nginx.conf with wildcard Access-Control-Allow-Origin: *) removed. If arkade-regtest provides its own CORS handling, verify it's similarly permissive for test use. ✅

Verdict

Excellent cleanup — the boltz-swap test infra was the most complex and brittle of the SDK repos. The waitForBoltzPairs readiness gate is a solid replacement for the imperative setup. Same recommendation: merge arkade-regtest#1 and update submodule to track main.

Kukks added 3 commits March 26, 2026 08:52
- Change docker exec container from 'arkd' to 'ark' (arkade-regtest name)
- Add nigiri build dir to GITHUB_PATH so tests can find the binary
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

🔍 Review: arkade-regtest submodule migration

Major cleanup — removes 748 lines of bespoke docker-compose, nginx CORS config, and setup scripting in favor of the shared arkade-regtest submodule. CI restructured into parallel lint/unit/build jobs with integration gated behind them.

Observations:

  1. CI structure: Split into lint → unit → build (parallel) → integration (gated). Good — faster feedback on lint/unit failures without burning integration runner time.
  2. Submodule branch: Points to feat/shared-regtest-env-discovery — needs update to main after ArkLabsHQ/arkade-regtest#1 merges.
  3. chmod +x workaround: Applied to regtest/*.sh regtest/helpers/*.sh in both start and cleanup steps — handles Windows submodule permission loss correctly.
  4. Image pins: .env.regtest pins arkd:v0.8.11 and arkd-wallet:v0.8.11 — note ts-sdk uses v0.9.0 for the same images. Intentional version difference or should these align?
  5. Failure diagnostics: Logs captured from ark, boltz, boltz-lnd, boltz-fulmine on failure — good coverage.
  6. Removed CORS proxy: The old cors.nginx.conf upstream proxy to boltz is gone. Confirm the regtest env handles CORS natively or integration tests don't need it.

Cross-repo: Coordinated with arkade-os/ts-sdk#386, arkade-os/dotnet-sdk#56, and ArkLabsHQ/arkade-regtest#1.

Clean migration. Main question is the v0.8.11 vs v0.9.0 divergence with ts-sdk.

@Kukks Kukks closed this Mar 26, 2026
@Kukks Kukks reopened this Mar 26, 2026
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

Iterative Review — New Commits

New commits since last review:

  • eb8823e fix: update container name and nigiri PATH for arkade-regtest
  • f2c7392 chore: trigger CI run

Changes

  1. Container name: arkdark — matches arkade-regtest's naming convention (nigiri uses ark as the container name, not arkd)
  2. nigiri PATH: adds regtest/_build/nigiri/build to $GITHUB_PATH so integration tests can invoke nigiri CLI (e.g. for faucet operations)

Both are CI plumbing fixes discovered during the first CI run. The arkade-swaps.test.ts docker exec also updated accordingly.

Cross-repo

Sibling PRs: arkade-os/ts-sdk#386, arkade-os/dotnet-sdk#56 — all three share the same arkade-regtest submodule. Coordinated merge recommended.

LGTM — straightforward CI fixes.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

🔍 Arkana Review — boltz-swap#106

Same pattern as ts-sdk#386 — clean migration to arkade-regtest submodule. Net -749 lines of removed infra is significant.

Highlights

  • 281-line test.docker-compose.yml removed along with cors.nginx.conf — all handled by arkade-regtest now
  • CI restructured into lint/unit/build/integration with proper dependency chain (needs: [lint, unit, build])
  • test/e2e/setup.mjs reduced to readiness-check-only logic
  • Pins arkd v0.8.11 — different from ts-sdk's v0.9.0, which is correct since boltz-swap may not be compatible with the latest arkd yet

Observations

1. Same submodule branch concern as ts-sdk#386
.gitmodules tracks feat/shared-regtest-env-discovery — update to master or remove the branch line before merge.

2. test/e2e/arkade-swaps.test.ts container name change

-const arkdExec = "docker exec -t arkd";
+const arkdExec = "docker exec -t ark";

Good catch — consistent with the nigiri naming convention. Verify no other files reference the old arkd container name.

3. Boltz pairs readiness check in setup.mjs
The new setup waits for Boltz ARK/BTC pairs to be available — this is important since arkade-regtest's start-env.sh already does this, but the SDK-level check adds defense in depth.

Cross-Repo

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

🔍 Arkana Review — Updated Commits

Scope: Replace test.docker-compose.yml and cors.nginx.conf with arkade-regtest submodule, restructure CI.

What Changed (vs. previous review)

Submodule pointer updated to 16d9940 (latest arkade-regtest with .env auto-discovery).

Key Points

  1. .env.regtest pins ARKD_IMAGE=ghcr.io/arkade-os/arkd:v0.8.11 — boltz-swap tests require v0.8.11 specifically, not v0.9.0. The override mechanism in arkade-regtest handles this cleanly.

  2. CI restructure: Same parallel pattern as ts-sdk — lint, unit, build in parallel, integration depends on [lint, unit, build]. Good consistency across repos.

  3. test/e2e/setup.mjs: 357 lines → 13 lines. The massive infrastructure orchestration is gone; now just polls for service readiness.

  4. test/e2e/arkade-swaps.test.ts: Container reference updated arkdark (1 line).

  5. package.json: Cleaned up — removed test:build-docker, test:up-docker, test:down-docker and replaced with regtest:start/stop/clean.

Cross-Repo

Depends on ArkLabsHQ/arkade-regtest#1. Sibling PRs: arkade-os/ts-sdk#386, arkade-os/dotnet-sdk#56.

No Issues Found

This is the cleanest of the three SDK migrations — boltz-swap had the least custom infrastructure to begin with. The version pin to v0.8.11 is the only meaningful SDK-specific config.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

Followup review (commit c775255): Bumps arkade-regtest submodule to pick up the env vars export fix (delegator ports + arkd config vars). No SDK-side changes. LGTM.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

Iterative review (new commits since last review)

New commit adds ARKD_VTXO_TREE_EXPIRY=20 and ARKD_BOARDING_EXIT_DELAY=1024 to .env.regtest to match the old test.docker-compose.yml config.

Correct approach — the override compose in arkade-regtest plumbs these via ${ARKD_VTXO_TREE_EXPIRY:-1024} and ${ARKD_BOARDING_EXIT_DELAY:-2048}, so the .env.regtest values will take precedence. Tree expiry of 20 blocks and boarding delay of 1024 blocks match what the tests expect.

No issues with this change. Pairs with the arkade-regtest fix to always recreate arkd containers when ARKD_IMAGE is set (ArkLabsHQ/arkade-regtest#1).

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 26, 2026

Iterative review (commit f055ed4)

Bumps arkade-regtest submodule to always recreate arkd containers when env vars change. This pairs with the previous .env.regtest additions (ARKD_VTXO_TREE_EXPIRY=20, ARKD_BOARDING_EXIT_DELAY=1024) — now those values are guaranteed to take effect on every start-env.sh run.

All four coordinated PRs (arkade-regtest#1, ts-sdk#386, boltz-swap#106, dotnet-sdk#56) are aligned. LGTM ✅

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review — boltz-swap #106

PR: feat: use arkade-regtest for regtest environment
Trigger: New commits since last review

Overview

Clean migration from a custom test.docker-compose.yml (281 lines) + CORS nginx proxy to the shared arkade-regtest submodule. Net deletion of ~637 lines. CI split into 4 parallel jobs (lint, unit, build, integration).

✅ What looks good

  • Massive simplification — removes duplicated infrastructure config that was drifting between repos
  • CI parallelization — lint/unit/build run independently; integration gates on all three
  • .env.regtest overrides — properly preserves boltz-swap-specific config (block scheduler, 20-block VTXO expiry, zero fees)
  • setup.mjs trimmed to readiness-only checks — no more wallet creation/funding/fulmine setup (arkade-regtest handles it)
  • Submodule pinned to specific commit, good for reproducibility

⚠️ Observations

  1. Submodule branch tracking.gitmodules points to feat/shared-regtest-env-discovery branch. Once that branch merges to main in arkade-regtest, this should be updated to track main to avoid confusion.

  2. actions/cache@v4 for regtest/_build — Good choice. Cache key uses .env.defaults + .env.regtest hashes, which should bust correctly when env changes.

  3. pnpm install --frozen-lockfile — Correct for CI (fails on lockfile mismatch rather than silently updating).

  4. No ARKD_ALLOW_CSV_BLOCK_TYPE — The old compose had this set. If the arkade-regtest defaults include it, fine. If not, some tests expecting CSV-block-type exits might behave differently. Worth verifying.

  5. workflow_dispatch added — Nice for manual CI triggers during debugging.

Security

  • No key material in the diff — signer keys are handled by arkade-regtest defaults
  • No new exposed ports or network changes beyond what the submodule provides
  • No concerns

Verdict

Straightforward infrastructure consolidation. Low risk. The only item worth double-checking is whether ARKD_ALLOW_CSV_BLOCK_TYPE is covered by arkade-regtest defaults.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review

PR: feat: use arkade-regtest for regtest environment

Overview

Replaces custom test.docker-compose.yml (281 lines) and cors.nginx.conf with the shared arkade-regtest submodule. Pins arkd to v0.8.11. Net -637 lines.

✅ What looks good

  • CI restructured into parallel lint/unit/build jobs with integration gated behind them (needs: [lint, unit, build]). Faster feedback on simple failures.
  • .env.regtest with zero fees — explicitly documents that boltz-swap tests don't account for intent fees. Good context for future test authors.
  • Setup trimmed to readiness-only checks — no more side-effect orchestration in setup.mjs.
  • Proper cleanup with if: always() and clean-env.sh.

📝 Minor notes

  1. Submodule branch tracking (feat/shared-regtest-env-discovery): Same as other repos — update to default branch once arkade-regtest#1 lands.
  2. workflow_dispatch added — nice, allows manual CI runs for debugging.
  3. arkd v0.8.11 pin: boltz-swap uses an older version than wallet (v0.9.1) and ts-sdk (v0.9.0). This is fine if the test suite expects v0.8.x behavior, just worth keeping track of.

🔒 Security

  • No secrets in .env.regtest — only image tags and config values. ✅
  • Fee zeroing is test-only (ARK_OFFCHAIN_*_FEE="0.0"). ✅
  • Submodule URL points to org-controlled repo. ✅

Cross-repo note

Part of coordinated migration with wallet#492 and ts-sdk#386.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review — boltz-swap#106

Overall: Clean migration from bespoke docker-compose infra to the shared arkade-regtest submodule. Massive net deletion (-749 lines). The key changes are well-scoped and the test setup simplification is a big maintainability win.

✅ Strengths

  • Net -637 lines — removing test.docker-compose.yml (281 lines), cors.nginx.conf (26 lines), and ~320 lines of setup.mjs infrastructure code is a huge DX improvement.
  • CI refactor — splitting into lint/unit/build/integration jobs with proper needs dependencies is the right pattern. Integration only runs after fast checks pass.
  • setup.mjs reduced to readiness checks onlywaitForArkServer() + waitForBoltzPairs() is exactly what SDK-level test setup should be. All infrastructure orchestration lives in arkade-regtest where it belongs.
  • pnpm install --frozen-lockfile in CI — correct for reproducible builds.

⚠️ Items to Watch

  1. Container name change: arkdark — The test file arkade-swaps.test.ts correctly updates docker exec -t arkd to docker exec -t ark. Make sure there are no other references to the old container name in any test files or scripts. A quick grep -r "arkd" test/ would catch any stragglers (note: arkd the binary inside the container is still called arkd, so docker exec ark arkd note is correct).

  2. .gitmodules points to feature branch — Currently tracking branch = feat/shared-regtest-env-discovery. This needs to be updated to master (or the branch reference removed) once ArkLabsHQ/arkade-regtest#1 is merged. Otherwise CI will break if the feature branch is deleted.

  3. .env.regtest pins to v0.8.11 — This is intentional (boltz-swap tests were written against v0.8.11 behavior), but worth noting that this will need version bumps as arkd evolves. The zero-fee overrides (ARK_OFFCHAIN_INPUT_FEE="0.0" etc.) suggest boltz-swap tests don't account for intent fees — document this as a known limitation or add a TODO.

  4. regtest/_build cache key — CI caches regtest/_build keyed on .env.defaults and .env.regtest hashes. This is good but note the cache is for the built nigiri binary. If the nigiri branch changes in .env.defaults but the hash stays the same, you'll get a stale binary. Edge case but worth knowing.

  5. Missing workflow_dispatch inputsworkflow_dispatch: is added (good for manual triggers) but has no inputs. Consider adding an optional input for the arkd version to allow testing against different versions without modifying .env.regtest.

  6. Integration job needs Go 1.23 — This is for building nigiri from source. If nigiri ships pre-built binaries in the future, this dependency can be dropped.

🔒 Security

  • No credentials or keys in the diff. The .env.regtest contains only configuration values.
  • ARKD_WALLET_SIGNER_KEY is set in arkade-regtest's .env.defaults, not here — correct separation.

Cross-Repo Dependencies

  • Depends on: ArkLabsHQ/arkade-regtest#1 being merged (or at least the feature branch existing).
  • Parallel PRs: arkade-os/ts-sdk#386 follows the same pattern. Consistent approach across both SDKs.

LGTM — merge after arkade-regtest#1 lands and .gitmodules branch reference is updated.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review

Overall: Clean parallel migration to shared regtest. Same pattern as ts-sdk#386, well-executed. -749 lines of duplicated infra.

✅ What looks good

  • Deleted test.docker-compose.yml (281 lines), cors.nginx.conf (26 lines) — all handled by arkade-regtest now.
  • .env.regtest pins arkd to v0.8.11 — correctly preserves the boltz-swap-specific version requirement (different from ts-sdk's v0.9.0).
  • CI restructured into lint/unit/build/integration jobs with proper dependency chain.
  • test/e2e/setup.mjs reduced from ~370 lines of complex orchestration (LND setup, channel opening, Boltz config) to ~30 lines of readiness checks. arkade-regtest handles all of this now.
  • Zero-fee overrides match ts-sdk's approach — boltz-swap tests don't account for intent fees.

⚠️ Observations

  1. Same .gitmodules branch issue — points to feat/shared-regtest-env-discovery. Needs update to main after arkade-regtest#1 merges.

  2. Submodule pinned at 150fe38b — this is the latest arkade-regtest commit, good. But ts-sdk#386 still points to 310abac7. These should ideally be aligned before merge.

  3. test/e2e/arkade-swaps.test.ts change (line diff shows 1 addition, 1 deletion) — verify this is just the container name rename (arkdark), not a behavioral change.

  4. pnpm regtest script now does clean && start && setup-docker — the regtest:clean before start is good for idempotency, but note it will wipe volumes every time. Developers doing iterative testing might prefer regtest:start alone (which is idempotent in arkade-regtest).

  5. Missing pnpm test:setup and pnpm test:down — these old scripts were removed but may be referenced in CONTRIBUTING docs or developer muscle memory. Consider a note in the PR description or README.

🔒 Security

  • No concerns. Regtest-only, no production credentials.
  • Boltz config (CORS, gRPC ports) now managed centrally by arkade-regtest.

Cross-repo impact

  • Depends on arkade-regtest#1 landing first.
  • Aligned with ts-sdk#386 and wallet#492 as part of the shared-regtest initiative.

Set BITCOIN_LOW_FEE=false to avoid restarting bitcoind, which breaks
nbxplorer's connection and causes arkd to have zero balance.
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

Review (followup commit 1354937)

Sets BITCOIN_LOW_FEE=false in .env.regtest to prevent bitcoind restart, which was breaking nbxplorer's connection and leaving arkd with zero balance. Submodule bumped to 0e637a5.

Solid fix — the root cause (nbxplorer losing its zmq subscription when bitcoind restarts) is a known footgun in regtest setups. Disabling the low-fee config avoids the restart entirely rather than trying to reconnect, which is the right call for CI.

No security concerns. ✅

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Review — arkade-regtest migration (boltz-swap)

Net: +115 / −749 — massive simplification, removing the custom test.docker-compose.yml (281 lines) and CORS proxy in favor of the shared arkade-regtest submodule. Clean approach.

✅ What works well

  • CI split into parallel jobs (lint → unit → build → integration) with needs gating — faster feedback loops
  • Setup script reduced to readiness checks onlywaitForArkServer() + waitForBoltzPairs(), letting arkade-regtest handle all orchestration
  • Container name update arkdark correctly applied in arkade-swaps.test.ts
  • BITCOIN_LOW_FEE=false — good catch on the nbxplorer connection loss from bitcoind restart
  • Zero intent fees set via env vars for test isolation
  • Nigiri build dir cached via actions/cache@v4 keyed on env file hashes

⚠️ Notes

  1. Submodule tracks feature branch.gitmodules points to feat/shared-regtest-env-discovery, not main. Fine for now but should be updated to main once ArkLabsHQ/arkade-regtest#1 merges.

  2. Commit count (47 commits) — mostly iterative submodule bumps for CI debugging. Recommend squash-merge to keep history clean.

  3. chmod +x in CI — needed for Windows-originated submodule scripts. Consider adding a .gitattributes in arkade-regtest to set *.sh binary or eol=lf to avoid this permanently.

Cross-repo context

Parallel PR: arkade-os/ts-sdk#386 (same migration, pins v0.9.0 instead of v0.8.11). Both depend on ArkLabsHQ/arkade-regtest#1.

No security concerns — test infrastructure only.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

Iterative review — new commit c993b169 (21-tx server funding for fee estimation)

This is the key fix for boltz-swap: estimatesmartfee needs block history with transactions. The old setup.mjs did 21 faucet txs for this exact reason. Now arkade-regtest handles it natively with 21 small faucet txs to the server wallet address.

Combined with BITCOIN_LOW_FEE=false, this should resolve the CI failures. LGTM.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review — boltz-swap#106

Scope: Replace custom test infrastructure with arkade-regtest submodule. Pin arkd v0.8.11.

Changes — Follows Established Pattern ✅

Same migration pattern as ts-sdk#386. Removes test.docker-compose.yml (281 lines), cors.nginx.conf (26 lines). CI split into lint/unit/build/integration jobs.

Key Observations

1. Pins arkd v0.8.11 (older than ts-sdk's v0.9.0 and wallet's v0.9.1)

ARKD_IMAGE=ghcr.io/arkade-os/arkd:v0.8.11
ARKD_WALLET_IMAGE=ghcr.io/arkade-os/arkd-wallet:v0.8.11

This is likely intentional — boltz-swap may depend on v0.8.x API/behavior. Worth confirming this is deliberate and not just a stale pin. If boltz-swap works with v0.9.x, upgrading would reduce version sprawl.

2. Zero fees + block scheduler

ARKD_SCHEDULER_TYPE=block
ARK_OFFCHAIN_INPUT_FEE="0.0"

Comment: "boltz-swap tests don't account for intent fees". Correct approach — explicit about why fees are zeroed.

3. ARKD_ROUND_INTERVAL=3
Aggressive round interval (3 seconds vs default 10). Speeds up tests but may cause timing-sensitive issues if rounds overlap with setup. The old compose had ARKD_ROUND_INTERVAL at 10 (implicit default). This is a behavior change — intentional?

4. CI integration job depends on [lint, unit, build]
Slightly different from ts-sdk which has needs: [lint, unit]. The extra build gate is fine — just noting the inconsistency across repos.

5. Test file arkade-swaps.test.ts — single line change

-    "test:integration-docker": "vitest run test/e2e/**",
+    "test:integration-docker": "vitest run test/e2e/**",

The actual test change in arkade-swaps.test.ts is just +1/-1. Minimal test disruption — good sign.

Verdict

Clean migration following the same pattern. The v0.8.11 pin is the main thing to double-check for staleness. 👍

Kukks added 2 commits March 29, 2026 20:44
- ARKD_VTXO_TREE_EXPIRY 20 -> 512 (20 blocks expired during 30+ block
  setup, causing VTXO_RECOVERABLE errors in reverse/chain swaps)
- Update regtest submodule to eecb40e (passes ARK fee env vars to arkd)
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

Follow-up review (new commits: bf5c5bc..e292013)

Two submodule bumps tracking arkade-regtest fixes:

  1. Fund Boltz Bitcoin Core wallet for on-chain swap operations (reverse swaps were failing with "onchain coins could not be sent")
  2. Increase server funding to 21 BTC (1 BTC × 21 txs) — creates enough transaction history for estimatesmartfee to work, replacing the old setup.mjs pattern of 21 faucet transactions
  3. ARK fee env var passthrough (eecb40e) — the zero fees in .env.regtest are now actually passed to the arkd container

The last fix is critical for boltz-swap since tests assume zero fees. Without it, the ARK_OFFCHAIN_INPUT_FEE="0.0" override was silently ignored. LGTM.

ARKD_ALLOW_CSV_BLOCK_TYPE=true is required when SCHEDULER_TYPE=block,
otherwise VTXO_TREE_EXPIRY=512 is interpreted as seconds and arkd
refuses to start.
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review — boltz-swap#106

Summary: Migrates boltz-swap regtest infra to shared arkade-regtest submodule. Removes test.docker-compose.yml (~281 lines), cors.nginx.conf, and legacy lifecycle scripts. Pins arkd to v0.8.11.

✅ Looks Good

  • CI refactored into 4 parallel jobs (lint, unit, build, integration) — faster feedback, integration only runs after prerequisites pass.
  • .env.regtest is well-documented — comments explain why ARKD_SCHEDULER_TYPE=block and ARKD_ALLOW_CSV_BLOCK_TYPE=true are needed (block scheduler needs CSV block type).
  • Zero fees configARK_OFFCHAIN_INPUT_FEE="0.0" etc. makes sense since boltz-swap tests don't account for intent fees. Good that this is documented inline.
  • setup.mjs stripped to readiness-only checks — no more wallet creation/funding orchestration.

📝 Notes

  1. arkd v0.8.11 — this is an older version than wallet (v0.9.1) and ts-sdk (v0.9.0). Intentional? If boltz-swap specifically needs v0.8.x compatibility, that's fine, but worth confirming the pin won't drift as the regtest submodule evolves.
  2. Same .gitmodules branch note as wallet#492 — tracking feat/shared-regtest-env-discovery. Ensure the regtest PR merges first or update branch tracking.
  3. workflow_dispatch added — nice, allows manual CI triggers for debugging.
  4. cors.nginx.conf removal — the regtest submodule presumably handles the CORS proxy for boltz. Verify the boltz API is accessible at localhost:9069 via the regtest stack's own CORS setup.

🔒 Security

  • No credential exposure. Test fixtures only.
  • No production paths affected.

Verdict: Clean migration. No blockers.

arkd interprets values >= 512 as seconds (BIP 112 threshold). Set to
200 blocks which survives the ~30 block setup while staying in the
block-interpretation range. Also enable ALLOW_CSV_BLOCK_TYPE=true.
@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Iterative review — changes since 883eb8f

New commit 4e7fb15: reduces ARKD_VTXO_TREE_EXPIRY from 512 → 200 blocks.

Good catch on the BIP 112 threshold — values ≥ 512 are interpreted as seconds by the CSV opcode, which conflicts with SCHEDULER_TYPE=block. 200 blocks gives plenty of headroom for the ~30-block setup phase while staying safely in the block-interpretation range.

.env.regtest now has ALLOW_CSV_BLOCK_TYPE=true which is required for SCHEDULER_TYPE=block — consistent.

Cross-repo note: wallet#492 uses gocron scheduler (v0.9.1 needs it), while this PR and ts-sdk#386 use block scheduler. The version-specific configs are correct — just worth documenting in arkade-regtest that the scheduler/expiry pairing depends on the arkd version.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 29, 2026

🔍 Arkana PR Review — boltz-swap#106

Summary: Replaces custom test.docker-compose.yml and CORS nginx config with shared arkade-regtest submodule. Pins arkd to v0.8.11 with block scheduler.

✅ Looks Good

  • Massive CI cleanup — monolithic job split into lint/unit/build/integration with proper dependency chain (integration needs all three)
  • No secrets leaked — removed test.docker-compose.yml contained the well-known regtest signer key (afcd3fa...), which is fine for regtest but good to centralize in the submodule
  • Zero-fee configuration correct for boltz-swap tests that don't account for intent fees (ARK_*_FEE="0.0")
  • BIP 112 handlingVTXO_TREE_EXPIRY=200 with ALLOW_CSV_BLOCK_TYPE=true stays under the 512 threshold for block interpretation. Final commit message explains the reasoning well
  • Deterministic cleanup with if: always() on the cleanup step

⚠️ Notes

  • Submodule on feature branch (feat/shared-regtest-env-discovery) — should track main after merge
  • Removed boltz inline config was extensive (280 lines) — verify the arkade-regtest default boltz config covers the same swap pairs (ARK/BTC), fee settings, and unilateral delay values (claim=50, refund=50, refundWithoutReceiver=10). If arkade-regtest uses different defaults, integration tests may behave differently
  • workflow_dispatch added — good for manual CI triggers during iteration

🔒 Security

  • No protocol code changes. Test infrastructure only
  • Boltz config had cors = "*" — appropriate for regtest, and now managed by arkade-regtest
  • No production impact

No blocking issues.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 30, 2026

Iterative review (commit d6bf0f3)

Single submodule bump: picks up conditional nbxplorer restart from arkade-regtest. Same pattern as the other SDK PRs in this batch.

No concerns.

@arkanaai
Copy link
Copy Markdown

arkanaai bot commented Mar 30, 2026

Follow-up review (new commits since last review)

Latest commits point the regtest submodule to master after the arkade-regtest PR merged. Key state since last review:

Config (.env.regtest)

  • arkd v0.8.11 pinned, block scheduler with ALLOW_CSV_BLOCK_TYPE=true, VTXO_TREE_EXPIRY=200 (under BIP 112 threshold ✅)
  • Zero intent fees — correct for boltz-swap tests that don't budget for fees
  • BITCOIN_LOW_FEE=false — avoids nbxplorer disconnection from bitcoind restart

CI — Clean split into lint/unit/build/integration jobs. Integration gates on the other three. Failure log capture covers all relevant containers. workflow_dispatch for manual runs.

Cross-repo alignment — Same submodule commit (0ddb42c) across ts-sdk#386, wallet#492, dotnet-sdk#56, and this PR. All four share the arkade-regtest infra now.

No security concerns. The .env.regtest is regtest-only config with zero fees and test keys — appropriate for CI.

Looks ready pending CI green on integration.

@pietro909
Copy link
Copy Markdown
Contributor

Tried out, it's missing some plumbing:

$ pnpm run regtest

> @arkade-os/boltz-swap@0.3.4 regtest /home/pietro/workspace/ark/boltz-swap
> pnpm regtest:clean && pnpm regtest:start && pnpm test:setup-docker


> @arkade-os/boltz-swap@0.3.4 regtest:clean /home/pietro/workspace/ark/boltz-swap
> ./regtest/clean-env.sh

sh: 1: ./regtest/clean-env.sh: not found
 ELIFECYCLE  Command failed.
 ELIFECYCLE  Command failed with exit code 1.

@arkanaai arkanaai bot mentioned this pull request Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants