Skip to content

test(e2e): drop --build from tags/snaps/merges that don't need build output - #10733

Open
davidfirst wants to merge 3 commits into
masterfrom
e2e-skip-unneeded-build
Open

davidfirst wants to merge 3 commits into
masterfrom
e2e-skip-unneeded-build

Conversation

@davidfirst

@davidfirst davidfirst commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

The --build flag on bit tag, bit snap and bit lane merge runs the full build pipeline. This is the slow part of these commands. Many e2e tests used the build variants of the helpers, but did not read any build output.

This change replaces 195 of these calls in 63 files with the existing ...WithoutBuild helpers.

How the calls were selected:

  • All test files that use a build call ran with --build removed.
  • A call keeps --build if a test in its describe failed without it, or if no test ran under it.
  • Tests that read artifacts, builder data, the generated package.json, published packages, deps-graph data, or build status keep the build.
  • Three files keep the build after manual review: skip-publish-unpublished-dep, artifacts and pkg.
  • A test also keeps the build if a later step installs a package from the local registry. The build publishes that package. Without it, the install does not fail, but the test does not test its scenario.

All tests in the changed files pass locally.

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Skip unnecessary builds across E2E tag, snap, and merge tests

🧪 Tests 🕐 40+ Minutes

Grey Divider

AI Description

• Replaces 211 build-enabled commands with existing without-build helpers.
• Preserves builds only where tests consume build outputs or artifacts.
• Reduces runtime while retaining coverage across 1,322 validated E2E tests.
Diagram

graph TD
  A["E2E setup"] --> B{"Build output needed?"}
  B -- "No" --> C["Without-build helper"] --> D["Tag snap merge"] --> E["Versioned state"]
  B -- "Yes" --> F["Build helper"] --> G["Build pipeline"] --> E
Loading
High-Level Assessment

The targeted helper substitution is the safest approach. Changing command-helper defaults or globally disabling builds would obscure test intent and risk silently weakening build-dependent coverage; explicit per-call selection preserves those scenarios while removing verified unnecessary work.

Files changed (72) +224 / -211

Tests (72) +224 / -211
cat.e2e.tsSkip builds when preparing cat command versions +3/-3

Skip builds when preparing cat command versions

• Uses without-build tagging for current and historical component versions, preserving explicit version arguments.

e2e/commands/cat.e2e.ts

diff.e2e.tsSkip builds in diff command fixtures +5/-5

Skip builds in diff command fixtures

• Creates tagged baselines and comparison versions without running the build pipeline.

e2e/commands/diff.e2e.ts

export.e2e.tsUse without-build tags in export scenarios +9/-9

Use without-build tags in export scenarios

• Switches standard, unmodified, and explicit-version tags to without-build helpers before export assertions.

e2e/commands/export.e2e.ts

import-all.e2e.tsSkip fixture build before import-all merge +1/-1

Skip fixture build before import-all merge

• Tags the cloned workspace without building before exercising manual import merging.

e2e/commands/import-all.e2e.ts

import.e2e.tsSkip build before import/export setup +1/-1

Skip build before import/export setup

• Creates the exported component version with the without-build tag helper.

e2e/commands/import.e2e.ts

list.e2e.tsSkip rebuild for unmodified list fixture +1/-1

Skip rebuild for unmodified list fixture

• Retags the imported component without building while preserving its message and unmodified options.

e2e/commands/list.e2e.ts

remove.e2e.tsSkip builds in remove command versioning flows +4/-4

Skip builds in remove command versioning flows

• Uses without-build tag and snap helpers for exported, deleted, and removed-component scenarios.

e2e/commands/remove.e2e.ts

reset.e2e.tsSkip builds before reset operations +2/-2

Skip builds before reset operations

• Tags unmodified components without building before head and component reset assertions.

e2e/commands/reset.e2e.ts

tag.e2e.tsValidate invalid versions without invoking builds +1/-1

Validate invalid versions without invoking builds

• Uses the without-build tag helper while retaining the invalid semantic-version argument.

e2e/commands/tag.e2e.ts

id-with-wildcard.e2e.tsSkip build for wildcard version staging +1/-1

Skip build for wildcard version staging

• Creates the unmodified tagged version without running the build pipeline.

e2e/flows/id-with-wildcard.e2e.ts

out-of-sync-componets.e2e.tsSkip builds in out-of-sync version setups +3/-3

Skip builds in out-of-sync version setups

• Uses without-build tagging for later versions in reset and export synchronization scenarios.

e2e/flows/out-of-sync-componets.e2e.ts

same-name-different-scopes.e2e.tsSkip rebuild for same-name scope fixture +1/-1

Skip rebuild for same-name scope fixture

• Tags the unmodified second version without building before export.

e2e/flows/same-name-different-scopes.e2e.ts

peer-dependency-component.e2e.tsSkip snap builds in peer dependency scenarios +3/-3

Skip snap builds in peer dependency scenarios

• Uses without-build snaps when caching and changing peer dependency metadata; explicit build commands remain where needed.

e2e/functionalities/peer-dependency-component.e2e.ts

aspect.e2e.tsSkip build when retagging aspect consumers +1/-1

Skip build when retagging aspect consumers

• Tags aspect-related component updates without invoking the build pipeline.

e2e/harmony/aspect.e2e.ts

build-cmd.e2e.tsAvoid redundant tag builds in build command tests +2/-2

Avoid redundant tag builds in build command tests

• Prepares exported component versions without building before the scenarios explicitly exercise rebuild behavior.

e2e/harmony/build-cmd.e2e.ts

checkout-harmony.e2e.tsSkip builds in checkout tag validation +2/-2

Skip builds in checkout tag validation

• Uses without-build tagging for newest-version errors and ignore-newest-version behavior.

e2e/harmony/checkout-harmony.e2e.ts

component-config.e2e.tsSkip tag build before ejecting component config +1/-1

Skip tag build before ejecting component config

• Tags the configured component without building after the explicit compile step.

e2e/harmony/component-config.e2e.ts

custom-aspects.e2e.tsSkip build when exporting custom aspects +1/-1

Skip build when exporting custom aspects

• Uses the without-build tag helper after explicit compilation and installation.

e2e/harmony/custom-aspects.e2e.ts

custom-env-operations.e2e.tsRetag custom environment without building +1/-1

Retag custom environment without building

• Switches the unmodified retag operation to the without-build helper.

e2e/harmony/custom-env-operations.e2e.ts

custom-env.e2e.tsSkip builds across custom environment tags +3/-3

Skip builds across custom environment tags

• Uses without-build helpers for individual, all-component, and unmodified custom environment tags.

e2e/harmony/custom-env.e2e.ts

delete.e2e.tsSkip builds in delete command setup +3/-3

Skip builds in delete command setup

• Creates tagged and snapped lane state without building before deletion, reset, and export assertions.

e2e/harmony/delete.e2e.ts

dependency-resolver.e2e.tsSkip tag build in dependency resolver fixture +1/-1

Skip tag build in dependency resolver fixture

• Tags installed components without running the build pipeline.

e2e/harmony/dependency-resolver.e2e.ts

deps-graph-isolation.e2e.tsSkip build before dependency graph isolation export +1/-1

Skip build before dependency graph isolation export

• Uses without-build tagging while preserving the skip-tests option.

e2e/harmony/deps-graph-isolation.e2e.ts

deps-graph-reimport.e2e.tsSkip builds for dependency graph reimport versions +2/-2

Skip builds for dependency graph reimport versions

• Creates initial and unmodified follow-up versions without builds before export and reimport.

e2e/harmony/deps-graph-reimport.e2e.ts

deps-graph.e2e.tsSkip build in dependency graph export setup +1/-1

Skip build in dependency graph export setup

• Tags installed components without building while retaining the skip-tests argument.

e2e/harmony/deps-graph.e2e.ts

deps-in-capsules.e2e.tsSkip build before capsule dependency export +1/-1

Skip build before capsule dependency export

• Uses without-build tagging after the explicit compilation step.

e2e/harmony/deps-in-capsules.e2e.ts

deps-write.e2e.tsSkip build before dependency write export +1/-1

Skip build before dependency write export

• Tags dependency fixtures without building while retaining the skip-tests option.

e2e/harmony/deps-write.e2e.ts

export-harmony.e2e.tsSkip build during lane merge export flow +1/-1

Skip build during lane merge export flow

• Uses the without-build lane merge helper before the subsequent snap operation.

e2e/harmony/export-harmony.e2e.ts

extensions-config-diff.e2e.tsSkip tag build before extension config diff +1/-1

Skip tag build before extension config diff

• Tags compiled extension configuration without invoking another build pipeline.

e2e/harmony/extensions-config-diff.e2e.ts

extensions-config.e2e.tsSkip builds across extension configuration tests +8/-8

Skip builds across extension configuration tests

• Uses without-build helpers for initial tags, individual extension tags, auto-tags, and export setup.

e2e/harmony/extensions-config.e2e.ts

global-virtual-store.e2e.tsSkip tag build in global virtual store setup +1/-1

Skip tag build in global virtual store setup

• Tags installed components through the without-build helper before validating the resulting setup.

e2e/harmony/global-virtual-store.e2e.ts

http.e2e.tsSkip build before HTTP scope export +1/-1

Skip build before HTTP scope export

• Tags populated components without building before exporting through the HTTP scope.

e2e/harmony/http.e2e.ts

import-harmony.e2e.tsSkip builds for Harmony import versions +2/-2

Skip builds for Harmony import versions

• Creates both exported and modified component versions without running build pipelines.

e2e/harmony/import-harmony.e2e.ts

imported-component-deps.e2e.tsSkip build before imported dependency export +1/-1

Skip build before imported dependency export

• Uses without-build tagging after explicit installation and compilation.

e2e/harmony/imported-component-deps.e2e.ts

abort-merge-lane.e2e.tsSkip builds in merge-abort scenarios +2/-2

Skip builds in merge-abort scenarios

• Uses without-build lane merges for local and remote lane abort coverage.

e2e/harmony/lanes/abort-merge-lane.e2e.ts

bit-checkout-on-lanes.e2e.tsSkip build during checkout lane merge setup +1/-1

Skip build during checkout lane merge setup

• Merges the development lane without running build tasks before export and checkout assertions.

e2e/harmony/lanes/bit-checkout-on-lanes.e2e.ts

bit-import-on-lanes.e2e.tsSkip builds in lane import fixtures +3/-3

Skip builds in lane import fixtures

• Uses without-build tags and snaps when preparing exported main and lane histories.

e2e/harmony/lanes/bit-import-on-lanes.e2e.ts

bit-reset-after-merge-main.e2e.tsSkip builds during reset-after-merge setup +4/-4

Skip builds during reset-after-merge setup

• Uses without-build lane merges across normal, remote, conflict-resolution, and no-snap paths.

e2e/harmony/lanes/bit-reset-after-merge-main.e2e.ts

