Skip to content

chore: sync upstream contracts (2026-10-07) - conflicts need resolution [PaxosTransitFacet v2.0.0, IPaxosTransit v1.1.0] - #49

Merged
gvladika merged 11 commits into
mainfrom
sync/upstream-2026-10-07-28-1
Oct 7, 2026
Merged

gvladika merged 11 commits into
mainfrom
sync/upstream-2026-10-07-28-1

Conversation

@lifi-contracts-tron-sync

Copy link
Copy Markdown

Automated sync from lifinance/contracts@da1ebbcd hit merge conflicts.

This branch carries upstream's history as-is - the conflict markers were NOT
committed - so every commit on it is already signed. Resolve by merging
main into the branch and pushing a signed resolution:

git fetch origin
git checkout sync/upstream-2026-10-07-28-1
git merge origin/main   # resolve the conflicts listed below in your editor
git add -u              # required: git commit refuses while paths are unmerged
git commit -S --no-edit
git push

git add -u stages every resolved path, including deletions, without sweeping
in the .orig backups git mergetool leaves behind - this repo's
.gitignore does not cover them, so git add -A would commit them.

Conflicting paths:

script/deploy/resources/buildAttestations.json

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 10 commits October 5, 2026 09:50
…nce#2502)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* ci(validate-scripts): run repo-wide bun lint:js after artifact generation

Generate diamond.json after the TypeChain step so every generated import
resolves, then lint the whole TS/JS tree. Trigger the job on changes to
.eslintrc.cjs, .eslintignore and tsconfig.eslint.json. Add a test that
pins the step order, path filter and aggregator wiring (EXSC-1153).

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

* test(safe): use a fixture-only getter in calldata-effect-lines

The artifact cases used LIFI_INTENT_ESCROW_SETTLER_V2(), a real getter.
Once diamond.json is generated (bun build:typechain-and-abi), the
selector registry names it from there, so the removal case failed and
the artifact case passed without reading the artifact.

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

* ci(validate-scripts): trigger on the funnel-fence config lint:js extends

.eslintrc.cjs extends .eslintrc.funnel-fence.cjs, so a change to it
alone changes what bun lint:js enforces.

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

* ci(validate-scripts): close gaps in the lint gate and its guard test

- Run the TS suite when validateScripts.yml changes, so the guard test
  runs on the PRs that can break it
- Trigger validate-scripts when a src/, config/ or deployments/ file is
  deleted or renamed, since scripts import from those trees
- Keep running "Validate scripts" after a lint failure, unless artifact
  generation failed
- Parse the workflow with Bun.YAML in the guard test and fail when the
  lint step is commented out or gated by an `if:`

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

---------

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

* chore(deploy): add PaxosTransitFacet v1.0.0 to arbitrum staging (EXSC-1156)

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

* chore(deploy): deploy PaxosTransitFacet v1.0.0 to arbitrum prod (EXSC-1156)

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

* chore(deploy): sync arbitrum prod diamond log after PaxosTransitFacet cut (EXSC-1156)

---------

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

* ci: skip timelock and Slack-posting cron workflows on forks

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

* ci: note the fork guard in the timelock watcher header

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

* ci: guard types and env reminder on forks, document the fork guard rule

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

* ci: guard the louper-v3 PR workflow on forks

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

* ci: correct the louper fork-guard comment (EXSC-1180)

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

* chore(factory): own the repo's prepare and verify config

Add the repo: block from the factory's bootstrap copy (v0.1.6), with
verify.lint set to null. The bootstrap ran a bare 'bunx eslint', which
fails once .eslintrc.cjs is gone (EXSC-1105). The lint-staged suite
already runs the branch's own pre-commit lint over the whole branch.

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

* chore(factory): run forge build when Foundry config or libs change

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

* chore(factory): restore the Zeus qa block in the repo config

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

---------

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

* chore(deployments): backfill legacy Cut/Loupe facet versions (EXSC-1178)

Set DiamondCutFacet 0xf7993A8d and DiamondLoupeFacet 0xF5ba8Db6 to
1.0.0 in the diamond logs of mainnet, arbitrum, bsc, polygon,
optimism, gnosis, boba, cronos, fuse and mode, and add the matching
production entries to the master log. Each version comes from a
runtime-bytecode match (metadata stripped, no immutables) against a
build at 249fdae, the commit that set @Custom:version 1.0.0.

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

* chore(deployments): drop master-log backfill (EXSC-1178)

The health check resolves facet versions from <network>.diamond.json
first; the repo master log is a stale MongoDB snapshot, and hand-added
records there risk overwriting MongoDB on mongo-logs:sync.

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

---------

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

* chore(deploy): pin Chainflip and ThorSwap facets to deployed versions (EXSC-1170)

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

