From 2e4fbb8a42a76c7405cb4a1e62456af752c1eb65 Mon Sep 17 00:00:00 2001 From: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> Date: Sun, 4 Aug 2024 19:02:34 -0400 Subject: [PATCH] chore: Rename to argument --- .github/workflows/ci.yml | 2 +- .github/workflows/nightly.yml | 6 +++--- .gitmodules | 2 +- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 14 +++++++------- Cargo.toml | 14 +++++++------- LICENSE-MIT | 2 +- README.md | 14 +++++++------- benches/sha256.rs | 4 ++-- examples/keccak.rs | 2 +- foil/Cargo.toml | 2 +- notes/reduction-notes.md | 10 +++++----- notes/soundness-notes.md | 6 +++--- src/coprocessor/circom/README.md | 6 +++--- src/proof/tests/nova_tests.rs | 2 +- 15 files changed, 44 insertions(+), 44 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0733c7897f..82a3dd9ed2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,6 +57,6 @@ jobs: with: fail-fast: true - # Lint dependencies for licensing and auditing issues as per https://github.com/lurk-lab/lurk-rs/blob/main/deny.toml + # Lint dependencies for licensing and auditing issues as per https://github.com/argumentcomputer/lurk-rs/blob/main/deny.toml licenses-audits: uses: lurk-lab/ci-workflows/.github/workflows/licenses-audits.yml@main diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1b0d8adf82..ecf03e60ee 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -52,15 +52,15 @@ jobs: - name: Amend MESSAGE for tests if: steps.tests.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Exhaustive test run failed in https://github.com/lurk-lab/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Exhaustive test run failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Amend MESSAGE for benches if: steps.benches.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Bench compilation failed in https://github.com/lurk-lab/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Bench compilation failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Amend MESSAGE for doctests if: steps.doctests.outcome != 'success' - run: echo "MESSAGE=${{ env.MESSAGE }} Doc test run failed in https://github.com/lurk-lab/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV + run: echo "MESSAGE=${{ env.MESSAGE }} Doc test run failed in https://github.com/argumentcomputer/lurk-rs/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV - name: Find the last report issue open id: last_issue diff --git a/.gitmodules b/.gitmodules index 6db8534f7c..50c8b97ea4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "lurk-lib"] path = lurk-lib - url = https://github.com/lurk-lab/lurk-lib.git + url = https://github.com/argumentcomputer/lurk-lib.git diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index b0e902bbcf..b7dfd2582b 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at community@lurk-lab.com. +reported to the community leaders responsible for enforcement at community@argument.xyz. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 81269b501d..faa85275c2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,19 +68,19 @@ Welcome to the Lurk-rs project! Here's an introduction to the branch organizatio ### Major Dependencies -The main repo is [lurk-rs](https://github.com/lurk-lab/lurk-rs) with major dependencies: +The main repo is [lurk-rs](https://github.com/argumentcomputer/lurk-rs) with major dependencies: -- [bellpepper](https://github.com/lurk-lab/bellpepper) -- [neptune](https://github.com/lurk-lab/neptune) -- [arecibo](https://github.com/lurk-lab/arecibo) - a fork of the upstream repo [nova](https://github.com/microsoft/Nova) +- [bellpepper](https://github.com/argumentcomputer/bellpepper) +- [neptune](https://github.com/argumentcomputer/neptune) +- [arecibo](https://github.com/argumentcomputer/arecibo) - a fork of the upstream repo [nova](https://github.com/microsoft/Nova) ### Forked Dependencies Additionally, Lurk-rs depends on the following forked repositories: -- [pasta_curves](https://github.com/lurk-lab/pasta_curves) (forked from [zcash/pasta_curves](https://github.com/zcash/pasta_curves)) -- [pasta-msm](https://github.com/lurk-lab/pasta-msm) (forked from [supranational/pasta-msm](https://github.com/supranational/pasta-msm)) -- [ec-gpu](https://github.com/lurk-lab/ec-gpu) (forked from [filecoin-project/ec-gpu](https://github.com/filecoin-project/ec-gpu)) +- [pasta_curves](https://github.com/argumentcomputer/pasta_curves) (forked from [zcash/pasta_curves](https://github.com/zcash/pasta_curves)) +- [pasta-msm](https://github.com/argumentcomputer/pasta-msm) (forked from [supranational/pasta-msm](https://github.com/supranational/pasta-msm)) +- [ec-gpu](https://github.com/argumentcomputer/ec-gpu) (forked from [filecoin-project/ec-gpu](https://github.com/filecoin-project/ec-gpu)) For rapid iterations and to address issues in these dependencies, Lurk's **main** branch directly depends on the **dev** branch of its dependencies (transitively). diff --git a/Cargo.toml b/Cargo.toml index 968c655e3b..6279f6a586 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,14 +56,14 @@ thiserror = { workspace = true } abomonation = { workspace = true } abomonation_derive = { version = "0.1.0", package = "abomonation_derive_ng" } byteorder = "1.4.3" -circom-scotia = { git = "https://github.com/lurk-lab/circom-scotia", branch = "main" } +circom-scotia = { git = "https://github.com/argumentcomputer/circom-scotia", branch = "main" } sha2 = { version = "0.10.2" } reqwest = { version = "0.12.2", features = ["stream", "blocking"] } ansi_term = "0.12.1" tracing = { workspace = true } tracing-texray = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } -elsa = { version = "1.9.0", git = "https://github.com/lurk-lab/elsa", branch = "sync_frozen", features = ["indexmap"] } +elsa = { version = "1.9.0", git = "https://github.com/argumentcomputer/elsa", branch = "sync_frozen", features = ["indexmap"] } arc-swap = "1.6.0" halo2curves = { version = "0.6.0", features = ["bits", "derive_serde"] } @@ -117,15 +117,15 @@ members = ["foil", "lurk-macros", "lurk-metrics", "chain-server"] [workspace.dependencies] abomonation = "0.7.3" anyhow = "1.0.72" -bellpepper = { git = "https://github.com/lurk-lab/bellpepper", branch = "dev" } +bellpepper = { git = "https://github.com/argumentcomputer/bellpepper", branch = "dev" } bellpepper-core = { version = "0.4.0" } bincode = "1.3.3" camino = "1.1.6" clap = "4.3.17" ff = "0.13" metrics = "0.23.0" -neptune = { git = "https://github.com/lurk-lab/neptune", branch = "dev", default-features = false, features = ["abomonation"] } -nova = { git = "https://github.com/lurk-lab/arecibo", branch = "dev", package = "arecibo", features = ["abomonate"]} +neptune = { git = "https://github.com/argumentcomputer/neptune", branch = "dev", default-features = false, features = ["abomonation"] } +nova = { git = "https://github.com/argumentcomputer/arecibo", branch = "dev", package = "arecibo", features = ["abomonate"]} once_cell = "1.18.0" pairing = { version = "0.23" } pasta_curves = { version = "0.5.0" } @@ -143,11 +143,11 @@ tracing-subscriber = "0.3.17" # All workspace members should inherit these keys # for package declarations. [workspace.package] -authors = ["Lurk Lab Engineering "] +authors = ["Argument Engineering "] edition = "2021" homepage = "https://lurk-lang.org/" license = "MIT OR Apache-2.0" -repository = "https://github.com/lurk-lab/lurk-rs" +repository = "https://github.com/argumentcomputer/lurk-rs" rust-version = "1.74.1" [[bin]] diff --git a/LICENSE-MIT b/LICENSE-MIT index 60e830f59c..4fe373e605 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Lurk Lab +Copyright (c) 2023 Argument Computer Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2e8d424a30..0e536f79f7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Lurk -![lurk-rs](https://github.com/lurk-lab/lurk-rs/actions/workflows/ci.yml/badge.svg) +![lurk-rs](https://github.com/argumentcomputer/lurk-rs/actions/workflows/ci.yml/badge.svg) ![minimum rustc 1.70][msrv-image] [![dependency status](https://deps.rs/repo/github/lurk-lab/lurk-rs/status.svg)](https://deps.rs/repo/github/lurk-lab/lurk-rs) ![crates.io][crates-image] @@ -12,25 +12,25 @@ Lurk is currently in [Beta](https://blog.lurk-lang.org/posts/lurk-beta/), which is backwards compatible with code that ran in Lurk Alpha and is expected to be compatible with Lurk 1.0. However, some low-level data representations are anticipated to change, and we will be refactoring the evaluation model (and consequently its circuit) for efficiency purposes. Also note that since Lurk inherits some security properties from the underlying proving system, those who would rely on Lurk should investigate the security and status of Nova/SuperNova itself. We encourage early adopters to begin writing real applications taking advantage of Lurk so you can begin to familiarize yourself with the programming model. Likewise, we welcome your feedback -- which will help ensure ongoing development meets user need. -For support and discussions, please visit our [Zulip forum](https://zulip.lurk-lab.com/). +For support and discussions, please visit our [Zulip forum](https://zulip.argument.xyz/). # Overview -Lurk is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp. A reference implementation focused on describing and developing the core language can be found in the [`lurk`](https://github.com/lurk-lab/lurk-lisp) repo. +Lurk is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp. A reference implementation focused on describing and developing the core language can be found in the [`lurk`](https://github.com/argumentcomputer/lurk-lisp) repo. Lurk's distinguishing feature relative to most programming languages is that correct execution of Lurk programs can be directly proved using zk-SNARKs. The resulting proofs are succinct: they are relatively small, can be verified quickly, and they reveal only the information explicitly contained in the statement to be proved. For more detailed information, refer to the paper: [https://eprint.iacr.org/2023/369](https://eprint.iacr.org/2023/369) -Lurk's distinguishing feature relative to most zk-SNARK authoring languages is that Lurk is Turing complete, so arbitrary computational claims can be made and proved (subject to resource limitations, obviously). Because Lurk is a Lisp, its code is simply Lurk data, and any Lurk data can be directly evaluated as a Lurk program. Lurk constructs compound data using SNARK-friendly Poseidon hashes (provided by [Neptune](https://github.com/lurk-lab/neptune)), so its data is naturally content-addressable. +Lurk's distinguishing feature relative to most zk-SNARK authoring languages is that Lurk is Turing complete, so arbitrary computational claims can be made and proved (subject to resource limitations, obviously). Because Lurk is a Lisp, its code is simply Lurk data, and any Lurk data can be directly evaluated as a Lurk program. Lurk constructs compound data using SNARK-friendly Poseidon hashes (provided by [Neptune](https://github.com/argumentcomputer/neptune)), so its data is naturally content-addressable. # Proofs Integration with backend proving systems and tooling for proof generation are both still very early. Performance and user experience still have room for significant optimization and improvement, but simple examples can be found in the [demo example directory](demo/). # Backends -- Nova is Lurk's officially-supported IVC backend. It uses Lurk Lab's Arecibo fork of the [Nova proving system](https://github.com/lurk-lab/arecibo) and the Pasta Curves. -- SuperNova is Lurk's in-development NIVC backend. It uses Arecibo's [SuperNova extension to the Nova proving system](https://github.com/lurk-lab/arecibo/tree/dev/src/supernova) and the Pasta Curves. +- Nova is Lurk's officially-supported IVC backend. It uses Argument Computer Corporation's Arecibo fork of the [Nova proving system](https://github.com/argumentcomputer/arecibo) and the Pasta Curves. +- SuperNova is Lurk's in-development NIVC backend. It uses Arecibo's [SuperNova extension to the Nova proving system](https://github.com/argumentcomputer/arecibo/tree/dev/src/supernova) and the Pasta Curves. - Future work may target Halo2 or other proving systems. It is an explicit design goal that statements about the evaluation of Lurk programs have identical semantic meaning across backends, with the qualification that Lurk language instances are themselves parameterized on scalar field and hash function. When backends use the same scalar field and hash function, they can be used to generate equivalent proofs. This is because the concrete representation of content-addressed data is fixed. @@ -57,7 +57,7 @@ Please note that the Lurk language and spec will be versioned independently from ## Submodules -Lurk source files used in tests are in the [lurk-lib](https://github.com/lurk-lab/lurk-lib) submodule. You must +Lurk source files used in tests are in the [lurk-lib](https://github.com/argumentcomputer/lurk-lib) submodule. You must initialize and update submodules before test will pass: ```ignore diff --git a/benches/sha256.rs b/benches/sha256.rs index d880a90322..12ea32adfd 100644 --- a/benches/sha256.rs +++ b/benches/sha256.rs @@ -378,7 +378,7 @@ cfg_if::cfg_if! { targets = nivc_prove_benchmarks // TODO: Add when compressed SNARK is implemented for SuperNova - // https://github.com/lurk-lab/arecibo/issues/27https://github.com/lurk-lab/arecibo/issues/27 + // https://github.com/argumentcomputer/arecibo/issues/27https://github.com/argumentcomputer/arecibo/issues/27 // nivc_prove_compressed_benchmarks } } else { @@ -399,7 +399,7 @@ cfg_if::cfg_if! { targets = nivc_prove_benchmarks // TODO: Add when compressed SNARK is implemented for SuperNova - // https://github.com/lurk-lab/arecibo/issues/27https://github.com/lurk-lab/arecibo/issues/27 + // https://github.com/argumentcomputer/arecibo/issues/27https://github.com/argumentcomputer/arecibo/issues/27 // nivc_prove_compressed_benchmarks } } diff --git a/examples/keccak.rs b/examples/keccak.rs index df93a02349..16eb639377 100644 --- a/examples/keccak.rs +++ b/examples/keccak.rs @@ -5,7 +5,7 @@ //! Declare a `CircomGadget` implementing a `reference` pointing to a valid Circom Gadget repository //! and an existing release `version`. If the `CircomCoprocessor` can not find it locally it will directly //! fetch the r1cs and wasm files from Github. When doing so, the files will be fetched from the repository -//! `https://github.com/lurk-lab/keccak-circom-gadget` and the release `v0.1.0`. +//! `https://github.com/argumentcomputer/keccak-circom-gadget` and the release `v0.1.0`. use bellpepper_core::boolean::{AllocatedBit, Boolean}; use bellpepper_core::num::AllocatedNum; use bellpepper_core::{ConstraintSystem, SynthesisError}; diff --git a/foil/Cargo.toml b/foil/Cargo.toml index ab5afc96de..ed3b7ef261 100644 --- a/foil/Cargo.toml +++ b/foil/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" authors = ["porcuquine "] description = "Flat Optimization Intermediate Language" -repository = "https://github.com/lurk-lab/lurk-rs" +repository = "https://github.com/argumentcomputer/lurk-rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/notes/reduction-notes.md b/notes/reduction-notes.md index 6ae7b1e587..d65a618705 100644 --- a/notes/reduction-notes.md +++ b/notes/reduction-notes.md @@ -3,7 +3,7 @@ This document contains general notes about the design, rationale, and implementation of the Lurk reduction step. For a more normalized (but still WIP) specification, see the [Eval Spec](eval.md) -The [Lurk Language Specification](https://github.com/lurk-lab/lurk/blob/master/spec/v0-1.md) defines evaluation +The [Lurk Language Specification](https://github.com/argumentcomputer/lurk/blob/master/spec/v0-1.md) defines evaluation semantics without specifying the internal data structures or computational steps which an implementation must use to calculate an evaluation. `lurk-rs` implements a concrete instance of the Lurk language for which proofs of correct evaluation can be generated. `lurk-rs` generates zk-SNARK proofs for multiple backends, and verification of these @@ -13,7 +13,7 @@ corresponding arithmetic circuit. The initial Lurk circuit implementation is spe Because the circuit must check the computation to be proved, many aspects of the implementation itself must be fully specified. The reference implementation of Lurk expression evaluation in -[`eval.rs`](https://github.com/lurk-lab/lurk-rs/blob/main/src/lem/eval.rs) provides an intermediate step between the +[`eval.rs`](https://github.com/argumentcomputer/lurk-rs/blob/main/src/lem/eval.rs) provides an intermediate step between the high-level specification and the low-level circuit. Not every aspect of the implementation is essential, but every part which directly corresponds to the layout of the constraint system is. @@ -29,10 +29,10 @@ This is true in three distinct ways: 3. When parallelizing synthesis (not currently implemented) of many logically sequential steps. Taking these one at a time: -1. Because the SNARK-friendly Poseidon hashes (provided by the [Neptune](https://github.com/lurk-lab/neptune) +1. Because the SNARK-friendly Poseidon hashes (provided by the [Neptune](https://github.com/argumentcomputer/neptune) library) are relatively expensive, and because Lurk does not provide explicit access to the hash values, we avoid computing them during evaluation -- instead relying on the - [Store](https://github.com/lurk-lab/lurk-rs/blob/main/src/lem/store.rs) to manage cheaper expression pointers in a way + [Store](https://github.com/argumentcomputer/lurk-rs/blob/main/src/lem/store.rs) to manage cheaper expression pointers in a way that preserves equality. All such pointers are resolved to content-addressable tagged hashes before circuit synthesis. The Store is used during synthesis when the preimage of a hash known at synthesis needs to be 'looked up'. @@ -44,7 +44,7 @@ Taking these one at a time: As a matter of interest, we note that the `lurk-rs` evaluator runs about 7x faster than the one implemented in [Common -Lisp](https://github.com/lurk-lab/lurk/blob/master/api/api.lisp). The latter's design does not target speed, and we +Lisp](https://github.com/argumentcomputer/lurk/blob/master/api/api.lisp). The latter's design does not target speed, and we make this observation only to support our suggestion that the `lurk-rs` evaluator performs well relative to the cost of proving. It makes sense to evaluate many frames at a time before proving because doing so is cheap. diff --git a/notes/soundness-notes.md b/notes/soundness-notes.md index aff7edbb95..9dec13c40e 100644 --- a/notes/soundness-notes.md +++ b/notes/soundness-notes.md @@ -100,10 +100,10 @@ the result of a previous commitment, then the committed value is already known. possible to find another such value-secret pair. In other words, if a proof of commitment opening can be created at all, then we claim that the private input used in the proof *must* have been one initially produced via `commit`. -We delegate this claim to [neptune](https://github.com/lurk-lab/neptune) -- Lurk's underlying Poseidon +We delegate this claim to [neptune](https://github.com/argumentcomputer/neptune) -- Lurk's underlying Poseidon implementation. Poseidon's cryptographic security is described in [the paper](https://eprint.iacr.org/2019/458.pdf), and `neptune`'s implementation has been -[audited](https://github.com/lurk-lab/neptune/blob/master/poseidon-in-filecoin-final-report.pdf). +[audited](https://github.com/argumentcomputer/neptune/blob/master/poseidon-in-filecoin-final-report.pdf). ### Implicit Commitments (expressions) @@ -158,7 +158,7 @@ from the expression. Immediate values are derived with the identity function, an their constituents (both type and value elements) using a hash of appropriate arity and a type-specific preimage layout. For example, an actual Lurk cons has type tag -[`0x01`](https://github.com/lurk-lab/lurk-rs/blob/a1242270a1285c15b7edb0ab1440f2247f950ead/src/store.rs#L2790), and its +[`0x01`](https://github.com/argumentcomputer/lurk-rs/blob/a1242270a1285c15b7edb0ab1440f2247f950ead/src/store.rs#L2790), and its value is `P4(t0, v0, t1, v1)` -- where `P4` is a 4-ary Poseidon hash, `t0` is the type tag of the first paired expression, `v0` is the value element of the first paired expression, `t1` is the type tag of the second paired expression, and `v1` is the value element of the second paired expression. diff --git a/src/coprocessor/circom/README.md b/src/coprocessor/circom/README.md index b645371c91..832289c91f 100644 --- a/src/coprocessor/circom/README.md +++ b/src/coprocessor/circom/README.md @@ -8,8 +8,8 @@ with this particular programing language. ## Overview There are two key components to have in mind when thinking about the Circom Coprocessor: -- `CircomCoprocessor`: The shim that exposes a Circom gadget as a Lurk Coprocessor. It leverages [`circom-scotia`](https://github.com/lurk-lab/circom-scotia) -to compile Circom-based circuits to [Bellpepper](https://github.com/lurk-lab/bellpepper), thus making them usable in our stack. +- `CircomCoprocessor`: The shim that exposes a Circom gadget as a Lurk Coprocessor. It leverages [`circom-scotia`](https://github.com/argumentcomputer/circom-scotia) +to compile Circom-based circuits to [Bellpepper](https://github.com/argumentcomputer/bellpepper), thus making them usable in our stack. - `CircomGadget`: The Circom gadget proper. Refers to the r1cs and wasm files compiled from the targeted circom circuit that will be used in our proving flow. Those compiled files can live either locally or in a Github release. @@ -36,7 +36,7 @@ For remote gadgets, the `CircomCoprocessor` will use the _reference_ of the `Ci Github repository. In this case, there are a few constraints that needs to be followed: 1. _reference_ format: **must** be formatted as `/` as would a Github repository 2. Compiled Circom files available in a release: the compiled circom files, r1cs and wasm, **must** be made available in an release -in the repository. To help fulfill this constraint, we provide [a template of a Gadget repository](https://github.com/lurk-lab/template-circom-gadget). +in the repository. To help fulfill this constraint, we provide [a template of a Gadget repository](https://github.com/argumentcomputer/template-circom-gadget). 3. Compiled Circom files names: The name of the compiled circom files **must** be the same as the repository (e.g.: `lurk-lab/keccak` -> `keccak.wasm` & `keccak.r1cs`). This effectively limits the number of circuit available per repository to one. 4. _version_ specification: As we are looking for file in a specific release the `CircomGadget` **must** be specified with diff --git a/src/proof/tests/nova_tests.rs b/src/proof/tests/nova_tests.rs index f5672b9f28..995c4b58e9 100644 --- a/src/proof/tests/nova_tests.rs +++ b/src/proof/tests/nova_tests.rs @@ -1851,7 +1851,7 @@ fn test_prove_fibonacci() { ); } -/// This test is a follow up to https://github.com/lurk-lab/lurk-rs/pull/931, +/// This test is a follow up to https://github.com/argumentcomputer/lurk-rs/pull/931, /// which reverts a PR that made the "parallel steps" flow break #[test] #[ignore]