bit-reset-on-lanes.e2e.tsSkip builds in lane reset merges +3/-3

Skip builds in lane reset merges

• Merges local and remote lanes without builds before reset and staged-version assertions.

e2e/harmony/lanes/bit-reset-on-lanes.e2e.ts

diverged-from-forked.e2e.tsSkip build when merging diverged forked lanes +1/-1

Skip build when merging diverged forked lanes

• Uses the without-build merge helper while preserving merge-parent history coverage.

e2e/harmony/lanes/diverged-from-forked.e2e.ts

diverged-from-remote-lane.e2e.tsSkip build for diverged remote lane merge +1/-1

Skip build for diverged remote lane merge

• Merges the local lane without building before fetching and divergence assertions.

e2e/harmony/lanes/diverged-from-remote-lane.e2e.ts

import-lanes.e2e.tsSkip snap build before lane import +1/-1

Skip snap build before lane import

• Creates the exported lane head with the without-build snap helper.

e2e/harmony/lanes/import-lanes.e2e.ts

lane-export-skip-main-history-http.e2e.tsSkip build during HTTP lane history merge +1/-1

Skip build during HTTP lane history merge

• Merges main without building before validating HTTP lane export history behavior.

e2e/harmony/lanes/lane-export-skip-main-history-http.e2e.ts

lane-export-skip-main-history.e2e.tsSkip builds across lane history export merges +6/-6

Skip builds across lane history export merges

• Uses without-build main merges in multiple history-pruning and export scenarios.

e2e/harmony/lanes/lane-export-skip-main-history.e2e.ts

lane-export.e2e.tsSkip snap builds in lane export history setup +2/-2

Skip snap builds in lane export history setup

• Creates first and second lane snaps without builds before checking export behavior with missing artifacts.

e2e/harmony/lanes/lane-export.e2e.ts

lane-forking.e2e.tsSkip builds in lane forking merges +2/-2

Skip builds in lane forking merges

• Uses without-build merges when integrating forked lane histories locally and into main.

e2e/harmony/lanes/lane-forking.e2e.ts

lane-history-merge.e2e.tsSkip build in lane history fast-forward merge +1/-1

Skip build in lane history fast-forward merge

• Merges the source lane without building before inspecting lane history.

e2e/harmony/lanes/lane-history-merge.e2e.ts

lane-import.e2e.tsSkip build during imported lane merge +1/-1

Skip build during imported lane merge

• Uses the without-build helper to merge a remote lane into a new local lane.

e2e/harmony/lanes/lane-import.e2e.ts

lane-merge.e2e.tsSkip builds in core lane merge scenarios +4/-4

Skip builds in core lane merge scenarios

• Uses without-build merge and unmodified-tag helpers for fast-forward, diverged, and export paths.

e2e/harmony/lanes/lane-merge.e2e.ts

merge-lanes-diverge.e2e.tsSkip builds across diverged lane merges +5/-5

Skip builds across diverged lane merges

• Uses without-build merges for squash, no-snap, conflict-resolution, and remote lane scenarios.

e2e/harmony/lanes/merge-lanes-diverge.e2e.ts

merge-lanes-edge-cases-2.e2e.tsSkip builds in additional lane merge edge cases +12/-12

Skip builds in additional lane merge edge cases

• Replaces build-enabled merges across rename, conflict, policy, partial-snap, and detached-head scenarios.

e2e/harmony/lanes/merge-lanes-edge-cases-2.e2e.ts

merge-lanes-edge-cases.e2e.tsSkip builds in lane merge edge cases +16/-16

Skip builds in lane merge edge cases

• Uses without-build merges across tag, squash, remote, history, removal, and file-state cases.

e2e/harmony/lanes/merge-lanes-edge-cases.e2e.ts

merge-lanes-main.e2e.tsSkip builds in main lane merge scenarios +8/-8

Skip builds in main lane merge scenarios

• Uses without-build merges for missing-main, deletion, filtering, empty-head, and success cases.

e2e/harmony/lanes/merge-lanes-main.e2e.ts

merge-lanes-partial.e2e.tsSkip builds in partial lane merge tests +3/-2

Skip builds in partial lane merge tests

• Uses without-build merges for pattern validation with and without dependency inclusion.

e2e/harmony/lanes/merge-lanes-partial.e2e.ts

merge-lanes-remote.e2e.tsSkip builds in remote lane merge setup +3/-3

Skip builds in remote lane merge setup

• Uses without-build remote merges and snaps while preserving workspace and verbose options.

e2e/harmony/lanes/merge-lanes-remote.e2e.ts

merge-lanes-squash-diverge.e2e.tsSkip builds in diverged squash merges +6/-6

Skip builds in diverged squash merges

• Uses without-build merges for local, cross-scope, repeated, and main-side squash scenarios.

e2e/harmony/lanes/merge-lanes-squash-diverge.e2e.ts

merge-lanes-squash.e2e.tsSkip builds in lane squash tests +3/-3

Skip builds in lane squash tests

• Uses without-build lane merges for normal squash histories and remote import coverage.

e2e/harmony/lanes/merge-lanes-squash.e2e.ts

merge-lanes-unrelated.e2e.tsSkip builds across unrelated lane merges +14/-14

Skip builds across unrelated lane merges

• Uses without-build merges for resolution strategies, errors, repeated merges, removals, and remote histories.

e2e/harmony/lanes/merge-lanes-unrelated.e2e.ts

merge-main-env-policy.e2e.tsSkip tag build in environment policy setup +1/-1

