Skip to content

Conversation

@icecrasher321
Copy link
Collaborator

Summary

is_diff and field_diffs should not be compared

Type of Change

  • Bug fix

Testing

Tested manually

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Jan 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
docs Skipped Skipped Jan 21, 2026 5:57am

Request Review

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 21, 2026

Greptile Summary

Fixed false positive change detection by excluding copilot-specific metadata fields (is_diff, field_diffs) from workflow state comparisons.

Key changes:

  • Added type definitions BlockWithDiffMarkers and SubBlockWithDiffMarker to handle optional copilot diff markers
  • Excluded is_diff and field_diffs from block-level comparisons (lines 91-92, 102-103)
  • Excluded is_diff from subBlock-level comparisons (lines 187-188)
  • Also excluded outputs field from block comparison as it's derived from subBlocks and already compared via subBlock logic (lines 90, 101)

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • The change correctly addresses a specific bug where copilot diff markers were causing false positive change detection. The implementation properly uses TypeScript type guards, follows existing destructuring patterns in the function, and maintains backward compatibility since the excluded fields are optional
  • No files require special attention

Important Files Changed

Filename Overview
apps/sim/lib/workflows/comparison/compare.ts Excluded copilot diff markers (is_diff, field_diffs) from change detection to prevent false positives when comparing workflow states

Sequence Diagram

sequenceDiagram
    participant User
    participant hasWorkflowChanged
    participant BlockState
    participant SubBlockState
    
    User->>hasWorkflowChanged: Compare current vs deployed state
    hasWorkflowChanged->>hasWorkflowChanged: Compare edges
    hasWorkflowChanged->>hasWorkflowChanged: Compare block IDs
    
    loop For each block
        hasWorkflowChanged->>BlockState: Cast to BlockWithDiffMarkers
        BlockState-->>hasWorkflowChanged: Block with optional is_diff, field_diffs
        hasWorkflowChanged->>hasWorkflowChanged: Destructure & exclude:<br/>position, layout, height, outputs,<br/>is_diff, field_diffs
        hasWorkflowChanged->>hasWorkflowChanged: Compare normalized blocks
        
        loop For each subBlock
            hasWorkflowChanged->>SubBlockState: Cast to SubBlockWithDiffMarker
            SubBlockState-->>hasWorkflowChanged: SubBlock with optional is_diff
            hasWorkflowChanged->>hasWorkflowChanged: Destructure & exclude:<br/>value, is_diff
            hasWorkflowChanged->>hasWorkflowChanged: Compare normalized subBlocks
        end
    end
    
    hasWorkflowChanged->>hasWorkflowChanged: Compare loops
    hasWorkflowChanged->>hasWorkflowChanged: Compare parallels
    hasWorkflowChanged->>hasWorkflowChanged: Compare variables
    hasWorkflowChanged-->>User: Return true/false
Loading

@icecrasher321 icecrasher321 merged commit fb90c4e into staging Jan 21, 2026
12 checks passed
waleedlatif1 added a commit that referenced this pull request Jan 21, 2026
* fix(google): wrap primitive tool responses for Gemini API compatibility (#2900)

* fix(canonical): copilot path + update parent (#2901)

* fix(rss): add top-level title, link, pubDate fields to RSS trigger output (#2902)

* fix(rss): add top-level title, link, pubDate fields to RSS trigger output

* fix(imap): add top-level fields to IMAP trigger output

* improvement(browseruse): add profile id param (#2903)

* improvement(browseruse): add profile id param

* make request a stub since we have directExec

* improvement(executor): upgraded abort controller to handle aborts for loops and parallels (#2880)

* improvement(executor): upgraded abort controller to handle aborts for loops and parallels

* comments

* improvement(files): update execution for passing base64 strings (#2906)

* progress

* improvement(execution): update execution for passing base64 strings

* fix types

* cleanup comments

* path security vuln

* reject promise correctly

* fix redirect case

* remove proxy routes

* fix tests

* use ipaddr

* feat(tools): added textract, added v2 for mistral, updated tag dropdown (#2904)

* feat(tools): added textract

* cleanup

* ack pr comments

* reorder

* removed upload for textract async version

* fix additional fields dropdown in editor, update parser to leave validation to be done on the server

* added mistral v2, files v2, and finalized textract

* updated the rest of the old file patterns, updated mistral outputs for v2

* updated tag dropdown to parse non-operation fields as well

* updated extension finder

* cleanup

* added description for inputs to workflow

* use helper for internal route check

* fix tag dropdown merge conflict change

* remove duplicate code

---------

Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>

* fix(ui): change add inputs button to match output selector (#2907)

* fix(canvas): removed invite to workspace from canvas popover (#2908)

* fix(canvas): removed invite to workspace

* removed unused props

* fix(copilot): legacy tool display names (#2911)

* fix(a2a): canonical merge  (#2912)

* fix canonical merge

* fix empty array case

* fix(change-detection): copilot diffs have extra field (#2913)

* improvement(logs): improved logs ui bugs, added subflow disable UI (#2910)

* improvement(logs): improved logs ui bugs, added subflow disable UI

* added duplicate to action bar for subflows

* feat(broadcast): email v0.5 (#2905)

---------

Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
Co-authored-by: Emir Karabeg <78010029+emir-karabeg@users.noreply.github.com>
@waleedlatif1 waleedlatif1 deleted the fix/deploy-diff branch January 22, 2026 01:20
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