* test(target-state): grade a committed pin; drop stale no-pins notes

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

---------

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

* ci(attestations): run the build manifest workflow upstream only (EXSC-1167)

contracts-tron syncs this workflow, and its Tron LibAsset bypass compiles
into nearly every facet, so the fork's manifest differs from upstream's on
every version change and every such sync conflicts on
buildAttestations.json. Guard both jobs to lifinance/contracts; the fork
keeps upstream's manifest byte-identical. Nothing reads the manifest yet,
and gate K grades Tron by rebuilding at the record's commit.

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

* docs(attestations): correct what the fork has and how lookups fall back

The fork carries upstream's attested manifest, so only builds that compile
the Tron bypass lack an entry, and a future lookup must rebuild on any miss
rather than per network. Name gate K as the sign-time codehash gate, note
the repo guard as a deliberate skip, say why mint repeats it, and fix the
BuildRepo comment that said the minter runs in both repos.

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

* docs(attestations): say upstream's attestation covers the fork's copy

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

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…TransitFacet v2.0.0, IPaxosTransit v1.1.0] (lifinance#2512)

* feat(PaxosTransitFacet): support same-chain orders (EXSC-1086)

Allow bridgeData.destinationChainId == block.chainid, require it to
agree with the quote's destEID == TransitStation.thisChainEID(), and
reject a non-zero nativeFee on same-chain orders, which the station
queues locally and rejects when native value is attached.

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

* refactor(PaxosTransitFacet): move modifier into a Modifiers section

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

* fix(PaxosTransitFacet): validate same-chain mode before deposit/swap

Move the same-chain consistency and nativeFee checks into
_validateSameChainMode, called at the start of both entrypoints so a
bad swap-path order reverts before any swap runs. Add swap-path and
third-chain mismatch tests, fix stale docs, regenerate the build
attestation manifest for PaxosTransitFacet 1.1.0.

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

* perf(PaxosTransitFacet): cache station thisChainEID as immutable

Read TRANSIT_STATION.thisChainEID() once in the constructor instead of
on every order. Register THIS_CHAIN_EID as a derived immutable and
regenerate the build attestation manifest.

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

* chore(PaxosTransitFacet): bump version to 2.0.0

The same-chain guards add new reverts on both existing entrypoints,
which [CONV:VERSIONING] classes as MAJOR.

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

* refactor(PaxosTransitFacet): prefix chain EID getter with facet name

THIS_CHAIN_EID() is a generic selector; a later facet exposing the same
getter would take it over in buildDiamondCut and uninstall the rest of
PaxosTransitFacet ([CONV:FACET-SELECTORS]). Rename it to
PAXOS_TRANSIT_THIS_CHAIN_EID.

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

* test(PaxosTransitFacet): prefix test interface params with underscore

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

* chore(audit): add PaxosTransitFacet v2.0.0 audit report (EXSC-1086)

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

---------

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

* docs(post-pr-for-review): tag reviewer group by touched paths [EXSC-1187]

Routine contracts PRs tag @api_expansion-squad; PRs touching src/,
script/deploy/safe/ or script/emergency/ tag @smartcontract_core,
matching the new main-protection required_reviewers.

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

* docs(post-pr-for-review): pipefail-safe path check, README tag [EXSC-1187]

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

* docs(agents): keep README table diff to the post-pr-for-review row [EXSC-1187]

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

* docs(post-pr-for-review): stop on failed files lookup [EXSC-1187]

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 7, 2026 08:54
…-07-28-1

Take upstream's buildAttestations.json byte for byte (EXSC-1116). Since
lifinance#2521 the fork mints no manifest of its own, so the file
stays identical to upstream and later syncs stop conflicting on it.

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

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

🩺 Health-check invariants reminder

This PR changes a facet or periphery contract but does not touch
script/deploy/healthCheckInvariants.ts. Please confirm whether the daily
health-check registry needs an invariant added, adjusted, or removed
(new binding/authorization/owner relationship, a removed contract, or changed
struct/owner semantics). See rule 601-healthcheck-invariants for the checklist.

If no invariant change is needed, you can ignore this — it is a reminder, not a gate.

@lifi-action-bot lifi-action-bot changed the title chore: sync upstream contracts (2026-10-07) - conflicts need resolution chore: sync upstream contracts (2026-10-07) - conflicts need resolution [PaxosTransitFacet v2.0.0, IPaxosTransit v1.1.0] Oct 7, 2026
@gvladika
gvladika merged commit 1b0d89a into main Oct 7, 2026
52 of 53 checks passed
@gvladika
gvladika deleted the sync/upstream-2026-10-07-28-1 branch October 7, 2026 10:10
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