Skip to content

docs(test-harness): record tester disable reasons; fix SSH submodule URLs and enable fixed-term-loan - #667

Draft
nebasuke wants to merge 6 commits into
mainfrom
tester-disable-reasons
Draft

docs(test-harness): record tester disable reasons; fix SSH submodule URLs and enable fixed-term-loan#667
nebasuke wants to merge 6 commits into
mainfrom
tester-disable-reasons

Conversation

@nebasuke

@nebasuke nebasuke commented Aug 19, 2026

Copy link
Copy Markdown
Member
  • Add disable reasons for disabled repositories in solx-tester
  • Did a quickfix for the synthetix repo.
  • Will follow-up with further fixes that need more logic.

Claude Summary

Record tester disable reasons; fix SSH submodule URLs and enable fixed-term-loan

The four undocumented disabled = true entries in the harness configs date back to the
configs' introduction (#110/#175) with no reason recorded anywhere — in git history, PR
bodies, or comments. This PR determines each reason empirically and records it, and fixes
the one that turned out not to be a solx limitation at all.

Disable reasons (first commit)

Each project was run through the harness prep (pragma pin, forge config --fix,
via_ir/evm_version strip) and built with solx 0.1.7 locally:

Project Reason
ens-contracts (Hardhat) Fork lacks solx wiring (no USE_SOLX/SOLX in its Hardhat config) and only enables solc 0.8.17/0.8.26, so the harness's >=0.8.34 pragma pin fails HHE909. The pinned lockfile also references @ensdomains/buffer@0.1.1, which has been unpublished from npm (registry now has 0.1.0 → 0.1.3), so it is uninstallable as pinned.
olympus (Hardhat) Fork lacks solx wiring; solc pinned to 0.8.15.
synthetix (Hardhat) Written in Solidity v0.4/v0.5 — below the solx version floor (same class as the documented lido-core disable).
fixed-term-loan (Foundry) A nested submodule pins an SSH URL, so the unauthenticated CI clone fails — see below. Not a solx limitation.

ens-contracts and olympus need fork-side work (solx wiring plus a version lift) before they
can be enabled; synthetix cannot be.

SSH submodule URL fix + enable fixed-term-loan (second commit)

maple-labs/fixed-term-loan pins maple-proxy-factory -> contract-test-utils to a
git@github.com: URL, which the harness's unauthenticated clone cannot fetch. The fix passes
-c url.https://github.com/.insteadOf=git@github.com: on the two submodule-touching git
invocations in clone_repository (the SHA-path submodule update and the --recurse-submodules
fallback). Per-process -c config propagates to nested submodule clones via
GIT_CONFIG_PARAMETERS; verified against the exact failing case at the same
--depth 1 --recursive shape the harness uses. Scoped per invocation — no global git config
mutation on runners or dev machines, and the main-repo fetch is unaffected (project URLs in
the configs are already https).

With the clone fixed, fixed-term-loan was its own validation: it compiles with solx 0.1.7 on
both codegens without the memory-safe-asm escape hatch and passes 270/270 tests on both
legs
(--fuzz-runs 0, FOUNDRY_INVARIANT_RUNS=1, seed 0xdeadbeef), so the project is
enabled. It is a lean repo — the test suites finish in ~100 ms — so integration runtime impact
is negligible; it will appear as new rows in the Foundry benchmark reports.

Testing

  • cargo check -p solx-dev clean.
  • Harness clone sequence replicated verbatim on a fresh clone with the rewrite: nested
    SSH-pinned submodule resolves via https, exit 0.
  • fixed-term-loan: builds on legacy and viaIR without EVM_DISABLE_MEMORY_SAFE_ASM_CHECK;
    270 passed / 0 failed on each codegen.
  • Needs a ci:integration run to see fixed-term-loan exercised in CI before merge.

