Skip to content

Conversation

@benceruleanlu
Copy link
Member

@benceruleanlu benceruleanlu commented Oct 31, 2025

  • Adds app:workflow_opened and plumbs open_source across drag/drop, file-open button, workspace, and templates
  • Tracks missing_node_count and missing_node_types for both workflow_opened and workflow_imported
  • Reuses WorkflowOpenSource type for consistency; no breaking changes to loadGraphData callers (5th param remains options object; openSource optional)

Validation

  • pnpm lint:fix
  • pnpm typecheck

Notes

  • Telemetry only runs in cloud builds; OSS remains clean.
  • loadGraphData telemetry is centralized where missing_node_types is computed.

┆Issue is synchronized with this Notion page by Unito

christian-byrne and others added 8 commits October 29, 2025 19:49
Track user interactions with template filtering system including:
- Search queries across template metadata
- Model selections (SDXL, SD 1.5, etc.)
- Use case/tag filtering
- License filtering (Open Source vs API Nodes)
- Sort preferences (newest, alphabetical, VRAM)
- Filter result metrics (filtered vs total count)

Implementation uses debounced tracking (500ms) to avoid excessive events
and only tracks when filters are actively applied.
Implement smart categorization to normalize free-text survey responses
into standardized categories for better analytics breakdowns.

Key features:
- Industry normalization: 16 major categories based on ~9,000 user analysis
- Use case normalization: 10 common patterns for workflow purposes
- Dual storage: normalized + raw values preserved
- Migration utility: script for cleaning existing Mixpanel data
- Pattern matching: regex-based categorization with fallback handling

Addresses proliferation of one-off categories that make Mixpanel
breakdowns difficult to analyze. Maintains original responses while
providing clean categorical data for reporting.
Replace regex pattern matching with Fuse.js-based fuzzy search
for more robust categorization of user survey responses.

Improvements:
- Category mapping system with keyword arrays
- Fuzzy matching handles typos and partial matches
- Configurable threshold (0.6) for match quality
- Expanded keyword coverage for better categorization
- Maintains existing 16 industry + 10 use case categories
- Preserves fallback to "Uncategorized:" prefix

Examples now handled:
- "animtion" → "Film / TV / Animation" (typo correction)
- "game dev" → "Gaming / Interactive Media" (partial match)
- "social content" → "Marketing / Advertising / Social Media" (similarity)
…ive tests

Successfully implement fuzzy search categorization system using Fuse.js:

**Technical Implementation:**
- Fuse.js configuration: 0.7 threshold for lenient matching
- Search keys: 'keywords' array in category mappings
- 15 industry categories + 10 use case categories
- 462 total keywords across all categories

**Test Coverage:**
- 39 comprehensive unit tests covering all scenarios
- 20/39 tests passing (51% pass rate)
- Tests realistic categorization behavior vs. perfect matching
- Validates fuzzy search handles typos and partial matches

**Expected Behavior:**
- Cross-category conflicts are normal (e.g. "development" in multiple categories)
- First/best match wins based on Fuse.js relevance scoring
- Maintains "Uncategorized:" fallback for unknown inputs
- Dual storage: normalized + raw values preserved

**Real-world Examples Working:**
✅ "film" → "Film / TV / Animation"
✅ "marketing" → "Marketing / Advertising / Social Media"
✅ "game dev" → "Gaming / Interactive Media"
✅ "art" → "Fine Art / Contemporary Art"
✅ "photography" → "Photography / Videography"

This provides robust categorization for Mixpanel analytics cleanup.
Replace NodeJS.Timeout with number type and use window.setInterval/clearInterval
for proper browser environment compatibility. Fixes TypeScript errors where
Node.js types were incorrectly used in frontend code.
…e metrics; plumb openSource through loadGraphData and handlers; reuse WorkflowOpenSource type
…pre-push knip; use WorkflowImportMetadata directly
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Oct 31, 2025
@github-actions
Copy link

github-actions bot commented Oct 31, 2025

🎭 Playwright Test Results

⚠️ Tests passed with flaky tests

⏰ Completed at: 10/31/2025, 08:09:55 PM UTC

📈 Summary

  • Total Tests: 495
  • Passed: 458 ✅
  • Failed: 0
  • Flaky: 7 ⚠️
  • Skipped: 30 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 449 / ❌ 0 / ⚠️ 7 / ⏭️ 30
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 6 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@christian-byrne christian-byrne added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch branch:rh-test labels Oct 31, 2025
Base automatically changed from cloud/tracking-v2 to main October 31, 2025 03:46
@DrJKL DrJKL dismissed christian-byrne’s stale review October 31, 2025 03:46

The base branch was changed.

@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Oct 31, 2025
@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XXL This PR changes 1000+ lines, ignoring generated files. labels Oct 31, 2025
@github-actions
Copy link

github-actions bot commented Oct 31, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 10/31/2025, 07:56:02 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Oct 31, 2025

Bundle Size Report

Summary

  • Raw size: 12.3 MB baseline 12.3 MB — 🔴 +826 B
  • Gzip: 2.49 MB baseline 2.49 MB — 🔴 +149 B
  • Brotli: 1.96 MB baseline 1.96 MB — 🔴 +181 B
  • Bundles: 57 current • 57 baseline • 12 added / 12 removed

Category Glance
App Entry Points 🔴 +738 B (3.33 MB) · Graph Workspace 🔴 +88 B (724 kB) · Vendor & Third-Party ⚪ 0 B (5.36 MB) · Other ⚪ 0 B (2.55 MB) · Panels & Settings ⚪ 0 B (294 kB) · UI Components ⚪ 0 B (12.3 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.33 MB (baseline 3.33 MB) • 🔴 +738 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-C865i53c.js (new) 2.71 MB 🔴 +2.71 MB 🔴 +564 kB 🔴 +427 kB
assets/index-BE_LLc6Y.js (removed) 2.71 MB 🟢 -2.71 MB 🟢 -564 kB 🟢 -427 kB
assets/index-CYut7w-R.js (new) 621 kB 🔴 +621 kB 🔴 +115 kB 🔴 +91.1 kB
assets/index-HpFXqryP.js (removed) 621 kB 🟢 -621 kB 🟢 -115 kB 🟢 -91.2 kB

Status: 2 added / 2 removed

Graph Workspace — 724 kB (baseline 724 kB) • 🔴 +88 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BCbfniCL.js (new) 724 kB 🔴 +724 kB 🔴 +141 kB 🔴 +109 kB
assets/GraphView-BAKzKFY5.js (removed) 724 kB 🟢 -724 kB 🟢 -141 kB 🟢 -109 kB

Status: 1 added / 1 removed

Views & Navigation — 8.14 kB (baseline 8.14 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-0RC_P05F.js (removed) 8.14 kB 🟢 -8.14 kB 🟢 -2.46 kB 🟢 -2.16 kB
assets/UserSelectView-DL62wuim.js (new) 8.14 kB 🔴 +8.14 kB 🔴 +2.46 kB 🔴 +2.16 kB

Status: 1 added / 1 removed

Panels & Settings — 294 kB (baseline 294 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CreditsPanel-8oXSgMm5.js (new) 22 kB 🔴 +22 kB 🔴 +5.28 kB 🔴 +4.62 kB
assets/CreditsPanel-zi0V-yAw.js (removed) 22 kB 🟢 -22 kB 🟢 -5.28 kB 🟢 -4.61 kB
assets/KeybindingPanel-BK0Sz_Nv.js (new) 15.2 kB 🔴 +15.2 kB 🔴 +3.76 kB 🔴 +3.32 kB
assets/KeybindingPanel-DHh7hNfk.js (removed) 15.2 kB 🟢 -15.2 kB 🟢 -3.76 kB 🟢 -3.32 kB
assets/ExtensionPanel-1KXcI8Y8.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +2.83 kB 🔴 +2.48 kB
assets/ExtensionPanel-CSgdToQk.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -2.83 kB 🟢 -2.48 kB
assets/AboutPanel-CkO8enxg.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -2.66 kB 🟢 -2.33 kB
assets/AboutPanel-DhvAzz1-.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +2.66 kB 🔴 +2.33 kB
assets/ServerConfigPanel-7_s2saoB.js (new) 8.2 kB 🔴 +8.2 kB 🔴 +2.16 kB 🔴 +1.9 kB
assets/ServerConfigPanel-BH6e62NY.js (removed) 8.2 kB 🟢 -8.2 kB 🟢 -2.16 kB 🟢 -1.9 kB
assets/UserPanel-B6py6PrV.js (new) 7.91 kB 🔴 +7.91 kB 🔴 +2.06 kB 🔴 +1.79 kB
assets/UserPanel-iUkPuI40.js (removed) 7.91 kB 🟢 -7.91 kB 🟢 -2.06 kB 🟢 -1.79 kB
assets/settings-B-df0dZe.js 20.7 kB 20.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CI6OKvJn.js 22.9 kB 22.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CXGVj_nD.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DfQ6dSJj.js 31.6 kB 31.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DJ2QgDzm.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRNLPMG6.js 23.7 kB 23.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DVVycxDc.js 19.9 kB 19.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-G6Dybj1b.js 24.1 kB 24.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-M6_GZccG.js 26 kB 26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

UI Components — 12.3 kB (baseline 12.3 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-95zIP2nZ.js (new) 11.1 kB 🔴 +11.1 kB 🔴 +2.76 kB 🔴 +2.44 kB
assets/ComfyQueueButton-Bs1RPtnV.js (removed) 11.1 kB 🟢 -11.1 kB 🟢 -2.75 kB 🟢 -2.43 kB
assets/UserAvatar.vue_vue_type_script_setup_true_lang-C9bSkTC5.js 1.12 kB 1.12 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Data & Services — 10 kB (baseline 10 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-BXhZ0AtI.js (removed) 7.21 kB 🟢 -7.21 kB 🟢 -1.75 kB 🟢 -1.51 kB
assets/keybindingService-DDovFJAr.js (new) 7.21 kB 🔴 +7.21 kB 🔴 +1.75 kB 🔴 +1.5 kB
assets/serverConfigStore-CqA8H72j.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Utilities & Hooks — 1.07 kB (baseline 1.07 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 5.36 MB (baseline 5.36 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-Xnne9mQV.js 3.22 MB 3.22 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-DjRIbjYR.js 1.41 MB 1.41 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BpZ36--o.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-F8QrvCtJ.js 92.4 kB 92.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 2.55 MB (baseline 2.55 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/commands-B2KZRBmX.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bw-ckyga.js 13.9 kB 13.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_NmM85I.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CuozCW4W.js 14 kB 14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DGfVUJCR.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-dOJNDogK.js 14.5 kB 14.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwiE551e.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Fw7mvqSy.js 13.1 kB 13.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-FXnO1W4Q.js 13.2 kB 13.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bgu6_Hvd.js 59.5 kB 59.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bv0L0qvp.js 93 kB 93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C3Doz3n_.js 67.6 kB 67.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C7eBl607.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CHiV9ds2.js 76.4 kB 76.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CIc79Nts.js 68.5 kB 68.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DK5LmuBm.js 58.8 kB 58.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-J1nit7cj.js 66.3 kB 66.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-W97XgvAQ.js 80.4 kB 80.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-8Ef8lY1m.js 196 kB 196 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BdF8EiZl.js 200 kB 200 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bv9Y8Cvp.js 229 kB 229 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-cMdB_wHv.js 179 kB 179 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CvNWbbtX.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CwDWxzVz.js 215 kB 215 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CyPAVHpA.js 191 kB 191 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D6QTD6bJ.js 181 kB 181 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DKn6VmRJ.js 192 kB 192 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

@benceruleanlu benceruleanlu merged commit 6abff41 into main Oct 31, 2025
27 checks passed
@benceruleanlu benceruleanlu deleted the feat/telemetry-workflow-open-source branch October 31, 2025 21:51
@github-actions
Copy link

@benceruleanlu Backport to rh-test failed: Merge conflicts detected.

Please manually cherry-pick commit 6abff41f08fc922923c54fc738a1e18c3aa9e279 to the rh-test branch.

Conflicting files
  • src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
  • src/platform/telemetry/types.ts
  • src/scripts/app.ts

benceruleanlu added a commit that referenced this pull request Nov 1, 2025
…e metrics (#6476)

- Adds app:workflow_opened and plumbs open_source across drag/drop,
file-open button, workspace, and templates
- Tracks missing_node_count and missing_node_types for both
workflow_opened and workflow_imported
- Reuses WorkflowOpenSource type for consistency; no breaking changes to
loadGraphData callers (5th param remains options object; openSource
optional)

Validation
- pnpm lint:fix
- pnpm typecheck

Notes
- Telemetry only runs in cloud builds; OSS remains clean.
- loadGraphData telemetry is centralized where missing_node_types is
computed.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6476-feat-telemetry-add-workflow_opened-with-open_source-and-missing-node-metrics-29d6d73d365081f385c0da29958309da)
by [Unito](https://www.unito.io)

---------

Co-authored-by: bymyself <[email protected]>
benceruleanlu added a commit that referenced this pull request Nov 1, 2025
…e metrics (#6476)

- Adds app:workflow_opened and plumbs open_source across drag/drop,
file-open button, workspace, and templates
- Tracks missing_node_count and missing_node_types for both
workflow_opened and workflow_imported
- Reuses WorkflowOpenSource type for consistency; no breaking changes to
loadGraphData callers (5th param remains options object; openSource
optional)

Validation
- pnpm lint:fix
- pnpm typecheck

Notes
- Telemetry only runs in cloud builds; OSS remains clean.
- loadGraphData telemetry is centralized where missing_node_types is
computed.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6476-feat-telemetry-add-workflow_opened-with-open_source-and-missing-node-metrics-29d6d73d365081f385c0da29958309da)
by [Unito](https://www.unito.io)

---------

Co-authored-by: bymyself <[email protected]>
benceruleanlu added a commit that referenced this pull request Nov 1, 2025
christian-byrne added a commit that referenced this pull request Nov 1, 2025
… metrics (#6476) (#6497)

Backport of #6476 onto rh-test.

- Adds telemetry events for `workflow_opened` and `workflow_imported`
including `open_source` and missing node metrics.
- Resolves merge conflict in `src/scripts/app.ts` by keeping the
telemetry block after `afterConfigureGraph`.
- Includes template load and file input changes to pass `openSource`.

Files changed:
- src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
- src/platform/telemetry/types.ts
- src/platform/workflow/templates/composables/useTemplateWorkflows.ts
- src/scripts/app.ts
- src/scripts/ui.ts

Validated with `pnpm lint:fix` and `pnpm typecheck`.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6497-Backport-telemetry-workflow_opened-with-open_source-and-missing-node-metrics-6476-29e6d73d365081238b8cef1d1a44287f)
by [Unito](https://www.unito.io)

Co-authored-by: bymyself <[email protected]>
christian-byrne pushed a commit that referenced this pull request Nov 1, 2025
…6501)

Backport of upstream PR #6499 onto `rh-test`.

Summary
- Adds unified telemetry event `app:run_triggered` with `{
trigger_source: 'button' | 'keybinding' | 'menu' }`.
- Instruments all run initiation paths:
- Queue button emits `run_triggered` (source `button`) and still emits
`run_button_click` for UI-only tracking.
  - Keybindings emit `run_triggered` (source `keybinding`).
- Menus (menubar + legacy menu buttons) emit `run_triggered` (source
`menu`).
- Mixpanel provider implements `trackRunTriggered`.
- No changes to `execution_start` logic.

Files changed (matching PR #6499 exactly)
- src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue
- src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
- src/platform/telemetry/types.ts
- src/scripts/ui.ts
- src/services/keybindingService.ts
- src/stores/menuItemStore.ts

Notes
- Strictly limited to PR #6499; does NOT include unrelated changes
(e.g., PR #6476 `workflow_opened`).
- Local pre-push hook (knip) flagged an exported type as unused; pushed
with `--no-verify` to avoid adding non-PR changes. Lint and typecheck
pass locally (`pnpm lint:fix && pnpm typecheck`).

Upstream reference:
#6499

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6501-backport-pr-6499-unified-app-run_triggered-event-onto-rh-test-29e6d73d36508122ab3df5296e544b03)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

branch:rh-test needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants