Skip to content

chore: sync upstream contracts (2026-10-12) - tests failing, review required - #50

Merged
gvladika merged 7 commits into
mainfrom
sync/upstream-2026-10-12-29-1
Oct 12, 2026
Merged

gvladika merged 7 commits into
mainfrom
sync/upstream-2026-10-12-29-1

Conversation

@lifi-contracts-tron-sync

Copy link
Copy Markdown

Automated sync from lifinance/contracts@5a80fc3f merged cleanly but the
forge test suite FAILED against the merge result, so it was not merged into
main. Test log: https://github.com/lifinance/contracts-tron/actions/runs/38213195713

This branch carries upstream's history as-is, with no bot-authored commit, so
every commit on it is already signed.

The failure lives in the merge, not in this branch's own history. The branch
is upstream/main verbatim and carries none of the fork delta - the breakage
only appears once it is combined with main, which is exactly what the checks
below are running (pull_request checks build the merge ref, not the branch
tip). Reproduce it the same way before fixing anything:

git fetch origin
git checkout sync/upstream-2026-10-12-29-1
git merge origin/main --no-edit   # this is the tree the suite failed against
forge test

Fix the breakage on this branch (or coordinate an upstream fix), then merge via
the normal review process.

Important

Merge this PR with a merge commit. Squash and rebase drop the upstream
parent, so the merge base never advances and every later sync re-conflicts
on the entire fork delta.

See the Notion 'Tron deployments' page (section: The contracts-tron Fork) and
EXSC-587/EXSC-603 for the sync rules.

gvladika and others added 7 commits October 7, 2026 12:10
…ifinance#2531)

Since lifinance#2521 the fork mints no manifest and keeps upstream's
buildAttestations.json byte for byte. Say so in the new-dev checklist,
and note how to keep the pre-commit prettier hook off the Tron bypass
when committing a sync-conflict resolution locally.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e#2528)

* chore(deps): add oxlint and oxlint-tsgolint, drop unused eslint deps

Pin oxlint 1.86.0 and oxlint-tsgolint 7.0.2003 (both >=7 days old).
Remove eslint-config-prettier and eslint-import-resolver-typescript,
used only by .eslintrc.cjs, which EXSC-1105 replaces.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(lint): run the main TS/JS lint on oxlint instead of ESLint 8

Replace .eslintrc.cjs with .oxlintrc.json (oxlint + oxlint-tsgolint for
the type-aware rules) and port @typescript-eslint/naming-convention as
the local lifi/naming-convention JS-plugin rule. The plugin honours the
existing `eslint-disable-next-line @typescript-eslint/naming-convention`
directives, which oxlint would otherwise map to a rule it does not have.

lint-staged now runs the Safe-proposal funnel fence as its own entry,
since no main config extends it any more. Both fences stay on ESLint.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(scripts): resolve the findings oxlint reports on the current tree

- return-await (in-try-catch): await the proposal inside the drain's
  try/finally blocks so `draining` and the queue are released only after
  it settles; drop the redundant await in catch blocks with no finally
- import/no-duplicates: merge the two `viem` imports in demoEco.ts and
  diamond-cut-calls.ts
- await-thenable: make the Promise.all mapper in
  checkOffboardingStatusPerNetwork.ts async so every element is a promise
- no-unsafe-optional-chaining: bind the optional-chain result in two
  tests before writing to or calling it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs: point the agent rules and docs at oxlint for the main lint

The rules that named `.eslintrc.cjs` or `bunx eslint` for TS/JS now name
`.oxlintrc.json` and `bunx oxlint --type-aware`. Prose about the two
fences still says ESLint, since they stay on it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(funnel-fence): fail clearly when the lint-staged fence entry is missing

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(lint): pin legacy-directive and edge cases of the naming rule

- Cover eslint-disable-line, rule lists, a `--` reason, a directive for
  another rule and a directive two lines up, plus empty-remainder names
  (`I`, `Enum`) and an underscore before the `Enum` suffix
- Run the TS test lane when only .oxlintrc.json changes
- Name oxlint instead of a bare `bunx eslint` in the facet-removal plan

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(lint): fail on deprecated APIs with typescript/no-deprecated

import/no-deprecated was an error under ESLint; its oxlint replacement
was a warning, so new uses of deprecated APIs passed CI. Make it an
error and clear the existing uses:

- viem getBytecode -> getCode (alias, same behavior)
- MongoDB cursor.forEach -> for await...of
- TS ImportClause.isTypeOnly -> phaseModifier === TypeKeyword
- Mayan SDK amount in demoMayan.ts: suppressed with a reason, since
  amountIn64 changes the quote request

demoMayanSolana.ts is exempted by a config override instead of an
inline directive: it already fails the type check on main, so any edit
to it fails the commit hook and validate-scripts. EXSC-1192 repairs it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(lint): enable import/named for JS files

plugin:import/recommended ran import/named on JS files, and
import/typescript turned it off for TS (the type checker covers it).
oxlint has the rule; restore the same split.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, robinhood (EXSC-1086) (lifinance#2529)

* chore(deploy): roll out PaxosTransitFacet v2.0.0 (EXSC-1086)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(deploy): sync diamond logs after PaxosTransitFacet v2.0.0 cut (EXSC-1086)

Regenerate the production diamond logs of mainnet, arbitrum and
robinhood from the loupe after the timelock operations executed. Keep
the DiamondCutFacet/DiamondLoupeFacet 1.0.0 versions from EXSC-1178:
their MongoDB rows carry no version, so the regeneration blanks them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Daniela Chybisova <iron.melmel@gmail.com>
…nce#2534)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ifinance#2535)

* chore(deploy): deploy LayerSwapFacet v1.0.0 to etherlink (EXSC-1194)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(deploy): sync etherlink diamond log after LayerSwapFacet cut (EXSC-1194)

Regenerate the production diamond log of etherlink from the loupe after
the timelock operation executed.

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Daniela Chybisova <iron.melmel@gmail.com>
…97) (lifinance#2537)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… crash notices (EXSC-1196) (lifinance#2536)

* fix(ci): retry timelock watcher bun install and name the failing step in its crash notice (EXSC-1196)

node-hid's prebuilt download times out intermittently, and its source
fallback cannot build on the runner, so `bun install` failed the watcher
run and posted a crash notice that did not say why.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(ci): make the bun install retry real and harden the crash-notice error line (EXSC-1196)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@lifi-contracts-tron-sync
lifi-contracts-tron-sync Bot requested a review from a team October 12, 2026 06:45
@lifi-action-bot
lifi-action-bot marked this pull request as draft October 12, 2026 06:45
@gvladika
gvladika marked this pull request as ready for review October 12, 2026 07:29
@gvladika
gvladika merged commit 2a740d0 into main Oct 12, 2026
84 of 86 checks passed
@gvladika
gvladika deleted the sync/upstream-2026-10-12-29-1 branch October 12, 2026 10:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants