Skip to content

chore: remove hash history#12183

Merged
jordanrfrazier merged 4 commits intomainfrom
remove-hash-histories
Mar 16, 2026
Merged

chore: remove hash history#12183
jordanrfrazier merged 4 commits intomainfrom
remove-hash-histories

Conversation

@jordanrfrazier
Copy link
Collaborator

@jordanrfrazier jordanrfrazier commented Mar 13, 2026

Custom component checks will be done directly through the component index. Removing hash history as it no longer fits into any planned functionality.

Summary by CodeRabbit

Release Notes

  • Chores

    • Removed component hash history tracking system and associated infrastructure
    • Removed build scripts, test files, and asset files related to hash history functionality
    • Simplified nightly build workflow by eliminating auxiliary merge and validation jobs
  • Refactor

    • Streamlined component metadata handling to improve processing efficiency

Custom component checks will be done directly through the
component index. Removing hash history as it no longer
fits into any planned functionality.
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 13, 2026

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5fc00fe9-4109-443d-85d7-692b1aa2f211

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

The changes comprehensively remove hash history build infrastructure and related components. This includes deleting the build_hash_history.py script, hash history build and merge jobs from the nightly GitHub workflow, related test files, the stable_hash_history.json asset, and hash history field handling from component metadata processing.

Changes