nebasuke and others added 6 commits August 19, 2026 17:07
Project::try_from_solidity_output cloned every contract's parsed legacy
assembly into the translation path and retained the original even when
evm.legacyAssembly was not requested, and from_contract cloned the nested
runtime code before stripping it from the deploy assembly. Move the
assembly into translation by value, clone it only when the output selects
evm.legacyAssembly, and replace the clone-then-strip pair with
Assembly::take_runtime_code.

Output is byte-identical on the Graph Horizon legacy and via-IR replays.
The horizon legacy RSS peak is unchanged (9.6 GB): it is produced inside
solidity_compile while solc builds the standard JSON output, before solx
parses a single byte of it.
solc now emits evm.legacyAssembly as a compact JSON string (see
NomicFoundation/solx-solidity#174), so its response object no longer
accumulates every contract's assembly tree until the final dump.
materialize unwraps the string form; the plain object form stays
accepted. Graph Horizon legacy replay: main-process peak RSS
9.56 GB -> 3.89 GB, wall time ~48 s -> ~33 s, output byte-identical.
Pins the submodule to the tip of NomicFoundation/solx-solidity#174.
To be re-pinned to the merged 0.8.34 commit before this PR lands; until
then this PR hard-requires that branch (older libsolc still emits the
object form, which materialize also accepts, but the memory win only
exists with the string emission).
NomicFoundation/solx-solidity#174 landed as a squash whose tree is
identical to the previously pinned branch tip, so built artifacts are
unchanged; the gitlink now points at a commit reachable from 0.8.34.
The four undocumented 'disabled = true' entries date back to the configs'
introduction (#110/#175) with no reason recorded anywhere. Determined each
empirically by running the harness prep and build locally with solx 0.1.7:

- ens-contracts: the fork lacks solx wiring and only enables solc
  0.8.17/0.8.26, so the harness's >=0.8.34 pragma pin fails HHE909; the
  pinned lockfile also references @ensdomains/buffer@0.1.1, unpublished
  from npm.
- olympus: the fork lacks solx wiring; solc pinned to 0.8.15.
- synthetix: written in Solidity v0.4/v0.5, below the solx version floor
  (same class as lido-core).
- fixed-term-loan (Foundry): a nested submodule pins an SSH URL, so the
  unauthenticated CI clone fails. With an https insteadOf rewrite it
  compiles with solx and passes all 270 tests - a harness-side rewrite
  would let it be enabled.
… fixed-term-loan

Some projects pin submodules to git@github.com: URLs, which the harness's
unauthenticated CI clone cannot fetch. Pass an insteadOf rewrite via -c on
the submodule-touching git commands; per-process config propagates to nested
submodule clones through GIT_CONFIG_PARAMETERS, verified against the exact
failing case (fixed-term-loan -> maple-proxy-factory -> contract-test-utils,
--depth 1 --recursive).

That was fixed-term-loan's only blocker: with the rewrite in place it
compiles with solx 0.1.7 on both codegens without the memory-safe-asm escape
hatch and passes all 270 tests on both, so enable it.
@nebasuke
nebasuke force-pushed the tester-disable-reasons branch from 87191bb to ccc21af Compare August 19, 2026 15:07
@github-actions

Copy link
Copy Markdown

Coverage Summary

Crate Line Coverage Function Coverage
solx 🟡 72.7% 🔴 40.0%
solx-benchmark-converter 🔴 0.0% 🔴 0.0%
solx-codegen-evm 🟡 61.4% 🟡 62.2%
solx-compiler-downloader 🔴 0.0% 🔴 0.0%
solx-core 🟡 50.4% 🟡 63.5%
solx-dev 🔴 2.4% 🔴 3.0%
solx-evm-assembly 🟡 50.9% 🟡 54.5%
solx-solc-test-adapter 🔴 1.7% 🔴 2.1%
solx-standard-json 🟡 53.7% 🟡 57.5%
solx-tester 🔴 37.9% 🔴 35.7%
solx-utils 🟡 61.6% 🟡 60.0%
solx-yul 🟡 54.0% 🟡 60.4%
Total 🔴 36.9% 🔴 36.8%

Codecov Report | HTML Report | Workflow Run

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