Skip tag build in environment policy setup

• Tags the environment and component fixtures without running the build pipeline before export.

e2e/harmony/lanes/merge-main-env-policy.e2e.ts

remove-lanes.e2e.tsSkip build before removing merged lane +1/-1

Skip build before removing merged lane

• Merges the lane through the without-build helper before testing lane removal.

e2e/harmony/lanes/remove-lanes.e2e.ts

unrelated-and-removed.e2e.tsSkip build for unrelated removed-component merge +1/-1

Skip build for unrelated removed-component merge

• Uses a without-build merge while retaining unrelated-history resolution behavior.

e2e/harmony/lanes/unrelated-and-removed.e2e.ts

merge-config.e2e.tsSkip builds across merge configuration scenarios +22/-10

Skip builds across merge configuration scenarios

• Uses without-build merges for conflict handling, automatic resolution, ignored changes, and dependency policy preservation.

e2e/harmony/merge-config.e2e.ts

new.e2e.tsSkip build before exporting starter fixture +1/-1

Skip build before exporting starter fixture

• Tags the modified starter component without building before export and workspace recreation.

e2e/harmony/new.e2e.ts

pkg-manager-config.e2e.tsSkip tag build in package manager configuration test +1/-1

Skip tag build in package manager configuration test

• Uses without-build tagging after explicit installation and compilation.

e2e/harmony/pkg-manager-config.e2e.ts

recover.e2e.tsSkip builds during component recovery merges +2/-2

Skip builds during component recovery merges

• Uses without-build lane merges around recover, snap, and export operations.

e2e/harmony/recover.e2e.ts

relative-paths.e2e.tsSkip tag build after relative-path compilation +1/-1

Skip tag build after relative-path compilation

• Tags explicitly compiled components without running a redundant build pipeline.

e2e/harmony/relative-paths.e2e.ts

scope-trust.e2e.tsSkip tag build in scope trust setup +1/-1

Skip tag build in scope trust setup

• Uses without-build tagging after installation and explicit compilation before export.

e2e/harmony/scope-trust.e2e.ts

set-default-owner-and-scope.e2e.tsSkip build in default owner and scope test +1/-1

Skip build in default owner and scope test

• Tags the linked component without building before package-link assertions.

e2e/harmony/set-default-owner-and-scope.e2e.ts

snap.e2e.tsSkip unnecessary builds throughout snap tests +13/-13

Skip unnecessary builds throughout snap tests

• Uses without-build helpers for component and workspace snaps, follow-up tags, historical snaps, and auto-snap coverage.

e2e/harmony/snap.e2e.ts

tag-harmony.e2e.tsSkip builds for persisted tags and detached merges +2/-2

Skip builds for persisted tags and detached merges

• Uses the without-build persist-tag helper and avoids building during the detached-head lane merge.

e2e/harmony/tag-harmony.e2e.ts

track-directories-harmony.e2e.tsSkip builds in tracked-directory tag setups +2/-2

Skip builds in tracked-directory tag setups

• Tags tracked directory fixtures without building before model and import assertions.

e2e/harmony/track-directories-harmony.e2e.ts

updates-from-main-and-lane.e2e.tsSkip build while merging updates from main +1/-1

Skip build while merging updates from main

• Uses the without-build lane merge helper while preserving dependency-installation and component-inclusion options.

e2e/harmony/updates-from-main-and-lane.e2e.ts

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Artifact export regressions go untested ✓ Resolved 🐞 Bug ≡ Correctness
Description
snapAllComponentsWithoutBuild() omits --build for the first snap even though the setup
explicitly requires Preview to generate artifacts. After cloning and disabling Preview, the second
snap also has no pipeline artifacts, so export reaches neither the intended first-version artifact
retrieval nor its missing-artifact handling path.
Code

e2e/harmony/lanes/lane-export.e2e.ts[85]

+      helper.command.snapAllComponentsWithoutBuild();
Evidence
The test comments identify Preview generation as required for the first snap, but the changed setup
calls snapAllComponentsWithoutBuild(), whose implementation runs bit snap without --build,
while snapAllComponents() requests the build pipeline. The workspace is then cloned, Preview is
disabled, and another build-free snap is created before the export assertion, proving that neither
version produces the artifacts whose retrieval and absence the scenario is intended to exercise.

e2e/harmony/lanes/lane-export.e2e.ts[80-94]
components/legacy/e2e-helper/e2e-command-helper.ts[429-439]
e2e/harmony/lanes/lane-export.e2e.ts[79-95]
components/legacy/e2e-helper/e2e-command-helper.ts[437-445]
scopes/component/snapping/snap-cmd.ts[94-122]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The lane-export scenario requires the first snap to generate Preview artifacts before the workspace is cloned and Preview is disabled. Restore the build-enabled snap behavior so the later export assertion covers artifact references and missing-artifact handling for the earlier version.
## Fix Focus Areas
- e2e/harmony/lanes/lane-export.e2e.ts[79-94]
## Recommended Fix
Replace the first `snapAllComponentsWithoutBuild()` call with `snapAllComponents()` so Preview artifacts are generated before cloning and export. If the scenario is intended to preserve the original build pipeline for both versions, replace the second build-free snap call as well; otherwise, it may remain build-free when only the first snap's artifacts are required by the regression.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Removed components may build unnoticed ✓ Resolved 🐞 Bug ≡ Correctness
Description
snapAllComponentsWithoutBuild() disables the pipeline in a scenario specifically testing that a
build-enabled snap excludes a removed component. With no pipeline requested, both the absence of
pipeline output and the removed component's forced skipped status hold regardless of whether
build-enabled snapping handles removal correctly.
Code

e2e/commands/remove.e2e.ts[471]

+      snapOutput = helper.command.snapAllComponentsWithoutBuild();
Evidence
The describe block explicitly names snapping with --build, while the new helper invokes bit snap
without that flag. Removed components are assigned skipped status independently, so the status
assertion cannot compensate for disabling the pipeline.

e2e/commands/remove.e2e.ts[464-477]
components/legacy/e2e-helper/e2e-command-helper.ts[436-445]
scopes/component/snapping/version-maker.ts[182-185]
scopes/component/snapping/version-maker.ts[685-688]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test is meant to verify that removed components are excluded when snapping with a build, but the changed helper disables all building and makes its assertions vacuous.
## Fix Focus Areas
- e2e/commands/remove.e2e.ts[464-475]
## Recommended Fix
Restore `snapAllComponents('--build')` or use the equivalent build-enabled helper so a pipeline runs for eligible components while the removed component remains skipped.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. The preview regression is no longer tested ✓ Resolved 🐞 Bug ≡ Correctness
Description
tagIncludeUnmodifiedWithoutBuild() runs bit tag --unmodified without --build, even though this
test enables Preview and explicitly requires its task to run. When the custom environment is
re-tagged with no other build invocation in the describe block, Preview never exercises the original
environment-resolution path, allowing regressions there to pass the no-throw assertion unnoticed.
Code

e2e/harmony/custom-env-operations.e2e.ts[32]

+      expect(() => helper.command.tagIncludeUnmodifiedWithoutBuild()).not.to.throw();
Evidence
The helper implementation shows that tagIncludeUnmodifiedWithoutBuild() omits --build, whereas
the replaced tagIncludeUnmodified() helper includes it. The test explicitly enables Preview, its
adjacent comment warns that the build is required for the Preview task, and Preview performs its
bundling through the builder pipeline, proving that the selected helper skips the behavior under
test.

e2e/harmony/custom-env-operations.e2e.ts[21-32]
components/legacy/e2e-helper/e2e-command-helper.ts[413-420]
components/legacy/e2e-helper/e2e-command-helper.ts[410-420]
scopes/preview/preview/preview.main.runtime.ts[1195-1200]
scopes/preview/preview/preview.task.ts[29-58]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
This regression test must run the build pipeline because its Preview task is the behavior under test, but `tagIncludeUnmodifiedWithoutBuild()` omits `--build`, so the task never executes.
## Fix Focus Areas
- e2e/harmony/custom-env-operations.e2e.ts[31-32]
## Recommended Fix
Replace `tagIncludeUnmodifiedWithoutBuild()` with the build-enabled `tagIncludeUnmodified()` helper so re-tagging runs the build pipeline and executes and validates the Preview task as intended.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View action required (2)
4. Store type errors can pass untested ✓ Resolved 🐞 Bug ≡ Correctness
Description
tagAllWithoutBuild() omits --build and bypasses the only pipeline operation intended to run
TSCompiler for this global-store test. The remaining assertions only search tag output for `error
TS` and inspect the component list, so type-resolution failures in global virtual-store slots can
pass when no compiler output was generated.
Code

e2e/harmony/global-virtual-store.e2e.ts[79]

+      output = helper.command.tagAllWithoutBuild();
Evidence
The surrounding comments identify the build pipeline and its TSCompiler task as the behavior under
test, but tagAllWithoutBuild() invokes plain bit tag without --build. Command handling
therefore passes a false build value, and the version maker returns before invoking the builder, so
neither checking the tag output for compiler errors nor listing components proves that compilation
ran.

e2e/harmony/global-virtual-store.e2e.ts[68-85]
components/legacy/e2e-helper/e2e-command-helper.ts[393-404]
scopes/component/snapping/tag-cmd.ts[192-203]
scopes/component/snapping/version-maker.ts[350-386]
e2e/harmony/global-virtual-store.e2e.ts[68-84]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test is intended to prove that TSCompiler can resolve and type-check an aspect from a global virtual-store slot, but `tagAllWithoutBuild()` prevents the build and compiler pipeline from running.
## Fix Focus Areas
- e2e/harmony/global-virtual-store.e2e.ts[76-85]
## Recommended Fix
Replace `tagAllWithoutBuild()` with `tagAllComponents()` at this call so tagging runs the build pipeline and the existing compiler-error assertion once again covers compilation and type-resolution failures.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Environment installs fail before merge tests ✓ Resolved 🐞 Bug ☼ Reliability
Description
tagAllWithoutBuild() skips the tag build that registers and runs the package publishing task,
although this setup requires the environment package to be compiled and published to the local
registry. The subsequent fresh-workspace lane import loads that environment as a package, so it
cannot install the unpublished package and the status and merge assertions are not reached.
Code

e2e/harmony/lanes/merge-main-env-policy.e2e.ts[38]

+      helper.command.tagAllWithoutBuild();
Evidence
The test itself states that this tag needs a build to publish the environment package, then
reinitializes a workspace where the environment must be installed as a package. The helper omits
--build; publication is a tag task, and build-disabled version making returns before such tasks
run.

e2e/harmony/lanes/merge-main-env-policy.e2e.ts[28-38]
e2e/harmony/lanes/merge-main-env-policy.e2e.ts[52-81]
components/legacy/e2e-helper/e2e-command-helper.ts[393-404]
scopes/component/snapping/version-maker.ts[350-386]
scopes/pkg/pkg/pkg.main.runtime.ts[180-184]
scopes/pkg/pkg/publish.task.ts[15-29]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
Issue description
The initial tag must run the package publish task so the fresh workspace can install the custom environment from the local registry, but the changed helper skips that task.
Fix Focus Areas
- e2e/harmony/lanes/merge-main-env-policy.e2e.ts[34-38]
Recommended Fix
Replace `tagAllWithoutBuild()` with `tagAllComponents()` for the initial environment tag, preserving package compilation and publication before the lane import.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
Review mode: 🧠 Deep: This broad behavioral test change spans 64 e2e files and 174 independent helper substitutions, creating many independent, easy-to-miss cases where removing builds can invalidate setup or coverage.

Grey Divider

Tip of the day
💡 Did you know, you can enable the Remediation agent and Qodo fixes findings in a dedicated fix PR

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Previous reviews

Review updated until commit 154424d 🧠 Deep

Results up to commit 87b35c1


🐞 Bugs (1) 📘 Rule violations (0) 📜 Skill insights (0)


Action required
1. Artifact export regressions go untested 🐞 Bug ≡ Correctness ⭐ New
Description
snapAllComponentsWithoutBuild() omits --build for the first snap even though the setup
explicitly requires Preview to generate artifacts. After cloning and disabling Preview, the second
snap also has no pipeline artifacts, so export reaches neither the intended first-version artifact
retrieval nor its missing-artifact handling path.
Code

e2e/harmony/lanes/lane-export.e2e.ts[85]

+      helper.command.snapAllComponentsWithoutBuild();
Evidence
The test comments identify Preview generation as required for the first snap, but the changed setup
calls snapAllComponentsWithoutBuild(), whose implementation runs bit snap without --build,
while snapAllComponents() requests the build pipeline. The workspace is then cloned, Preview is
disabled, and another build-free snap is created before the export assertion, proving that neither
version produces the artifacts whose retrieval and absence the scenario is intended to exercise.

e2e/harmony/lanes/lane-export.e2e.ts[80-94]
components/legacy/e2e-helper/e2e-command-helper.ts[429-439]
e2e/harmony/lanes/lane-export.e2e.ts[79-95]
components/legacy/e2e-helper/e2e-command-helper.ts[437-445]
scopes/component/snapping/snap-cmd.ts[94-122]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The lane-export scenario requires the first snap to generate Preview artifacts before the workspace is cloned and Preview is disabled. Restore the build-enabled snap behavior so the later export assertion covers artifact references and missing-artifact handling for the earlier version.

## Fix Focus Areas
- e2e/harmony/lanes/lane-export.e2e.ts[79-94]

## Recommended Fix
Replace the first `snapAllComponentsWithoutBuild()` call with `snapAllComponents()` so Preview artifacts are generated before cloning and export. If the scenario is intended to preserve the original build pipeline for both versions, replace the second build-free snap call as well; otherwise, it may remain build-free when only the first snap's artifacts are required by the regression.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Removed components may build unnoticed ✓ Resolved 🐞 Bug ≡ Correctness
Description
snapAllComponentsWithoutBuild() disables the pipeline in a scenario specifically testing that a
build-enabled snap excludes a removed component. With no pipeline requested, both the absence of
pipeline output and the removed component's forced skipped status hold regardless of whether
build-enabled snapping handles removal correctly.
Code

e2e/commands/remove.e2e.ts[471]

+      snapOutput = helper.command.snapAllComponentsWithoutBuild();
Evidence
The describe block explicitly names snapping with --build, while the new helper invokes bit snap
without that flag. Removed components are assigned skipped status independently, so the status
assertion cannot compensate for disabling the pipeline.

e2e/commands/remove.e2e.ts[464-477]
components/legacy/e2e-helper/e2e-command-helper.ts[436-445]
scopes/component/snapping/version-maker.ts[182-185]
scopes/component/snapping/version-maker.ts[685-688]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test is meant to verify that removed components are excluded when snapping with a build, but the changed helper disables all building and makes its assertions vacuous.
## Fix Focus Areas
- e2e/commands/remove.e2e.ts[464-475]
## Recommended Fix
Restore `snapAllComponents('--build')` or use the equivalent build-enabled helper so a pipeline runs for eligible components while the removed component remains skipped.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. The preview regression is no longer tested ✓ Resolved 🐞 Bug ≡ Correctness
Description
tagIncludeUnmodifiedWithoutBuild() runs bit tag --unmodified without --build, even though this
test enables Preview and explicitly requires its task to run. When the custom environment is
re-tagged with no other build invocation in the describe block, Preview never exercises the original
environment-resolution path, allowing regressions there to pass the no-throw assertion unnoticed.
Code

e2e/harmony/custom-env-operations.e2e.ts[32]

+      expect(() => helper.command.tagIncludeUnmodifiedWithoutBuild()).not.to.throw();
Evidence
The helper implementation shows that tagIncludeUnmodifiedWithoutBuild() omits --build, whereas
the replaced tagIncludeUnmodified() helper includes it. The test explicitly enables Preview, its
adjacent comment warns that the build is required for the Preview task, and Preview performs its
bundling through the builder pipeline, proving that the selected helper skips the behavior under
test.