Cohort / File(s) Summary
CI/Workflow Changes
.github/workflows/nightly_build.yml
Removed build-hash-history and merge-hash-history-to-main jobs entirely. Simplified release-nightly-build dependencies and conditionals. Updated slack-notification job to remove references to removed jobs and failure detection logic.
Build Infrastructure
scripts/build_hash_history.py, Makefile
Deleted entire build_hash_history.py script (version detection, hash history loading/saving, component import, update and validation logic). Removed invocation of build_hash_history.py from Makefile's build_component_index target.
Test Suite Cleanup
src/backend/tests/unit/test_build_hash_history.py, src/backend/tests/unit/test_initial_setup.py, src/backend/tests/unit/test_starter_projects_no_hash_history.py
Removed entire test files: unit tests for hash history building/validation, tests verifying hash_history field stripping from component metadata, and tests validating absence of hash_history in starter project JSONs.
Data Assets and Configuration
src/lfx/src/lfx/_assets/stable_hash_history.json, .secrets.baseline
Deleted stable_hash_history.json asset file (1,807 lines). Removed large baseline block containing hex entropy string entries for the deleted asset from secrets baseline.
Metadata Handling
src/backend/base/langflow/initial_setup/setup.py
Removed logic that stripped hash_history field from component metadata during flattening of all_types_dict.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 7
✅ Passed checks (7 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'chore: remove hash history' is clear, specific, and accurately describes the main change across all modified files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Test Coverage For New Implementations ✅ Passed This PR is a feature removal/cleanup PR with no new functionality, making test coverage requirements not applicable. Associated test files were properly removed.
Test Quality And Coverage ✅ Passed This PR removes hash history functionality entirely and is not applicable to the custom check which evaluates test quality for new implementations.
Test File Naming And Structure ✅ Passed The PR appropriately removes test files and test cases that directly tested the deleted hash_history feature. No remaining references to hash_history exist in the backend codebase, validating that these test removals are justified. The remaining tests follow proper patterns and test actual functions that still exist in the codebase.
Excessive Mock Usage Warning ✅ Passed PR improves test design by removing files with excessive mocking of internal components, while remaining tests appropriately mock only external dependencies.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch remove-hash-histories
📝 Coding Plan
  • Generate coding plan for human review comments

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 and usage tips.

Tip

CodeRabbit can use your project's `ruff` configuration to improve the quality of Python code reviews.

Add a Ruff configuration file to your project to customize how CodeRabbit runs ruff.

@github-actions github-actions bot added the lgtm This PR has been approved by a maintainer label Mar 13, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Mar 13, 2026

Frontend Unit Test Coverage Report

Coverage Summary

Lines Statements Branches Functions
Coverage: 24%
24.17% (8626/35678) 16.93% (4757/28093) 16.91% (1264/7474)

Unit Test Results

Tests Skipped Failures Errors Time
2779 0 💤 0 ❌ 0 🔥 44.861s ⏱️

@codecov
Copy link

codecov bot commented Mar 13, 2026

Codecov Report

❌ Patch coverage is 41.66667% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 38.48%. Comparing base (1dafc75) to head (d0143ca).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
src/lfx/src/lfx/base/models/unified_models.py 41.66% 7 Missing ⚠️

❌ Your project status has failed because the head coverage (44.41%) is below the target coverage (60.00%). You can increase the head coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main   #12183      +/-   ##
==========================================
- Coverage   38.50%   38.48%   -0.02%     
==========================================
  Files        1630     1630              
  Lines       80458    80456       -2     
  Branches    12152    12152              
==========================================
- Hits        30977    30964      -13     
- Misses      47731    47741      +10     
- Partials     1750     1751       +1     
Flag Coverage Δ
backend 57.33% <ø> (-0.05%) ⬇️
frontend 21.59% <ø> (ø)
lfx 44.41% <41.66%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/backend/base/langflow/initial_setup/setup.py 51.38% <ø> (-1.65%) ⬇️
src/lfx/src/lfx/base/models/unified_models.py 29.50% <41.66%> (ø)

... and 7 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/nightly_build.yml:
- Around line 218-220: The workflow condition uses always() which bypasses
implicit success gating and only checks frontend-tests and backend-unit-tests
for != 'failure', allowing runs after cancelled/skipped jobs and not checking
create-nightly-tag at all; update the if expression to require explicit success
for all prerequisites (e.g., ensure needs.create-nightly-tag.result == 'success'
&& needs.frontend-tests.result == 'success' && needs.backend-unit-tests.result
== 'success') and remove the always() call so the release job only runs when
each listed need succeeded.
- Around line 237-242: Update the job-level if expression and the "Send failure
notification to Slack" step if expression to also check for the 'cancelled'
result alongside 'failure' and 'success'; specifically, add checks for
needs.release-nightly-build.result == 'cancelled', needs.frontend-tests.result
== 'cancelled', and needs.backend-unit-tests.result == 'cancelled' in the outer
job if and add the same 'cancelled' checks in the step's if so cancelled jobs
will trigger the Slack notification for the "Send failure notification to Slack"
step.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9fe692ed-32fa-4e9a-9c06-193a16ce8bfd

📥 Commits

Reviewing files that changed from the base of the PR and between ba8dab1 and 643ae2e.

📒 Files selected for processing (9)
  • .github/workflows/nightly_build.yml
  • .secrets.baseline
  • Makefile
  • scripts/build_hash_history.py
  • src/backend/base/langflow/initial_setup/setup.py
  • src/backend/tests/unit/test_build_hash_history.py
  • src/backend/tests/unit/test_initial_setup.py
  • src/backend/tests/unit/test_starter_projects_no_hash_history.py
  • src/lfx/src/lfx/_assets/stable_hash_history.json
💤 Files with no reviewable changes (7)
  • src/backend/tests/unit/test_initial_setup.py
  • scripts/build_hash_history.py
  • src/backend/base/langflow/initial_setup/setup.py
  • src/lfx/src/lfx/_assets/stable_hash_history.json
  • Makefile
  • src/backend/tests/unit/test_starter_projects_no_hash_history.py
  • src/backend/tests/unit/test_build_hash_history.py

Comment on lines +218 to +220
if: github.repository == 'langflow-ai/langflow' && always() && needs.frontend-tests.result != 'failure' && needs.backend-unit-tests.result != 'failure'
name: Run Nightly Langflow Build
needs: [create-nightly-tag, frontend-tests, backend-unit-tests, build-hash-history]
needs: [create-nightly-tag, frontend-tests, backend-unit-tests]
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat -n .github/workflows/nightly_build.yml | sed -n '210,250p'

Repository: langflow-ai/langflow

Length of output: 2640


🌐 Web query:

GitHub Actions job result states needs condition always() function

💡 Result:

In GitHub Actions, jobs that use needs: are implicitly gated by a status-check: if your job-level if: expression doesn’t include a status-check function, GitHub automatically adds success()—so the job won’t run if any needed job failed/cancelled/skipped, even if your custom condition would otherwise be true. GitHub’s docs call this out: you must include a status-check function (like always(), failure(), etc.) to override that default behavior. [1]

That’s why you often see patterns like:

jobs:
  downstream:
    needs: [build]
    if: ${{ always() && needs.build.result == 'skipped' }}

always() forces evaluation even when needs.build didn’t succeed. [1]

If you don’t want the downstream job to run when the workflow is cancelled, use cancelled() in the condition (still counts as a status-check function), e.g.:

if: ${{ !cancelled() && (needs.build.result == 'success' || needs.build.result == 'skipped') }}

needs.<job_id>.result can be success, failure, cancelled, or skipped. [2] And note that if: always() will keep running even during cancellation unless you guard against it. [3]

Sources
[1] GitHub Docs – Evaluate expressions / default success() behavior: https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/evaluate-expressions-in-workflows-and-actions
[2] GitHub Community (quoting docs) – needs.<job_id>.result values: https://github.com/orgs/community/discussions/45058
[3] GitHub Docs – Cancellation behavior and if: always(): https://docs.github.com/actions/reference/workflow-cancellation-reference


Require successful prerequisites before releasing; always() bypasses default dependency checks.

Line 218's condition uses always() and only excludes failure, but needs.<job>.result can also be cancelled or skipped. Because always() overrides the implicit success() check that normally gates dependent jobs, this allows release-nightly-build to proceed after a cancelled test job, or after a failed create-nightly-tag (which is never checked despite being listed in needs). To ensure releases only run after successful prerequisites:

Suggested guard
   release-nightly-build:
-    if: github.repository == 'langflow-ai/langflow' && always() && needs.frontend-tests.result != 'failure' && needs.backend-unit-tests.result != 'failure'
+    if: >-
+      github.repository == 'langflow-ai/langflow' &&
+      always() &&
+      needs.create-nightly-tag.result == 'success' &&
+      contains(fromJSON('["success","skipped"]'), needs.frontend-tests.result) &&
+      contains(fromJSON('["success","skipped"]'), needs.backend-unit-tests.result)
     name: Run Nightly Langflow Build
     needs: [create-nightly-tag, frontend-tests, backend-unit-tests]
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/nightly_build.yml around lines 218 - 220, The workflow
condition uses always() which bypasses implicit success gating and only checks
frontend-tests and backend-unit-tests for != 'failure', allowing runs after
cancelled/skipped jobs and not checking create-nightly-tag at all; update the if
expression to require explicit success for all prerequisites (e.g., ensure
needs.create-nightly-tag.result == 'success' && needs.frontend-tests.result ==
'success' && needs.backend-unit-tests.result == 'success') and remove the
always() call so the release job only runs when each listed need succeeded.

@jordanrfrazier jordanrfrazier added this pull request to the merge queue Mar 16, 2026
Merged via the queue into main with commit 67d5694 Mar 16, 2026
97 of 100 checks passed
@jordanrfrazier jordanrfrazier deleted the remove-hash-histories branch March 16, 2026 10:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ignore-for-release lgtm This PR has been approved by a maintainer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants