## Summary
Backports #12212 to `cloud/1.43` so paste/drop media uploads clear
missing media validation rings through the widget change path.
## Changes
- **What**: Cherry-picked `95e616b89404fe2bda5be4dc6194aeac07a65a0b` and
adapted the Vue node error E2E conflict for the 1.43 test helper API.
- **Dependencies**: None.
## Review Focus
Conflict resolution was limited to
`browser_tests/tests/vueNodes/nodeStates/error.spec.ts`. The 1.43 branch
does not have the newer Vue node error helpers from `main`, so the
backport keeps the existing 1.43 tests and adds only the Load Image
drop/paste missing-media clearing coverage using local prompt route
mocking plus `getNodeLocator()` / `getWidget(0)`.
Backport of #12212.
## Screenshots (if applicable)
N/A
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-12246-backport-cloud-1-43-fix-clear-media-upload-errors-via-widget-change-12212-3606d73d365081cd9074d2bb0c1e9e74)
by [Unito](https://www.unito.io)
## Summary
Backports #12205 to `cloud/1.43` so Node Info actions open the
right-side Info tab when the new-menu UI makes that panel available, and
hide the action in legacy-menu contexts.
## Changes
- **What**: Cherry-picked `a3106c4d5305d2c0349bdccbb74cfc5855630a2d` and
resolved the 1.43 Playwright conflict in
`browser_tests/tests/selectionToolboxActions.spec.ts`.
- **Dependencies**: None.
## Review Focus
Conflict resolution was limited to
`browser_tests/tests/selectionToolboxActions.spec.ts`. The backport
keeps the 1.43 selection toolbox test structure and replaces the old
generic properties-panel assertion with the upstream right-side Info tab
assertions plus the legacy-menu hidden-button coverage.
Backport of #12205. Replaces #12164.
## Validation
- `pnpm install`
- `pnpm test:unit -- src/composables/graph/useSelectionState.test.ts
src/components/graph/SelectionToolbox.test.ts
src/components/graph/selectionToolbox/InfoButton.test.ts`
- `pnpm typecheck:browser`
- `pnpm exec oxlint --type-aware
browser_tests/tests/selectionToolboxActions.spec.ts`
- `pnpm exec eslint --cache --no-warn-ignored
browser_tests/tests/selectionToolboxActions.spec.ts`
- `pnpm exec oxfmt --check
browser_tests/tests/selectionToolboxActions.spec.ts`
- `git show --check --stat --oneline --max-count=1`
- Push hook: `knip --cache`
Targeted Playwright was not rerun on this branch after the identical
core/1.43 run failed before assertions due to local Comfy fixture setup
(`settings` returned `Not Found` and `window.app` readiness timed out).
## Screenshots (if applicable)
N/A
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-12250-backport-cloud-1-43-fix-open-node-info-panel-from-context-menu-12205-3606d73d36508133a843db8fbb657444)
by [Unito](https://www.unito.io)
Co-authored-by: github-actions <github-actions@github.com>
## Summary
Manual backport of #12111 to `cloud/1.43`.
This suppresses false-positive missing media detection while media
loader nodes are still uploading files from drag/drop, paste, or
file-select flows.
## Conflict Resolution
The cherry-pick conflicted only in
`src/platform/missingMedia/missingMediaScan.test.ts` because the target
branch still has the older annotated-media parameterized test block
around the insertion point. I resolved it by:
- adding the new upload-state tests from #12111 above the existing
annotated-media cases
- keeping the existing release-branch annotated-media `it.each` cases
intact
- using `it.for([false, true])` only for the new upload-state test added
by #12111
## Validation
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run
src/platform/missingMedia/missingMediaScan.test.ts
src/composables/node/useNodeImageUpload.test.ts
src/extensions/core/uploadAudio.test.ts
src/composables/graph/useErrorClearingHooks.test.ts`
Result: 4 files passed, 87 tests passed.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-12187-backport-cloud-1-43-fix-suppress-missing-media-scan-during-uploads-12111-35e6d73d365081639b49c58017cea172)
by [Unito](https://www.unito.io)
*PR Created by the Glary-Bot Agent*
---
## Summary
Backport of #11790 onto `cloud/1.43`. Reverts #10849 (per-instance
promoted widget value storage) and its companion test-pinning PR #11697.
**Why this is needed on `cloud/1.43`:** Glary-Bot's consolidated
backport (#11926) cherry-picked #10849 into `cloud/1.43` on May 5 — four
days *after* the same change was reverted on `main` in #11790. The audit
didn't surface the upstream revert. As a result, `cloud/1.43` (1.43.16)
currently ships the buggy #10849 implementation while `main` / nightly
(1.45.1) doesn't. This is the cause of the Hub
`rob_realistic_2k_images_quick_variations` model/vae/clip mixup
regression reported in `#bug-dump`; the same template renders correctly
on nightly.
After this lands, `cloud/1.43` and `main` will be on the same code path
for promoted-widget serialization. The replacement fix (#11811 with
`_pendingWidgetsValuesReplay`) will land separately on `main` and can be
backported afterward.
## Changes
Mirrors the upstream revert of #10849 + #11697:
- Removes `_instanceWidgetValues` map, `_pendingWidgetsValues`
hydration, and the `widgets_values` write path in
`SubgraphNode.serialize()`
- Removes `sourceSerialize` field on `PromotedWidgetView`
- Removes the multi-instance Vitest suite
(`SubgraphNode.multiInstance.test.ts`) and the multi-instance E2E test +
workflow asset
## Conflict Resolution
Two conflicts surfaced (vs the original revert, which conflict-resolved
against #11579 on `main`):
1. **`browser_tests/tests/subgraph/subgraphSerialization.spec.ts`** —
`cloud/1.43` does not have the #11579 expanded test coverage (`Duplicate
ID Remapping`, `Legacy Prefixed proxyWidget Normalization`) that the
original revert preserved. Took the `cloud/1.43` HEAD structure and
removed only the now-unreachable multi-instance test, its helper
`getPromotedHostWidgetValues`, and the unused `ComfyPage` import.
2.
**`src/lib/litegraph/src/subgraph/SubgraphNode.multiInstance.test.ts`**
— `modify/delete` (file was present on `cloud/1.43`'s #10849 backport,
deleted by the revert). Resolved by removing the file, matching the
revert.
## Verification
**Static analysis & tests:**
- `pnpm typecheck` — clean
- `pnpm typecheck:browser` — clean
- `pnpm exec eslint` on all changed files — clean
- `pnpm test:unit -- --run subgraph` — 506 tests passing across 34
suites (`SubgraphNode.test.ts`, `promotedWidgetView.test.ts`,
`subgraphNodePromotion.test.ts`, etc.)
**Manual verification (Playwright + local dev server):**
- Started ComfyUI backend (`--cpu --port 8188`) and `pnpm dev` frontend;
loaded the page successfully.
- Loaded `subgraph-with-multiple-promoted-widgets.json` — subgraph node
hydrated with 2 promoted widgets.
- Set distinct values on each promoted widget (`first-promoted-value`,
`second-promoted-value`), serialized via `app.graph.serialize()`, and
reloaded via `app.loadGraphData(...)`. Both values round-tripped
correctly to the right widget slots — confirming the revert restores the
working single-instance path that nightly currently ships.
- Hub-fetched template (`rob_realistic_2k_images_quick_variations`)
could not be reproduced locally — `comfy.org/workflows/...` API returns
404 to anonymous curl from the sandbox, and the Hub UI flow needs auth
wired up. The team has already confirmed this template renders correctly
on nightly, which ships this same revert.
## Note on Oracle Review
Oracle flagged the multi-instance regression and the cloud/1.43
forward-compat trade-off as "critical." These describe the *intended*
behavior of this revert — the team has consciously chosen the legacy
clobber path over #10849's broken per-instance code while the
replacement (#11811) is finalized on `main`. Both findings are accepted
trade-offs, not blockers.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-12098-backport-cloud-1-43-revert-roll-back-10849-11697-per-instance-promoted-widget-va-35b6d73d36508109a715fc9d3428a294)
by [Unito](https://www.unito.io)
Co-authored-by: Alexander Brown <drjkl@comfy.org>
*PR Created by the Glary-Bot Agent*
---
## Summary
Two follow-up bug fixes that landed on `main` after the previous
backport batches (#11926, #11975).
## Picked
| PR | Subject | User-visible bug |
|---|---|---|
| `#11946` | fix: use resized QPO thumbnails (FE-538) | Floating QPO row
thumbnails currently load full-size image/video assets while the canvas
is being navigated; this swaps to `previewUrl` to use resized
thumbnails. |
| `#11950` | fix: highlight missing input slots on Vue nodes |
Required-input validation highlighting was lost on Vue-rendered node
input slots. Restores the error ring on the missing slot itself by
wiring `useExecutionErrorStore` through `NodeSlots.vue` → `InputSlot`. |
## Conflict resolution notes
- **#11946** — applied cleanly, no conflicts.
- **#11950** —
- `src/renderer/extensions/vueNodes/components/NodeSlots.vue`:
cloud/1.43 imports `cn` from `@/utils/tailwindUtil`, main from
`@comfyorg/tailwind-utils`. Kept cloud/1.43's import path; pulled in the
new `useExecutionErrorStore` and `getLocatorIdFromNodeData` imports
(both modules already exist on cloud/1.43).
- `browser_tests/tests/vueNodes/nodeStates/error.spec.ts`: incoming
version references helpers (`ErrorsTabHelper`, `cleanupFakeModel`) that
don't exist on cloud/1.43. Restored cloud/1.43's version of the test
file and removed the new
`vue-node-required-input-missing-slot-error-chromium-linux.png`
snapshot. The runtime fix in `NodeSlots.vue` lands; the new e2e
regression test would need its helper deps backported separately.
## Verification
- ✅ `pnpm typecheck` clean
- ✅ `pnpm typecheck:browser` clean
- ✅ `pnpm knip` clean
- ✅ Targeted unit tests passing: `NodeSlots.test.ts` (9),
`useErrorClearingHooks.test.ts` (24), `JobAssetsList.test.ts` (16) —
49/49 passed
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11996-backport-cloud-1-43-QPO-thumbnails-11946-Vue-node-slot-validation-11950-3576d73d365081e5b48bd3552cd34294)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>
Co-authored-by: jaeone94 <89377375+jaeone94@users.noreply.github.com>
## Summary
Backport #12038 to `cloud/1.43` so the affected Reka dropdowns/menus
stay above their containing PrimeVue dialogs.
## Changes
- **What**: Cherry-picked squash merge commit `1ab9752af` from #12038
and preserved the parent-scoped FE-569 compatibility patch for the six
confirmed PrimeVue parent + Reka child overlay surfaces.
- **What**: Kept the 1.43-era component paths where they differ from
`main`; notably `UploadModelConfirmation.vue` still imports
`@/components/input/SingleSelect.vue` on `cloud/1.43`.
- **What**: Resolved the `cloud/1.43`-specific conflict in
`UploadModelConfirmation.vue` by preserving the branch-local select
import and adding only the PrimeVue overlay child style helper usage.
- **Breaking**: None. New style props are optional and this remains a
temporary PrimeVue to Reka migration bridge.
- **Dependencies**: None.
## Review Focus
- Manual QA is needed before merge. I verified code-level compatibility,
but did not manually exercise the stable branch UI.
- Please confirm the same six entry points from #12038 on `cloud/1.43`:
Workflow Template filters, Manager dialog header controls, Asset Browser
filter bar, Asset Browser model info panel, Upload Model confirmation
model type select, and Settings > Keybinding controls.
- Please keep this as a narrow backport of #12038; this should not
expand into a broader overlay/z-index refactor.
## Validation
- `pnpm install --frozen-lockfile`
- `pnpm format -- $(git diff --name-only --diff-filter=ACM)`
- `pnpm exec vitest run src/composables/usePopoverSizing.test.ts`
- `pnpm typecheck`
- `pnpm lint` passed with existing unrelated warnings only
- `pnpm knip`
- Commit hook ran normally: lint-staged `stylelint`, `oxfmt`, `oxlint`,
`eslint --fix`, and `pnpm typecheck`
- Push hook ran normally: `pnpm knip`
Backport of #12038.
Linear: FE-569
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-12045-cloud-1-43-Backport-12038-keep-Reka-overlays-above-PrimeVue-dialogs-3596d73d36508111bb1ccb411ddfe006)
by [Unito](https://www.unito.io)
Backport of #11950 to `cloud/1.43`.
This manually backports the Vue node required-input slot highlight fix
and unit coverage only. E2E screenshot coverage from the original PR is
intentionally omitted because the 1.43 browser test infrastructure
diverges from main.
Verification:
- `pnpm test:unit
src/renderer/extensions/vueNodes/components/NodeSlots.test.ts
src/composables/graph/useErrorClearingHooks.test.ts
src/stores/executionErrorStore.test.ts`
- `pnpm typecheck`
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-12005-backport-cloud-1-43-fix-highlight-missing-input-slots-on-Vue-nodes-3586d73d3650810880def209d7a443ac)
by [Unito](https://www.unito.io)
*PR Created by the Glary-Bot Agent*
---
## Summary
Small follow-up to #11926 picking up two Load3D bug fixes the strict
pass identified as still missing on `cloud/1.43`. Skips one
originally-shortlisted candidate (#11810) after verification — the bug
doesn't exist on `cloud/1.43`.
## Picked
| PR | Subject | User-visible bug |
|---|---|---|
| `#11825` | fix(load3d): snapshot original materials before reapplying
materialMode | Wireframe / normal / depth modes don't restore the
model's true original materials on reload |
| `#11838` | fix(load3d): preserve unknown Model Config fields with
spread | Future Model Config fields silently dropped on viewer dialog
cancel/apply (Fixes#11346) |
## Skipped
- **`#11810`** ("use capitalize for keybinding badges") — verified not
applicable. The bug is `uppercase` Tailwind class on the Tag in
`KeyComboDisplay.vue`. `cloud/1.43`'s file already uses neither
`uppercase` nor `capitalize` — it just renders whatever
`KeyComboImpl.getKeySequences()` returns directly, which is already
canonical (`Ctrl`, `Alt`, `Shift`). No action needed.
## Conflict resolution notes
- **`#11825`** — modify/delete on `SceneModelManager.test.ts` (deleted
on cloud/1.43). Dropped the test additions; runtime fix in
`SceneModelManager.ts` applied cleanly.
- **`#11838`** — text conflict in `useLoad3dViewer.ts` because
cloud/1.43 lacks gizmo support. Kept the spread fix
(`...existingModelConfig` + `ModelConfig` typing) — that *is* the bug
fix — and omitted the gizmo-related Model Config additions.
## Verification
- ✅ `pnpm typecheck` clean
- ✅ `pnpm typecheck:browser` clean
- ✅ `pnpm knip` clean
- ✅ `pnpm vitest run src/composables/useLoad3dViewer.test.ts` — 39/39
passed
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11975-backport-cloud-1-43-Load3D-fixes-follow-up-11825-11838-3576d73d365081428051cb75e1bb2318)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
## Summary
- Backports #11908 to `cloud/1.43`.
- Keeps the shared runtime fix in
`src/composables/graph/useErrorClearingHooks.ts`.
- Keeps the focused unit coverage in
`src/composables/graph/useErrorClearingHooks.test.ts`.
- Drops the E2E-only change to
`browser_tests/tests/propertiesPanel/errorsTabCloudMissingModels.spec.ts`
from this stable backport.
## Backport notes
- Auto-backport is not practical here because #11908 was stacked on the
#11907 regression-test PR. Cherry-picking #11908 into `cloud/1.43` pulls
a modify/delete conflict for the E2E file that does not exist on this
branch.
- Backporting #11907 first would require newer browser-test
fixture/test-infra changes and would add stable-branch test churn that
is unrelated to the runtime fix.
- This is still safe because main keeps the Cloud E2E regression
coverage from #11907/#11908, while this backport carries the production
fix plus unit coverage for the shared replay-scan behavior.
## Verification
- `pnpm typecheck` (pre-commit hook)
- `pnpm exec vitest run
src/composables/graph/useErrorClearingHooks.test.ts`
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11963-backport-cloud-1-43-fix-skip-nested-subgraph-containers-in-replay-scan-3576d73d3650812a82fbe1e54a4d8f99)
by [Unito](https://www.unito.io)
*PR Created by the Glary-Bot Agent*
---
## Summary
Consolidated backport of bug fixes from `origin/main` (which feeds
`v1.44.16`) onto `cloud/1.43`. Cherry-picks every applicable `fix:`
commit identified in the prior backport-gap audit so `cloud/1.43`
doesn't keep falling further behind.
- **35 fixes cherry-picked** (out of 49 audited; 14 dropped — see
"Dropped commits" below).
- Verification (run on this branch): `pnpm typecheck` clean, `pnpm knip`
clean, `pnpm lint` 0 errors (warning count 2976 vs cloud/1.43 baseline
2877 — delta is from new test files brought in by the picks, not new
lint errors), `pnpm test:unit` 7842 passed / 8 skipped.
This is a single consolidated PR per request — not a per-fix backport
stream. Each commit has the original SHA recorded via `cherry picked
from commit ...` so individual reverts remain possible.
## Picked fixes (35)
App / runtime stability
- `#10995` auto fit-to-view on first subgraph entry
- `#11240` re-sync collapsed node slot positions after subgraph fitView
- `#10849` store promoted widget values per SubgraphNode instance
- `#10361` place cloned node above original in Vue renderer
- `#9935` trigger Vue reactivity on output slot type changes in
matchType
- `#11541` stop duplicate node creation when dropping image on Vue nodes
- `#11779` ensure escape key/graph navigation cancels ghost node
placement
- `#11063` disable pointer events on non-visible DOM widget overlays
- `#11295` include focusMode in splitter refresh key to prevent panel
resize
- `#11487` render edit pencil icon correctly in properties panel header
- `#11296` remove hover dimming overlay on image nodes
- `#11542` keep finished badge fully opaque in ProgressToastItem
- `#11713` search bar layout and autocomplete clipping on Desktop at
small sizes
- `#11570` dedupe keybinding modifier display
- `#11144` fix(vite): hide git rev-parse window on Windows
Cloud / subscription / workspace
- `#11130` track workspace subscription success on immediate subscribe
- `#11622` dedupe pending checkout attempt construction
- `#11463` show credits in legacy user popover on non-cloud
distributions
- `#11636` enable Chrome password autofill on signup form
- `#11520` fix(manager): migrate 4 endpoints GET→POST for CSRF hardening
(security)
- `#11425` remove deleted workflow from search results in sidebar
Assets / blueprints
- `#11700` route context menu Download through downloadMultipleAssets
- `#11502` render asset fixtures in AssetBrowserModal stories
- `#11759` hide blueprint node id in search
- `#11573` translate blueprint label
Telemetry / progress / feature flags
- `#11174` guard progress_text before canvas init
- `#11384` route progress_text feature flag check through getDevOverride
- `#11417` reset file input value after selection to allow same-file
reupload
Load3D
- `#11265` fix(load3d): restore missed hover state when viewer init is
async
- `#11546` load3d used wrong i18n key, add test
- `#11359` chain Load3D node lifecycle callbacks to preserve widget
cleanup
GLSL preview
- `#11010` resolve incorrect GLSL live preview for non-primitive widget
types
- `#11517` add GLSL live update when custom size is changed
Misc
- `#10374` consolidate `--color-coral-red` variables into
`--color-coral`
- `#11283` reduce noise in coverage Slack notifications
## Dropped commits (14) — need separate manual backport
These cherry-picks pulled in code that depends on infrastructure not
present on `cloud/1.43`, or required permissions a bot account does not
hold. Individual backport tickets recommended:
| PR | Subject | Blocker |
|---|---|---|
| #11224 | fix(ci): resolve pnpm version in release workflow for
frontend/ checkout path | touches
`.github/workflows/release-biweekly-comfyui.yaml` — bot lacks
`workflows` permission. Also depends on prerequisite #11223
(patch-release support) not on cloud/1.43. Needs human-authored
backport. |
| #11329 | prevent duplicate prepareForSave + conflicting is_new
telemetry on self-overwrite Save As | depends on
`ChangeTracker.prepareForSave` API added by #10816 / #11328 (refactors
not on cloud/1.43) |
| #11358 | render dates in Secrets panel for timestamps with >3
fractional-second digits | depends on `formatToISOWithSeconds` and other
utils in `dateTimeUtil.ts` not on cloud/1.43 |
| #11539 | cancel-subscription dialog renders Invalid Date for ISO
fractional seconds | depends on `parseIsoDateSafe` from #11358 |
| #11480 | avoid escaped secret date labels | builds on #11358's
SecretListItem changes |
| #11524 | localize secret date labels | builds on #11358's
SecretListItem changes |
| #11321 | show asset display names in bulk delete confirmation | brings
in `useMediaAssetActions.test.ts` requiring `downloadAssets` API not on
cloud/1.43 |
| #11610 | naming strategy for multi-job asset exports | same
`useMediaAssetActions` test infrastructure |
| #11737 | report total file count, not job count, in ZIP export toast |
same `useMediaAssetActions` test infrastructure |
| #11538 | resolve mesh widget thumbnails via asset preview API |
depends on `FormDropdownMenuItemProps` type, `useWidgetSelectItems` not
on cloud/1.43 |
| #11492 | use getAssetFilename in asset browser to avoid showing hashes
| same `useWidgetSelectItems` infrastructure |
| #11836 | fix(load3d): dispose THREE.Points GPU resources in
clearModel() | brings in `SceneModelManager.test.ts` referencing
`ModelAdapter` infrastructure not on cloud/1.43 (memory-leak fix —
manual backport recommended) |
| #11807 | fix(load3d): suppress error toast on 404 when loading output
model file | brings in `LoaderManager.ts` rewritten on main with
`ModelAdapter` not on cloud/1.43 |
| #11164 | enable playwright/no-force-option lint rule | requires oxlint
upgrade with playwright plugin not pinned in cloud/1.43 |
## Conflict resolution notes
Most picks applied cleanly. Conflicts encountered:
- **Test-only / snapshot-only conflicts** — resolved with `-X theirs`
(cloud/1.43 just doesn't have those test files yet).
- **Modify/delete conflicts** (test file deleted on cloud/1.43, modified
by the fix on main) — accepted the incoming version.
- **`src/components/searchbox/v2/NodeSearchListItem.test.ts`** — pulled
in by #11759 but referenced `ComfyNodeDefImpl` shape only on main.
Removed the test file from the backport commit so the runtime fix lands;
test should be rewritten/backported separately if desired.
- **`browser_tests/tests/vueNodes/glslPreview.spec.ts` and
`browser_tests/tests/subgraph/subgraphBreadcrumb.spec.ts`** — pulled in
by #11517 / #11573 but reference helpers
(`@e2e/fixtures/helpers/ExecutionHelper`, `SubgraphBreadcrumbHelper`)
not on cloud/1.43. Removed the spec files from the respective backport
commits; runtime fixes preserved.
## Out-of-scope review note
Code review flagged a behavioral concern in
`subgraphNavigationStore.ts:142-153,173-177` (`restoreViewport()` may
auto-fit on first root-graph load even when the workflow already had a
viewport). This is **pre-existing on `main`** (the cherry-picked code is
identical to `origin/main` for that file region) — not introduced by
this PR. Filing a separate ticket is recommended; not in scope for a
backport batch.
## How to validate locally
```bash
git checkout glary/cloud-1.43-batch-backport-fixes
pnpm install --frozen-lockfile
pnpm typecheck # clean
pnpm knip # clean
pnpm lint # 0 errors
pnpm test:unit # 7842 passed, 8 skipped
```
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11926-backport-cloud-1-43-consolidated-bug-fixes-from-main-v1-44-16-3566d73d3650812393d3e0ea79ab9a14)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Terry Jia <terryjia88@gmail.com>
Co-authored-by: Dante <bunggl@naver.com>
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>
Co-authored-by: dante <dante@danteui-MacStudio.local>
Co-authored-by: Glary-Bot <glary-bot@users.noreply.github.com>
Co-authored-by: guill <jacob.e.segal@gmail.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: pythongosssss <125205205+pythongosssss@users.noreply.github.com>
Co-authored-by: Simon Pinfold <synap5e@users.noreply.github.com>
Co-authored-by: comfydesigner <alextov@comfy.org>
Co-authored-by: Alex <alex@Mac.lan>
Co-authored-by: Robin Huang <robin.j.huang@gmail.com>
Co-authored-by: Kelly Yang <124ykl@gmail.com>
Co-authored-by: jaeone94 <89377375+jaeone94@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
Manual backport of #11873 to `cloud/1.43`.
Cherry-picked squash merge commit
`04918360ebcf69adffdf5d8ff6603c24c7a2809a`.
## Why
#11873 moves missing asset detection to use exact BLAKE3 hash lookups
first when a workflow exposes a valid hash, then falls back to the
legacy asset-list matching path for non-hash, invalid, or transiently
unverifiable candidates.
For media inputs, the legacy fallback now reads from a separate
public-inclusive input asset cache in `assetService` instead of reusing
`assetsStore.inputAssets`. That keeps the UI/widget asset list user-only
while allowing missing input detection to account for public cloud
assets loaded by templates, avoiding false-positive missing media on
initial workflow load.
## Conflict resolution
- `src/platform/assets/services/assetService.test.ts`: `cloud/1.43` only
had the existing `shouldUseAssetBrowser` coverage, while #11873 adds
asset hash, upload validation, pagination, and public-inclusive input
cache tests. Kept the #11873 test expansion; the existing test coverage
is preserved in the incoming file.
- `src/stores/assetsStore.test.ts`: expanded the mocked `assetService`
surface and kept #11873's appended store tests for asset metadata/tag
updates, deletion state, input name mapping, and input cache
invalidation. The runtime `assetsStore.ts` changes auto-merged cleanly.
- All production files auto-merged cleanly.
## Validation
- `pnpm test:unit -- run
src/platform/assets/services/assetService.test.ts
src/stores/assetsStore.test.ts` ✅ (91/91 passing)
- `pnpm typecheck` ✅
- `pnpm exec oxfmt --check src/platform/assets/services/assetService.ts
src/platform/assets/services/assetService.test.ts
src/platform/missingMedia/missingMediaScan.ts
src/platform/missingMedia/missingMediaScan.test.ts
src/platform/missingModel/missingModelScan.ts
src/platform/missingModel/missingModelScan.test.ts
src/stores/assetsStore.ts src/stores/assetsStore.test.ts` ✅
- `git diff --check` ✅
- Commit hook also ran `oxfmt`, `oxlint`, `eslint`, and `pnpm typecheck`
on the changed files ✅
- Push hook ran `pnpm knip --cache` ✅
Original PR: #11873
Original commit: `04918360ebcf69adffdf5d8ff6603c24c7a2809a`
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11891-backport-cloud-1-43-fix-use-hash-lookup-for-missing-asset-detection-11873-3566d73d365081d38609fbe289a18c49)
by [Unito](https://www.unito.io)
Manual backport of #11778 to `cloud/1.43`.
Cherry-picked merge commit `46ba65e25cbfbd8214aec8b61951b77aa2db19e5`.
## Conflict resolution
- `browser_tests/tests/vueNodes/widgets/advancedWidgets.spec.ts`: kept
#11778's `SHOW_ADVANCED_INPUTS`/`HIDE_ADVANCED_INPUTS` constants and
collapsed-node regression test, resolving only the assertion text/style
drift from `cloud/1.43`.
- `src/renderer/extensions/vueNodes/components/LGraphNode.test.ts`: kept
the `cloud/1.43` `setActivePinia` setup, added #11778's
`useSettingStore` mock/i18n entries and collapsed advanced footer tests,
and did not bring the unrelated `app` import from later main drag/drop
work.
- `src/renderer/extensions/vueNodes/components/LGraphNode.vue`: #11778's
runtime guard applied cleanly (`isCollapsed` hides the advanced footer
button).
## Validation
- `pnpm typecheck`
- `pnpm typecheck:browser`
- `pnpm test:unit -- run
src/renderer/extensions/vueNodes/components/LGraphNode.test.ts`
- `git diff --check`
- Commit/push hooks also ran lint-staged formatting/lint checks and
`pnpm knip`
┆Issue is synchronized with this [Notion
page](https://app.notion.com/p/PR-11796-backport-cloud-1-43-fix-hide-advanced-footer-button-on-collapsed-Vue-nodes-3536d73d365081f0b440c4ed3c622cd5)
by [Unito](https://www.unito.io)
Manual backport of #10741 to `cloud/1.43`.
Cherry-picked merge commit `b157182a203671f4ea3bfa45ee8c30ae6b725676`.
## Conflict resolution
-
`browser_tests/tests/collapsedNodeLinks.spec.ts-snapshots/subgraph-entry-collapsed-node-links-chromium-linux.png`:
`cloud/1.43` did not have this screenshot expectation, while #10741 adds
the subgraph collapsed-node-link screenshot test. Kept the PR version.
## Validation
- `pnpm typecheck`
- `pnpm typecheck:browser`
- `pnpm test:unit -- run src/lib/litegraph/src/LGraphNode.test.ts
src/renderer/extensions/vueNodes/components/LGraphNode.test.ts
src/renderer/extensions/vueNodes/components/NodeFooter.test.ts
src/renderer/extensions/vueNodes/composables/useVueNodeResizeTracking.test.ts`
- Commit/push hooks also ran lint-staged formatting/lint checks and
`pnpm knip`
┆Issue is synchronized with this [Notion
page](https://app.notion.com/p/PR-11789-backport-cloud-1-43-refactor-inline-node-footer-layout-to-fix-selection-bounding-box-3536d73d36508146b340e5690b1023ef)
by [Unito](https://www.unito.io)
Backport of #11568 and #11587 to `cloud/1.43`.
## Changes
**ci-tests-e2e.yaml**
- Remove `paths-ignore` from `pull_request` trigger
- Add `changes` job using `dorny/paths-filter` to skip e2e on
markdown-only PRs
- Gate `setup`, `merge-reports`, `comment-on-pr-start`, and
`deploy-and-comment` on `should_run`
- Add `e2e-status` gate job that succeeds when tests pass OR when
skipped due to no relevant changes
**ci-tests-e2e-forks.yaml**
- Switch artifact download to `dawidd6/action-download-artifact@v12`
with regexp matching
- Add `hashFiles('reports/**') != ''` guard to Handle Test Completion
step
All cloud/1.43-specific values preserved: container `0.0.16`, cloud
build step, 4-browser matrix with `cloud`, conditional artifact
download, pnpm-action-setup `v4.4.0`.
- Fixes#11568
- Fixes#11587
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11593-backport-cloud-1-43-ci-filter-e2e-workflow-add-e2e-status-gate-34c6d73d36508138aee2f85acf9d04c8)
by [Unito](https://www.unito.io)
Co-authored-by: Amp <amp@ampcode.com>
Backports #11286
## Summary
- backport frontend subscription success recovery to `cloud/1.43`
## Backport Delta
- `18ef350db` is the cherry-pick of main's `ecb7fd479` from #11286
- the backport-only review surface is intentionally small:
- `src/platform/cloud/subscription/components/PricingTable.test.ts`:
adapt the assertions to `cloud/1.43`'s existing `mount`-based test
harness
- `src/platform/cloud/subscription/constants/tierPricing.ts`: one-line
type-only export (`type SubscriptionTier` -> `export type
SubscriptionTier`)
- runtime review should therefore mostly follow #11286 rather than
treating this as a novel branch-specific implementation
## Why
The automated backport failed because `cloud/1.43` had drifted in
`PricingTable.test.ts`. The runtime code itself cherry-picked cleanly;
the only non-test branch-local change was the small `SubscriptionTier`
export needed to match the API surface expected by the backported code.
## Validation
- `pnpm exec vitest run
src/platform/cloud/subscription/composables/useSubscription.test.ts
src/platform/cloud/subscription/components/PricingTable.test.ts
src/platform/cloud/subscription/utils/subscriptionCheckoutUtil.test.ts
src/platform/telemetry/providers/cloud/GtmTelemetryProvider.test.ts`
- `pnpm typecheck`
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-11476-backport-cloud-1-43-feat-add-frontend-subscription-success-recovery-3486d73d3650813ebc87c162a8aa759e)
by [Unito](https://www.unito.io)
Manual backport of #10856 to `cloud/1.43`.
Paired with core/1.43 backport #11217.
## Conflicts resolved
Same two files, same root cause as the core/1.43 backport — #10856
extracted the inline `cleanup_fake_model` block into a shared
`cleanupFakeModel` helper in
`browser_tests/tests/propertiesPanel/ErrorsTabHelper.ts`:
- `browser_tests/tests/errorOverlay.spec.ts`
- `browser_tests/tests/propertiesPanel/errorsTabMissingModels.spec.ts`
`cloud/1.43` still carries the original inline
`expect(cleanupOk).toBeTruthy()` form. #10856 replaces both with `await
cleanupFakeModel(comfyPage)` calling the helper added by this same PR.
Resolution: accepted the PR version (helper call) on both conflict
sites. The helper itself is added as part of this backport, so no
runtime behavior is lost.
## Verification
- No residual conflict markers
- Cherry-picked commit carries the entire #10856 squash (45 files,
+3596/-209)
## Original PR summary
See #10856 for full behavioral description, test plan, and screenshots.
---
FixesComfy-Org/ComfyUI#13256 on cloud/1.43
┆Issue is synchronized with this [Notion
page](https://app.notion.com/p/PR-11218-backport-cloud-1-43-fix-exclude-muted-bypassed-nodes-from-missing-asset-detection-1-3426d73d3650811e9a27d4a334c74de8)
by [Unito](https://www.unito.io)
Co-authored-by: Christian Byrne <cbyrne@comfy.org>