Skip to content

fix(deploy): correct LiFiIntentEscrowFacetV2 target state (EXSC-744) - #2181

Merged
gvladika merged 1 commit into
mainfrom
feature/exsc-744-_targetstatejson-pins-lifiintentescrowfacetv2-at-112-on-all
Aug 7, 2026
Merged

fix(deploy): correct LiFiIntentEscrowFacetV2 target state (EXSC-744)#2181
gvladika merged 1 commit into
mainfrom
feature/exsc-744-_targetstatejson-pins-lifiintentescrowfacetv2-at-112-on-all

Conversation

@gvladika

@gvladika gvladika commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Which Linear task belongs to this PR?

Fixes EXSC-744

Why did I implement it this way?

script/deploy/_targetState.json pinned LiFiIntentEscrowFacetV2 at 1.1.2 on every production network — a leftover from the V1→V2 rename (#2164) that carried over the old LiFiIntentEscrowFacet version, even though src/Facets/LiFiIntentEscrowFacetV2.sol declares 1.0.0 and every deployment is 1.0.0. Target state is meant to answer "what should be deployed where", so both the wrong version and the wrong network set (implying the facet runs everywhere) made drift checks meaningless for this facet. I corrected the version to 1.0.0 and scoped the entry to the exact set of networks where the facet is registered in the diamond, cross-checked against the .diamond.json deployment logs: arbitrum, arc, base, bsc, jovay, katana, mainnet, megaeth, optimism, pharos, polygon, robinhood (12). jovay was registered on-chain but missing from target state, so it was added; the entry was removed from the 58 production networks where the facet is not deployed. Staging was left untouched — arbitrum/base have the facet cut into their staging diamonds but no staging target-state block exists at all, which is a broader all-facets gap tracked separately. The edit was done as a line-level transform rather than a JSON round-trip on purpose: the file contains a pre-existing duplicate injective key that a parse/serialize cycle would silently collapse. No impact on the EXSC-736 rollout — the deploy framework reads the version from the source @custom:version, not from target state.

Checklist before requesting a review

Checklist for reviewer (DO NOT DEPLOY and contracts BEFORE CHECKING THIS!!!)

  • I have checked that any arbitrary calls to external contracts are validated and or restricted
  • I have checked that any privileged calls (i.e. storage modifications) are validated and or restricted
  • I have ensured that any new contracts have had AT A MINIMUM 1 preliminary audit conducted on by <company/auditor>

Version was pinned at 1.1.2 (leftover from the V1->V2 rename) on all
production networks while src and every deployment are 1.0.0. Correct the
version and scope the entry to the 12 networks where the facet is actually
registered in the diamond; add the missing jovay entry.

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

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Updated production deployment state for LiFiIntentEscrowFacetV2. Retained entries now use version 1.0.0, obsolete entries were removed, and jovay received a new entry.

Changes

Production deployment state

Layer / File(s) Summary
Network deployment entry updates
script/deploy/_targetState.json
Retained LiFiIntentEscrowFacetV2 entries now use version 1.0.0. Obsolete entries were removed. jovay now includes version 1.0.0.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: AuditNotRequired

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the deployment target-state correction and references the related task.
Description check ✅ Passed The description includes the task, implementation rationale, scope, validation details, and required checklist sections.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/exsc-744-_targetstatejson-pins-lifiintentescrowfacetv2-at-112-on-all

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.

@lifi-action-bot
lifi-action-bot marked this pull request as draft August 6, 2026 13:31
@gvladika
gvladika marked this pull request as ready for review August 6, 2026 13:33
@gvladika
gvladika enabled auto-merge (squash) August 6, 2026 13:38
@lifi-qa-agent

lifi-qa-agent Bot commented Aug 7, 2026

Copy link
Copy Markdown

🔍 QA Review — EXSC-744_targetState.json LiFiIntentEscrowFacetV2 version/network fix

PR: #2181 — fix(deploy): correct LiFiIntentEscrowFacetV2 target state (EXSC-744)
Reviewer: lifi-qa-agent[bot] | Date: 2026-08-07 | Type: 🆕 First review


What this ticket does

Corrects two inaccuracies in script/deploy/_targetState.json for LiFiIntentEscrowFacetV2:

  1. Wrong version — the file listed 1.1.2 (a leftover from the V1→V2 rename in chore(facets): deprecate LiFiIntentEscrowFacet (EXSC-729) #2164), while src/Facets/LiFiIntentEscrowFacetV2.sol declares @custom:version 1.0.0 and every production deployment is 1.0.0.
  2. Wrong network set — the entry was present on all 68 networks implying universal deployment, when the facet runs on exactly 12 networks (arbitrum, arc, base, bsc, jovay, katana, mainnet, megaeth, optimism, pharos, polygon, robinhood).

Acceptance Criteria check

# Criterion Status
AC-1 Version corrected to 1.0.0 ✅ Done — 12 entries updated from 1.1.21.0.0
AC-2 Removed from networks where facet is not deployed ✅ Done — 69 removals; reduced from 68 to 12 networks
AC-3 Intended network list confirmed before pruning ✅ Done — PR body explicitly documents cross-check against .diamond.json deployment logs

Code review

script/deploy/_targetState.json (+12 / −69)

Version correction (verified):
@custom:version 1.0.0 confirmed in src/Facets/LiFiIntentEscrowFacetV2.sol HEAD. The fix from 1.1.2 to 1.0.0 across all 12 retained networks is correct.

Network set (verified):
12 networks retained: arbitrum, arc, base, bsc, jovay, katana, mainnet, megaeth, optimism, pharos, polygon, robinhood. The 69 removals correctly remove entries from all networks where the facet is not registered. jovay was correctly added — it was deployed and registered in the diamond but absent from the old (already-wrong) 1.1.2 list, so adding it here is a net accuracy improvement.

Technique — line-level transform instead of JSON round-trip (correct):
The PR body explains why JSON parse+serialize was deliberately avoided: _targetState.json contains a pre-existing duplicate injective key that a round-trip would silently collapse. The line-level edit correctly avoids mutating unrelated content. ✅

Staging gap (noted, out of scope):
Developer notes that arbitrum and base staging diamonds have the facet cut in but no staging target-state block exists at all — a broader all-facets gap tracked separately. This is correct to flag but correct to leave for a separate issue. Not a blocker here.

AuditNotRequired label: Appropriate — this is a pure configuration JSON change with no contract code or ABI modifications. CI correctly applied this label.


Ticket coverage

Category Assessment
Version fix ✅ Fully addressed
Network set correction ✅ Fully addressed
Test coverage N/A — config JSON; no unit tests required
Documentation/PR description ✅ Thorough; lists all 12 networks, explains jovay addition, notes staging gap and duplicate-key concern

Overall ticket coverage: Complete


Downstream impact

_targetState.json is read by drift-check tooling to determine "what should be deployed where." Before this fix, any drift check for LiFiIntentEscrowFacetV2 was meaningless: it would report false alarms on 56 networks (showing facet "missing" where it was never intended) and would not catch a real version drift on the 12 real networks. After this fix, drift checks for this facet are actionable again. No impact on the EXSC-736 rollout — as the developer notes, the deploy framework reads @custom:version from source, not from target state.


✅ Verdict: Pass

This is a precise, well-reasoned correction that fully addresses both ticket conditions. The implementation is minimal, non-destructive, and the approach (line-level transform, avoiding JSON round-trip) is correct given the pre-existing data quality issue in the file. The network list was cross-checked against deployment logs before pruning, satisfying the ticket's pre-condition for pruning.


🤖 Automated QA review by lifi-qa-agent[bot]Zeus QA System

@lifi-qa-agent lifi-qa-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

QA Pass — config correction is correct, version verified against @Custom:version 1.0.0, network list cross-checked against deployment logs. ✅

@gvladika
gvladika merged commit 35afc49 into main Aug 7, 2026
71 of 75 checks passed
@gvladika
gvladika deleted the feature/exsc-744-_targetstatejson-pins-lifiintentescrowfacetv2-at-112-on-all branch August 7, 2026 07:07
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.

3 participants