e2e/harmony/custom-env-operations.e2e.ts[21-32]
components/legacy/e2e-helper/e2e-command-helper.ts[413-420]
components/legacy/e2e-helper/e2e-command-helper.ts[410-420]
scopes/preview/preview/preview.main.runtime.ts[1195-1200]
scopes/preview/preview/preview.task.ts[29-58]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
This regression test must run the build pipeline because its Preview task is the behavior under test, but `tagIncludeUnmodifiedWithoutBuild()` omits `--build`, so the task never executes.
## Fix Focus Areas
- e2e/harmony/custom-env-operations.e2e.ts[31-32]
## Recommended Fix
Replace `tagIncludeUnmodifiedWithoutBuild()` with the build-enabled `tagIncludeUnmodified()` helper so re-tagging runs the build pipeline and executes and validates the Preview task as intended.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View action required (2)
4. Store type errors can pass untested ✓ Resolved 🐞 Bug ≡ Correctness
Description
tagAllWithoutBuild() omits --build and bypasses the only pipeline operation intended to run
TSCompiler for this global-store test. The remaining assertions only search tag output for `error
TS` and inspect the component list, so type-resolution failures in global virtual-store slots can
pass when no compiler output was generated.
Code

e2e/harmony/global-virtual-store.e2e.ts[79]

+      output = helper.command.tagAllWithoutBuild();
Evidence
The surrounding comments identify the build pipeline and its TSCompiler task as the behavior under
test, but tagAllWithoutBuild() invokes plain bit tag without --build. Command handling
therefore passes a false build value, and the version maker returns before invoking the builder, so
neither checking the tag output for compiler errors nor listing components proves that compilation
ran.

e2e/harmony/global-virtual-store.e2e.ts[68-85]
components/legacy/e2e-helper/e2e-command-helper.ts[393-404]
scopes/component/snapping/tag-cmd.ts[192-203]
scopes/component/snapping/version-maker.ts[350-386]
e2e/harmony/global-virtual-store.e2e.ts[68-84]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test is intended to prove that TSCompiler can resolve and type-check an aspect from a global virtual-store slot, but `tagAllWithoutBuild()` prevents the build and compiler pipeline from running.
## Fix Focus Areas
- e2e/harmony/global-virtual-store.e2e.ts[76-85]
## Recommended Fix
Replace `tagAllWithoutBuild()` with `tagAllComponents()` at this call so tagging runs the build pipeline and the existing compiler-error assertion once again covers compilation and type-resolution failures.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Environment installs fail before merge tests ✓ Resolved 🐞 Bug ☼ Reliability
Description
tagAllWithoutBuild() skips the tag build that registers and runs the package publishing task,
although this setup requires the environment package to be compiled and published to the local
registry. The subsequent fresh-workspace lane import loads that environment as a package, so it
cannot install the unpublished package and the status and merge assertions are not reached.
Code

e2e/harmony/lanes/merge-main-env-policy.e2e.ts[38]

+      helper.command.tagAllWithoutBuild();
Evidence
The test itself states that this tag needs a build to publish the environment package, then
reinitializes a workspace where the environment must be installed as a package. The helper omits
--build; publication is a tag task, and build-disabled version making returns before such tasks
run.

e2e/harmony/lanes/merge-main-env-policy.e2e.ts[28-38]
e2e/harmony/lanes/merge-main-env-policy.e2e.ts[52-81]
components/legacy/e2e-helper/e2e-command-helper.ts[393-404]
scopes/component/snapping/version-maker.ts[350-386]
scopes/pkg/pkg/pkg.main.runtime.ts[180-184]
scopes/pkg/pkg/publish.task.ts[15-29]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
Issue description
The initial tag must run the package publish task so the fresh workspace can install the custom environment from the local registry, but the changed helper skips that task.
Fix Focus Areas
- e2e/harmony/lanes/merge-main-env-policy.e2e.ts[34-38]
Recommended Fix
Replace `tagAllWithoutBuild()` with `tagAllComponents()` for the initial environment tag, preserving package compilation and publication before the lane import.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Context sources
Review mode: 🧠 Deep: This broad behavioral test-fixture change spans 64 files and 175 independent call-site edits, with multiple already-identified cases where removing builds invalidates coverage, making redundant review materially valuable.
Results up to commit 8f2d3b0


🐞 Bugs (4) 📘 Rule violations (0) 📜 Skill insights (0)


Action required
1. Removed components may build unnoticed 🐞 Bug ≡ Correctness
Description
snapAllComponentsWithoutBuild() disables the pipeline in a scenario specifically testing that a
build-enabled snap excludes a removed component. With no pipeline requested, both the absence of
pipeline output and the removed component's forced skipped status hold regardless of whether
build-enabled snapping handles removal correctly.
Code

e2e/commands/remove.e2e.ts[471]

+      snapOutput = helper.command.snapAllComponentsWithoutBuild();
Evidence
The describe block explicitly names snapping with --build, while the new helper invokes bit snap
without that flag. Removed components are assigned skipped status independently, so the status
assertion cannot compensate for disabling the pipeline.

e2e/commands/remove.e2e.ts[464-477]
components/legacy/e2e-helper/e2e-command-helper.ts[436-445]
scopes/component/snapping/version-maker.ts[182-185]
scopes/component/snapping/version-maker.ts[685-688]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test is meant to verify that removed components are excluded when snapping with a build, but the changed helper disables all building and makes its assertions vacuous.

## Fix Focus Areas
- e2e/commands/remove.e2e.ts[464-475]

## Recommended Fix
Restore `snapAllComponents('--build')` or use the equivalent build-enabled helper so a pipeline runs for eligible components while the removed component remains skipped.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. The preview regression is no longer tested 🐞 Bug ≡ Correctness
Description
tagIncludeUnmodifiedWithoutBuild() runs bit tag --unmodified without --build, even though this
test enables Preview and explicitly requires its task to run. When the custom environment is
re-tagged with no other build invocation in the describe block, Preview never exercises the original
environment-resolution path, allowing regressions there to pass the no-throw assertion unnoticed.
Code

e2e/harmony/custom-env-operations.e2e.ts[32]

+      expect(() => helper.command.tagIncludeUnmodifiedWithoutBuild()).not.to.throw();
Evidence
The helper implementation shows that tagIncludeUnmodifiedWithoutBuild() omits --build, whereas
the replaced tagIncludeUnmodified() helper includes it. The test explicitly enables Preview, its
adjacent comment warns that the build is required for the Preview task, and Preview performs its
bundling through the builder pipeline, proving that the selected helper skips the behavior under
test.

e2e/harmony/custom-env-operations.e2e.ts[21-32]
components/legacy/e2e-helper/e2e-command-helper.ts[413-420]
components/legacy/e2e-helper/e2e-command-helper.ts[410-420]
scopes/preview/preview/preview.main.runtime.ts[1195-1200]
scopes/preview/preview/preview.task.ts[29-58]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
This regression test must run the build pipeline because its Preview task is the behavior under test, but `tagIncludeUnmodifiedWithoutBuild()` omits `--build`, so the task never executes.

## Fix Focus Areas
- e2e/harmony/custom-env-operations.e2e.ts[31-32]

## Recommended Fix
Replace `tagIncludeUnmodifiedWithoutBuild()` with the build-enabled `tagIncludeUnmodified()` helper so re-tagging runs the build pipeline and executes and validates the Preview task as intended.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Store type errors can pass untested 🐞 Bug ≡ Correctness
Description
tagAllWithoutBuild() omits --build and bypasses the only pipeline operation intended to run
TSCompiler for this global-store test. The remaining assertions only search tag output for `error
TS` and inspect the component list, so type-resolution failures in global virtual-store slots can
pass when no compiler output was generated.
Code

e2e/harmony/global-virtual-store.e2e.ts[79]

+      output = helper.command.tagAllWithoutBuild();
Evidence
The surrounding comments identify the build pipeline and its TSCompiler task as the behavior under
test, but tagAllWithoutBuild() invokes plain bit tag without --build. Command handling
therefore passes a false build value, and the version maker returns before invoking the builder, so
neither checking the tag output for compiler errors nor listing components proves that compilation
ran.

e2e/harmony/global-virtual-store.e2e.ts[68-85]
components/legacy/e2e-helper/e2e-command-helper.ts[393-404]
scopes/component/snapping/tag-cmd.ts[192-203]
scopes/component/snapping/version-maker.ts[350-386]
e2e/harmony/global-virtual-store.e2e.ts[68-84]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test is intended to prove that TSCompiler can resolve and type-check an aspect from a global virtual-store slot, but `tagAllWithoutBuild()` prevents the build and compiler pipeline from running.

## Fix Focus Areas
- e2e/harmony/global-virtual-store.e2e.ts[76-85]

## Recommended Fix
Replace `tagAllWithoutBuild()` with `tagAllComponents()` at this call so tagging runs the build pipeline and the existing compiler-error assertion once again covers compilation and type-resolution failures.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View action required (1)
4. Environment installs fail before merge tests 🐞 Bug ☼ Reliability
Description
tagAllWithoutBuild() skips the tag build that registers and runs the package publishing task,
although this setup requires the environment package to be compiled and published to the local
registry. The subsequent fresh-workspace lane import loads that environment as a package, so it
cannot install the unpublished package and the status and merge assertions are not reached.
Code

e2e/harmony/lanes/merge-main-env-policy.e2e.ts[38]

+      helper.command.tagAllWithoutBuild();
Evidence
The test itself states that this tag needs a build to publish the environment package, then
reinitializes a workspace where the environment must be installed as a package. The helper omits
--build; publication is a tag task, and build-disabled version making returns before such tasks
run.

e2e/harmony/lanes/merge-main-env-policy.e2e.ts[28-38]
e2e/harmony/lanes/merge-main-env-policy.e2e.ts[52-81]
components/legacy/e2e-helper/e2e-command-helper.ts[393-404]
scopes/component/snapping/version-maker.ts[350-386]
scopes/pkg/pkg/pkg.main.runtime.ts[180-184]
scopes/pkg/pkg/publish.task.ts[15-29]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

Issue description
The initial tag must run the package publish task so the fresh workspace can install the custom environment from the local registry, but the changed helper skips that task.
Fix Focus Areas
- e2e/harmony/lanes/merge-main-env-policy.e2e.ts[34-38]
Recommended Fix
Replace `tagAllWithoutBuild()` with `tagAllComponents()` for the initial environment tag, preserving package compilation and publication before the lane import.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Context sources
Review mode: 🧠 Deep: This broad, behavior-affecting e2e change replaces helpers across 72 files and 186 independent sites, creating many opportunities to incorrectly remove builds from tests that implicitly depend on build artifacts.

Grey Divider

Qodo Logo

Comment thread e2e/commands/remove.e2e.ts Outdated
Comment thread e2e/harmony/custom-env-operations.e2e.ts Outdated
Comment thread e2e/harmony/global-virtual-store.e2e.ts Outdated
Comment thread e2e/harmony/lanes/merge-main-env-policy.e2e.ts Outdated
Comment thread e2e/harmony/lanes/lane-export.e2e.ts Outdated
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 87b35c1

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 154424d

This branch has not been deployed

No deployments
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.

1 participant