Skip to content

docs: add PR review pitfalls to AGENTS.md#11770

Open
jtydhr88 wants to merge 5 commits intomainfrom
docs/agent-review-pitfalls
Open

docs: add PR review pitfalls to AGENTS.md#11770
jtydhr88 wants to merge 5 commits intomainfrom
docs/agent-review-pitfalls

Conversation

@jtydhr88
Copy link
Copy Markdown
Collaborator

@jtydhr88 jtydhr88 commented Apr 30, 2026

Capture two failure modes hit during recent reviews so future agent runs don't repeat them:
(1) refactor PRs need a side-by-side compare against main's pre-refactor code, not just trust in the commit message and a green test suite;
(2) PRs that add a new constant/list/map need a whole-file read and a future-change-cost check to avoid creating yet another implicit duplicate of an existing list.

┆Issue is synchronized with this Notion page by Unito

Capture two failure modes hit during recent reviews so future agent runs
don't repeat them: (1) refactor PRs need a side-by-side compare against
main's pre-refactor code, not just trust in the commit message and a
green test suite; (2) PRs that add a new constant/list/map need a
whole-file read and a future-change-cost check to avoid creating yet
another implicit duplicate of an existing list.
@jtydhr88 jtydhr88 requested a review from a team April 30, 2026 01:07
@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Apr 30, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 30, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 05/01/2026, 01:07:26 AM UTC

Links

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 30, 2026

📝 Walkthrough

Walkthrough

Documentation update to AGENTS.md that introduces a new "Reviewing PRs" section, adding structured code review guidelines for refactor/extraction PRs, PRs introducing constants/lists/maps, and general hygiene practices for comprehensive verification.

Changes

Cohort / File(s) Summary
Documentation
AGENTS.md
Added "Reviewing PRs" section specifying verification steps for different PR types: refactor/extraction PRs (manual diffing, hypothesis validation, test parameter checks, arithmetic checks, UI verification), constant/list/map introduction PRs (duplication detection via file reading and grep), and general practices (CI/static-check blind spot avoidance, adversarial browser scenario enumeration).

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

🐰 Hops through code with care so keen,
Reviewing diffs both sharp and clean,
No tests to pass, no types to mend,
Just words of wisdom, line by end!
A gentle nudge for humans wise,
To catch what automation's eyes can't prize.

🚥 Pre-merge checks | ✅ 6 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description captures the key intent but diverges from the required template structure with missing sections like 'What', 'Review Focus', and formatting. Rewrite the description to follow the template: add a concise 'Summary' section, clarify 'What' was changed and why, include a 'Review Focus' section for critical design decisions, and remove the Notion link if not part of the standard format.
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'docs: add PR review pitfalls to AGENTS.md' directly matches the main change: adding documentation about review pitfalls to AGENTS.md.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
End-To-End Regression Coverage For Fixes ✅ Passed PR title contains no bug-fix language and is documentation-only, satisfying the condition for passing the end-to-end regression coverage check.
Adr Compliance For Entity/Litegraph Changes ✅ Passed PR modifies only AGENTS.md documentation; no src/lib/litegraph/, src/ecs/, or graph entity files are changed.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/agent-review-pitfalls

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (4)
AGENTS.md (4)

368-368: ⚡ Quick win

Shorten the “future-change cost” rule for readability.

LanguageTool flagged Line [368] as potentially wordy. The rule is good, but you can compress the sentence while keeping the core: (a) read whole file, (b) grep for duplicates, (c) future-change cost > 1–2 places implies duplication, (d) use TS types to make drift a compile error.

✏️ Proposed rewording
-- Run a **future-change cost** check: "If a new $THING is added next month, how many files need to be touched?" If the answer is more than 1–2, flag the duplication and ask whether TypeScript types can constrain the other locations to derive from the new constant (e.g. `Record<Exclude<SupportedThing, 'default'>, Loader>` makes drift a compile error).
+- Run a **future-change cost** check: "If a new $THING is added next month, how many files would need updates?" If it’s more than 1–2, treat it as duplication risk and ask whether TS types can force the other places to derive from the new constant (so drift becomes a compile error).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@AGENTS.md` at line 368, Shorten the “future-change cost” rule sentence by
replacing the long sentence with a concise checklist: read the file, grep for
duplicates, if a future change touches more than 1–2 places treat it as
duplication, and suggest using TypeScript types (e.g.,
Record<Exclude<SupportedThing, 'default'>, Loader>) to make schema drift a
compile-time error; update the text at the current rule to this compressed form
preserving the TS example.

373-375: ⚡ Quick win

Re-check Line [373] per LanguageTool (spelling/grammar).

Static analysis flagged Line [373] (“Ensure spelling is correct”). The current sentence is understandable, but the flag suggests a small textual issue (likely around “Copilot review” phrasing or similar). Please re-run the linter/spellcheck for this specific line and adjust wording if needed.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@AGENTS.md` around lines 373 - 375, Re-run the spelling/grammar check for the
sentence starting "Static lints, `tsc`, and bot reviewers (CodeRabbit, Copilot
review) share the same blind spots..." in AGENTS.md (line containing "Ensure
spelling is correct") and correct the phrasing to be idiomatic and unambiguous
(e.g., change "Copilot review" to "Copilot Review" or "Copilot's review" and
ensure punctuation around the parenthetical is consistent); update the sentence
so it reads smoothly and passes LanguageTool (keep the meaning intact and run
the linter again to confirm the flag is resolved).

354-356: ⚡ Quick win

Avoid hardcoding git show in the agent guideline (make it tool-agnostic).

Line [354] suggests using git show main:<old-path>. That’s precise, but it assumes a specific local git workflow and may not reflect how the agent tooling will view “main” pre-refactor code (GitHub UI, compare view, stored snapshots, etc.). Keep the intent (side-by-side main vs branch + compare key expressions) while removing the brittle command reference.

✏️ Proposed text tweak
-- Pull the pre-refactor version of the equivalent code with `git show main:<old-path>` and put it side-by-side with the new code. Compare the **key expressions** (formulas, base values, clamps, branch conditions), not just the structure.
+- Pull up the pre-refactor version of the equivalent code from `main` and put it side-by-side with the new code. Compare the **key expressions** (formulas, base values, clamps, branch conditions), not just the structure.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@AGENTS.md` around lines 354 - 356, Replace the hardcoded command string "git
show main:<old-path>" with a tool-agnostic instruction that conveys the intent:
obtain the pre-refactor version of the equivalent code from the primary branch
or snapshot and place it side-by-side with the new code for comparison; keep the
rest of the guidance about comparing key expressions (formulas, base values,
clamps, branch conditions), treating "fix:" commits as claims, and checking
non-default test parameters unchanged.

358-359: ⚡ Quick win

Clarify/avoid potential confusion around “Per CLAUDE.md”.

Line [358] says: “Per CLAUDE.md, dev-server browser testing is required…”. If CLAUDE.md is truly a repo-standard doc name, it’s fine—but as written, it reads like an external/tool dependency reference. Consider phrasing that ties to “browser testing requirements in the repo” (or explicitly links to the file by path) so readers don’t wonder what/where “CLAUDE.md” is.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@AGENTS.md` around lines 358 - 359, The phrase "Per CLAUDE.md, dev-server
browser testing is required…" in AGENTS.md is ambiguous; update that sentence to
explicitly tie it to the repository (e.g., "Per the repository's CLAUDE.md (see
CLAUDE.md), dev-server browser testing is required…" or "Per the repo's
browser-testing requirements in CLAUDE.md, dev-server browser testing is
required…") or add a relative link/path to the CLAUDE.md file so readers know
it’s an in-repo document; edit the exact string "Per CLAUDE.md, dev-server
browser testing is required for UI changes." accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@AGENTS.md`:
- Line 368: Shorten the “future-change cost” rule sentence by replacing the long
sentence with a concise checklist: read the file, grep for duplicates, if a
future change touches more than 1–2 places treat it as duplication, and suggest
using TypeScript types (e.g., Record<Exclude<SupportedThing, 'default'>,
Loader>) to make schema drift a compile-time error; update the text at the
current rule to this compressed form preserving the TS example.
- Around line 373-375: Re-run the spelling/grammar check for the sentence
starting "Static lints, `tsc`, and bot reviewers (CodeRabbit, Copilot review)
share the same blind spots..." in AGENTS.md (line containing "Ensure spelling is
correct") and correct the phrasing to be idiomatic and unambiguous (e.g., change
"Copilot review" to "Copilot Review" or "Copilot's review" and ensure
punctuation around the parenthetical is consistent); update the sentence so it
reads smoothly and passes LanguageTool (keep the meaning intact and run the
linter again to confirm the flag is resolved).
- Around line 354-356: Replace the hardcoded command string "git show
main:<old-path>" with a tool-agnostic instruction that conveys the intent:
obtain the pre-refactor version of the equivalent code from the primary branch
or snapshot and place it side-by-side with the new code for comparison; keep the
rest of the guidance about comparing key expressions (formulas, base values,
clamps, branch conditions), treating "fix:" commits as claims, and checking
non-default test parameters unchanged.
- Around line 358-359: The phrase "Per CLAUDE.md, dev-server browser testing is
required…" in AGENTS.md is ambiguous; update that sentence to explicitly tie it
to the repository (e.g., "Per the repository's CLAUDE.md (see CLAUDE.md),
dev-server browser testing is required…" or "Per the repo's browser-testing
requirements in CLAUDE.md, dev-server browser testing is required…") or add a
relative link/path to the CLAUDE.md file so readers know it’s an in-repo
document; edit the exact string "Per CLAUDE.md, dev-server browser testing is
required for UI changes." accordingly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 75666521-0226-4c17-ad1a-057e05dfeebd

📥 Commits

Reviewing files that changed from the base of the PR and between c74e08e and e61ec6e.

📒 Files selected for processing (1)
  • AGENTS.md

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 30, 2026

📦 Bundle: 5.23 MB gzip 🟢 -27 B

Details

Summary

  • Raw size: 24.1 MB baseline 24.1 MB — ⚪ 0 B
  • Gzip: 5.23 MB baseline 5.23 MB — 🟢 -27 B
  • Brotli: 4.05 MB baseline 4.05 MB — 🔴 +75 B
  • Bundles: 257 current • 257 baseline • 118 added / 118 removed

Category Glance
Vendor & Third-Party ⚪ 0 B (9.88 MB) · Other ⚪ 0 B (8.83 MB) · Data & Services ⚪ 0 B (3.04 MB) · Graph Workspace ⚪ 0 B (1.24 MB) · Panels & Settings ⚪ 0 B (488 kB) · Utilities & Hooks ⚪ 0 B (364 kB) · + 5 more

App Entry Points — 22.5 kB (baseline 22.5 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Bedxmegq.js (new) 22.5 kB 🔴 +22.5 kB 🔴 +7.99 kB 🔴 +6.87 kB
assets/index-HWG5uYHB.js (removed) 22.5 kB 🟢 -22.5 kB 🟢 -7.98 kB 🟢 -6.85 kB

Status: 1 added / 1 removed

Graph Workspace — 1.24 MB (baseline 1.24 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView--Ju9gyJ4.js (removed) 1.24 MB 🟢 -1.24 MB 🟢 -265 kB 🟢 -199 kB
assets/GraphView-CiVSd1YC.js (new) 1.24 MB 🔴 +1.24 MB 🔴 +265 kB 🔴 +199 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BgvM6sun.js (new) 15.7 kB 🔴 +15.7 kB 🔴 +3.41 kB 🔴 +2.92 kB
assets/CloudSurveyView-CSivWSbN.js (removed) 15.7 kB 🟢 -15.7 kB 🟢 -3.41 kB 🟢 -2.91 kB
assets/CloudLoginView-CgW8JfRR.js (new) 12.2 kB 🔴 +12.2 kB 🔴 +3.43 kB 🔴 +3.04 kB
assets/CloudLoginView-DWM1S6nh.js (removed) 12.2 kB 🟢 -12.2 kB 🟢 -3.43 kB 🟢 -3.03 kB
assets/CloudSignupView-C9dtym10.js (new) 9.94 kB 🔴 +9.94 kB 🔴 +2.93 kB 🔴 +2.57 kB
assets/CloudSignupView-Dyx27Wpt.js (removed) 9.94 kB 🟢 -9.94 kB 🟢 -2.93 kB 🟢 -2.58 kB
assets/UserCheckView-C8R2oI5z.js (removed) 9.07 kB 🟢 -9.07 kB 🟢 -2.33 kB 🟢 -2.04 kB
assets/UserCheckView-DJ2Qd0Mm.js (new) 9.07 kB 🔴 +9.07 kB 🔴 +2.33 kB 🔴 +2.05 kB
assets/CloudLayoutView-BmjL1CTx.js (removed) 7.7 kB 🟢 -7.7 kB 🟢 -2.43 kB 🟢 -2.11 kB
assets/CloudLayoutView-EZLgJzfy.js (new) 7.7 kB 🔴 +7.7 kB 🔴 +2.43 kB 🔴 +2.1 kB
assets/CloudForgotPasswordView-C4z7sM28.js (new) 6.11 kB 🔴 +6.11 kB 🔴 +2.17 kB 🔴 +1.91 kB
assets/CloudForgotPasswordView-Ca0N6MVp.js (removed) 6.11 kB 🟢 -6.11 kB 🟢 -2.17 kB 🟢 -1.9 kB
assets/CloudAuthTimeoutView-BkUL8CXa.js (removed) 5.47 kB 🟢 -5.47 kB 🟢 -2 kB 🟢 -1.75 kB
assets/CloudAuthTimeoutView-BTTZOesY.js (new) 5.47 kB 🔴 +5.47 kB 🔴 +2 kB 🔴 +1.75 kB
assets/CloudSubscriptionRedirectView-b-LAZjPz.js (removed) 5.25 kB 🟢 -5.25 kB 🟢 -1.98 kB 🟢 -1.77 kB
assets/CloudSubscriptionRedirectView-C_w8a2v9.js (new) 5.25 kB 🔴 +5.25 kB 🔴 +1.98 kB 🔴 +1.77 kB
assets/UserSelectView-BXxEAxe7.js (new) 4.73 kB 🔴 +4.73 kB 🔴 +1.75 kB 🔴 +1.56 kB
assets/UserSelectView-DDebY-Oa.js (removed) 4.73 kB 🟢 -4.73 kB 🟢 -1.75 kB 🟢 -1.56 kB

Status: 9 added / 9 removed / 2 unchanged

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-SWagy65t.js (new) 46.7 kB 🔴 +46.7 kB 🔴 +9.61 kB 🔴 +8.54 kB
assets/KeybindingPanel-xZmMyc9t.js (removed) 46.7 kB 🟢 -46.7 kB 🟢 -9.6 kB 🟢 -8.54 kB
assets/SecretsPanel-CdtFIULU.js (new) 22.9 kB 🔴 +22.9 kB 🔴 +5.54 kB 🔴 +4.87 kB
assets/SecretsPanel-kM3n8j9X.js (removed) 22.9 kB 🟢 -22.9 kB 🟢 -5.54 kB 🟢 -4.87 kB
assets/LegacyCreditsPanel-_XXQ2vq9.js (removed) 21.7 kB 🟢 -21.7 kB 🟢 -5.89 kB 🟢 -5.19 kB
assets/LegacyCreditsPanel-e2uYrJWZ.js (new) 21.7 kB 🔴 +21.7 kB 🔴 +5.89 kB 🔴 +5.19 kB
assets/SubscriptionPanel-BzDqmy79.js (new) 19.9 kB 🔴 +19.9 kB 🔴 +5.06 kB 🔴 +4.46 kB
assets/SubscriptionPanel-sFwJ4x9o.js (removed) 19.9 kB 🟢 -19.9 kB 🟢 -5.06 kB 🟢 -4.45 kB
assets/AboutPanel-C55MV0qE.js (removed) 12 kB 🟢 -12 kB 🟢 -3.33 kB 🟢 -3 kB
assets/AboutPanel-Cygtced3.js (new) 12 kB 🔴 +12 kB 🔴 +3.33 kB 🔴 +2.99 kB
assets/ExtensionPanel-C409bxaH.js (new) 9.94 kB 🔴 +9.94 kB 🔴 +2.9 kB 🔴 +2.56 kB
assets/ExtensionPanel-D1o9DCks.js (removed) 9.94 kB 🟢 -9.94 kB 🟢 -2.9 kB 🟢 -2.58 kB
assets/ServerConfigPanel-C1YFjCJw.js (new) 7.02 kB 🔴 +7.02 kB 🔴 +2.35 kB 🔴 +2.1 kB
assets/ServerConfigPanel-DtbxPobv.js (removed) 7.02 kB 🟢 -7.02 kB 🟢 -2.35 kB 🟢 -2.09 kB
assets/UserPanel-BoB3-8qc.js (new) 6.73 kB 🔴 +6.73 kB 🔴 +2.22 kB 🔴 +1.96 kB
assets/UserPanel-H7tpLgaA.js (removed) 6.73 kB 🟢 -6.73 kB 🟢 -2.22 kB 🟢 -1.96 kB
assets/cloudRemoteConfig-BkCvagRk.js (new) 2.02 kB 🔴 +2.02 kB 🔴 +972 B 🔴 +834 B
assets/cloudRemoteConfig-C3Q3cygX.js (removed) 2.02 kB 🟢 -2.02 kB 🟢 -974 B 🟢 -835 B
assets/refreshRemoteConfig-BxZud6Op.js (new) 1.45 kB 🔴 +1.45 kB 🔴 +649 B 🔴 +551 B
assets/refreshRemoteConfig-PG5hjmUp.js (removed) 1.45 kB 🟢 -1.45 kB 🟢 -651 B 🟢 -549 B

Status: 10 added / 10 removed / 11 unchanged

User & Accounts — 17.5 kB (baseline 17.5 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-DcoLpHnw.js (removed) 3.57 kB 🟢 -3.57 kB 🟢 -1.26 kB 🟢 -1.07 kB
assets/auth-DgxN6d-C.js (new) 3.57 kB 🔴 +3.57 kB 🔴 +1.26 kB 🔴 +1.07 kB
assets/SignUpForm-CjcNCkXG.js (new) 3.2 kB 🔴 +3.2 kB 🔴 +1.29 kB 🔴 +1.17 kB
assets/SignUpForm-DAE6G8N7.js (removed) 3.2 kB 🟢 -3.2 kB 🟢 -1.29 kB 🟢 -1.15 kB
assets/UpdatePasswordContent-B5GfBpTf.js (new) 2.87 kB 🔴 +2.87 kB 🔴 +1.28 kB 🔴 +1.13 kB
assets/UpdatePasswordContent-BNKPjsQA.js (removed) 2.87 kB 🟢 -2.87 kB 🟢 -1.29 kB 🟢 -1.14 kB
assets/authStore-CPj1DJsi.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -552 B 🟢 -493 B
assets/authStore-DhMdnyBz.js (new) 1.16 kB 🔴 +1.16 kB 🔴 +551 B 🔴 +496 B
assets/auth-CmkS5V8G.js (new) 348 B 🔴 +348 B 🔴 +219 B 🔴 +208 B
assets/auth-DBdDOL4X.js (removed) 348 B 🟢 -348 B 🟢 -216 B 🟢 -189 B

Status: 5 added / 5 removed / 2 unchanged

Editors & Dialogs — 113 kB (baseline 113 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-B7j4EMbk.js (new) 86.9 kB 🔴 +86.9 kB 🔴 +18.8 kB 🔴 +16.1 kB
assets/ComfyHubPublishDialog-CFxfvHhp.js (removed) 86.9 kB 🟢 -86.9 kB 🟢 -18.8 kB 🟢 -16 kB
assets/useShareDialog-C1Qt9qjj.js (new) 23.7 kB 🔴 +23.7 kB 🔴 +5.77 kB 🔴 +5.12 kB
assets/useShareDialog-CFMKvsNe.js (removed) 23.7 kB 🟢 -23.7 kB 🟢 -5.77 kB 🟢 -5.1 kB
assets/ComfyHubPublishDialog-BBhuH-6-.js (new) 1.32 kB 🔴 +1.32 kB 🔴 +613 B 🔴 +549 B
assets/ComfyHubPublishDialog-BxpY7ZxB.js (removed) 1.32 kB 🟢 -1.32 kB 🟢 -613 B 🟢 -552 B
assets/useSubscriptionDialog--Qpf2u3j.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +542 B 🔴 +481 B
assets/useSubscriptionDialog-DNQuJM8U.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -542 B 🟢 -476 B

Status: 4 added / 4 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-cGOZdfHT.js (removed) 13.5 kB 🟢 -13.5 kB 🟢 -3.79 kB 🟢 -3.38 kB
assets/ComfyQueueButton-DcIfE-Ng.js (new) 13.5 kB 🔴 +13.5 kB 🔴 +3.79 kB 🔴 +3.38 kB
assets/useTerminalTabs-Bnc04R5i.js (new) 11 kB 🔴 +11 kB 🔴 +3.71 kB 🔴 +3.27 kB
assets/useTerminalTabs-CdqGQqOp.js (removed) 11 kB 🟢 -11 kB 🟢 -3.71 kB 🟢 -3.27 kB
assets/SubscribeButton-Cc2cOr5t.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.05 kB 🟢 -945 B
assets/SubscribeButton-CltE3HW-.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.05 kB 🔴 +945 B
assets/cloudFeedbackTopbarButton-D1PIxKDe.js (removed) 1.8 kB 🟢 -1.8 kB 🟢 -929 B 🟢 -813 B
assets/cloudFeedbackTopbarButton-Deag9PzN.js (new) 1.8 kB 🔴 +1.8 kB 🔴 +929 B 🔴 +813 B
assets/ComfyQueueButton-BTM72HLT.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -579 B 🟢 -516 B
assets/ComfyQueueButton-g2qqUS20.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +578 B 🔴 +514 B

Status: 5 added / 5 removed / 8 unchanged

Data & Services — 3.04 MB (baseline 3.04 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-Cf2Gox9i.js (removed) 1.98 MB 🟢 -1.98 MB 🟢 -455 kB 🟢 -345 kB
assets/dialogService-D2aNPgia.js (new) 1.98 MB 🔴 +1.98 MB 🔴 +455 kB 🔴 +345 kB
assets/api-BHQVPVYH.js (new) 892 kB 🔴 +892 kB 🔴 +213 kB 🔴 +168 kB
assets/api-CHq4vYxo.js (removed) 892 kB 🟢 -892 kB 🟢 -213 kB 🟢 -168 kB
assets/load3dService-f3p2EV84.js (new) 114 kB 🔴 +114 kB 🔴 +24.8 kB 🔴 +21.1 kB
assets/load3dService-x5rlM_8N.js (removed) 114 kB 🟢 -114 kB 🟢 -24.8 kB 🟢 -21 kB
assets/workflowShareService-CPWNPjKI.js (new) 16.6 kB 🔴 +16.6 kB 🔴 +4.89 kB 🔴 +4.33 kB
assets/workflowShareService-DRIfUEW9.js (removed) 16.6 kB 🟢 -16.6 kB 🟢 -4.89 kB 🟢 -4.33 kB
assets/keybindingService-euNPnlYc.js (removed) 13.8 kB 🟢 -13.8 kB 🟢 -3.67 kB 🟢 -3.22 kB
assets/keybindingService-WT91RJ6e.js (new) 13.8 kB 🔴 +13.8 kB 🔴 +3.67 kB 🔴 +3.22 kB
assets/releaseStore-BivmH2xM.js (removed) 8.12 kB 🟢 -8.12 kB 🟢 -2.28 kB 🟢 -2 kB
assets/releaseStore-CsmAChl8.js (new) 8.12 kB 🔴 +8.12 kB 🔴 +2.28 kB 🔴 +2 kB
assets/userStore-BD0D16p9.js (new) 2.24 kB 🔴 +2.24 kB 🔴 +873 B 🔴 +760 B
assets/userStore-CeXXnlyJ.js (removed) 2.24 kB 🟢 -2.24 kB 🟢 -871 B 🟢 -762 B
assets/audioService-D9OPZ8qS.js (removed) 1.8 kB 🟢 -1.8 kB 🟢 -879 B 🟢 -759 B
assets/audioService-zEDh3QgG.js (new) 1.8 kB 🔴 +1.8 kB 🔴 +879 B 🔴 +765 B
assets/releaseStore-DIf5MJA0.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -545 B 🟢 -488 B
assets/releaseStore-F8n0ESF-.js (new) 1.16 kB 🔴 +1.16 kB 🔴 +545 B 🔴 +486 B
assets/workflowDraftStore-B8eNXl5i.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +541 B 🔴 +484 B
assets/workflowDraftStore-CXBNbtvl.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -541 B 🟢 -480 B
assets/dialogService-BdPu9Kmj.js (removed) 1.13 kB 🟢 -1.13 kB 🟢 -534 B 🟢 -475 B
assets/dialogService-sRTw1bK-.js (new) 1.13 kB 🔴 +1.13 kB 🔴 +534 B 🔴 +478 B
assets/settingStore-bt_wCdiT.js (removed) 1.12 kB 🟢 -1.12 kB 🟢 -536 B 🟢 -475 B
assets/settingStore-CvROClB9.js (new) 1.12 kB 🔴 +1.12 kB 🔴 +537 B 🔴 +478 B
assets/assetsStore-C64El4nb.js (removed) 1.12 kB 🟢 -1.12 kB 🟢 -537 B 🟢 -477 B
assets/assetsStore-CwiYctqG.js (new) 1.12 kB 🔴 +1.12 kB 🔴 +537 B 🔴 +479 B

Status: 13 added / 13 removed / 4 unchanged

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-BkRpGaxO.js (new) 233 kB 🔴 +233 kB 🔴 +51.8 kB 🔴 +42.2 kB
assets/useConflictDetection-CLP1FyfC.js (removed) 233 kB 🟢 -233 kB 🟢 -51.8 kB 🟢 -42.2 kB
assets/useLoad3d-D0sBfQuR.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.09 kB 🔴 +4.51 kB
assets/useLoad3d-DGV0PdPE.js (removed) 22.3 kB 🟢 -22.3 kB 🟢 -5.09 kB 🟢 -4.52 kB
assets/useLoad3dViewer-CCOA1a-e.js (removed) 20.8 kB 🟢 -20.8 kB 🟢 -4.91 kB 🟢 -4.3 kB
assets/useLoad3dViewer-W1LH4fdy.js (new) 20.8 kB 🔴 +20.8 kB 🔴 +4.91 kB 🔴 +4.3 kB
assets/useFeatureFlags-BGkOmlr-.js (new) 5.95 kB 🔴 +5.95 kB 🔴 +1.79 kB 🔴 +1.53 kB
assets/useFeatureFlags-D6GK8pG5.js (removed) 5.95 kB 🟢 -5.95 kB 🟢 -1.79 kB 🟢 -1.52 kB
assets/useCopyToClipboard-C1tWQi9P.js (removed) 5.29 kB 🟢 -5.29 kB 🟢 -1.86 kB 🟢 -1.58 kB
assets/useCopyToClipboard-Dxd6pw7q.js (new) 5.29 kB 🔴 +5.29 kB 🔴 +1.86 kB 🔴 +1.57 kB
assets/useWorkspaceUI-BrxZhsgP.js (new) 3.34 kB 🔴 +3.34 kB 🔴 +980 B 🔴 +808 B
assets/useWorkspaceUI-ByCIMXm8.js (removed) 3.34 kB 🟢 -3.34 kB 🟢 -981 B 🟢 -813 B
assets/subscriptionCheckoutUtil-COjgGzEY.js (removed) 3.31 kB 🟢 -3.31 kB 🟢 -1.36 kB 🟢 -1.19 kB
assets/subscriptionCheckoutUtil-DZdijTx6.js (new) 3.31 kB 🔴 +3.31 kB 🔴 +1.36 kB 🔴 +1.18 kB
assets/assetPreviewUtil-B9c8raSr.js (removed) 2.27 kB 🟢 -2.27 kB 🟢 -959 B 🟢 -833 B
assets/assetPreviewUtil-BEiHTUyw.js (new) 2.27 kB 🔴 +2.27 kB 🔴 +959 B 🔴 +833 B
assets/useUpstreamValue-B3yd9JQv.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -804 B 🟢 -712 B
assets/useUpstreamValue-D7-hVCOc.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +805 B 🔴 +713 B
assets/useLoad3d-BpqbuRdd.js (new) 1.3 kB 🔴 +1.3 kB 🔴 +604 B 🔴 +557 B
assets/useLoad3d-DtO0EKhU.js (removed) 1.3 kB 🟢 -1.3 kB 🟢 -603 B 🟢 -554 B
assets/useLoad3dViewer-BDVtVIJK.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -569 B 🟢 -513 B
assets/useLoad3dViewer-IiHvxgPl.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +570 B 🔴 +515 B
assets/useCurrentUser-BZQqiJOf.js (new) 1.12 kB 🔴 +1.12 kB 🔴 +538 B 🔴 +479 B
assets/useCurrentUser-CK7I6vHh.js (removed) 1.12 kB 🟢 -1.12 kB 🟢 -537 B 🟢 -477 B
assets/useWorkspaceSwitch-Bcl9-DSI.js (removed) 747 B 🟢 -747 B 🟢 -385 B 🟢 -330 B
assets/useWorkspaceSwitch-D0tZqLc7.js (new) 747 B 🔴 +747 B 🔴 +385 B 🔴 +333 B

Status: 13 added / 13 removed / 18 unchanged

Vendor & Third-Party — 9.88 MB (baseline 9.88 MB) • ⚪ 0 B

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 8.83 MB (baseline 8.83 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-Bl-xlaCS.js (new) 76.6 kB 🔴 +76.6 kB 🔴 +19.8 kB 🔴 +16.9 kB
assets/core-D_tlIb4-.js (removed) 76.6 kB 🟢 -76.6 kB 🟢 -19.8 kB 🟢 -16.9 kB
assets/groupNode-cQDQbpkB.js (removed) 74.9 kB 🟢 -74.9 kB 🟢 -18.7 kB 🟢 -16.5 kB
assets/groupNode-DHaoVyb2.js (new) 74.9 kB 🔴 +74.9 kB 🔴 +18.7 kB 🔴 +16.5 kB
assets/WidgetSelect-BC0IukfV.js (removed) 67.2 kB 🟢 -67.2 kB 🟢 -14.6 kB 🟢 -12.7 kB
assets/WidgetSelect-utOZQkkO.js (new) 67.2 kB 🔴 +67.2 kB 🔴 +14.6 kB 🔴 +12.6 kB
assets/SubscriptionRequiredDialogContentWorkspace-B2wuThrz.js (removed) 49.3 kB 🟢 -49.3 kB 🟢 -9.41 kB 🟢 -8.05 kB
assets/SubscriptionRequiredDialogContentWorkspace-C5uPP_z3.js (new) 49.3 kB 🔴 +49.3 kB 🔴 +9.41 kB 🔴 +8.04 kB
assets/Load3DControls-B6TMeqM2.js (new) 46.1 kB 🔴 +46.1 kB 🔴 +7.51 kB 🔴 +6.55 kB
assets/Load3DControls-CI5KWHMI.js (removed) 46.1 kB 🟢 -46.1 kB 🟢 -7.51 kB 🟢 -6.54 kB
assets/WidgetPainter-CF2Osat_.js (new) 34 kB 🔴 +34 kB 🔴 +8.28 kB 🔴 +7.34 kB
assets/WidgetPainter-IVnRfX8w.js (removed) 34 kB 🟢 -34 kB 🟢 -8.29 kB 🟢 -7.33 kB
assets/WorkspacePanelContent-BdaEDF2A.js (removed) 32.8 kB 🟢 -32.8 kB 🟢 -7 kB 🟢 -6.18 kB
assets/WorkspacePanelContent-BKrH6YFw.js (new) 32.8 kB 🔴 +32.8 kB 🔴 +6.99 kB 🔴 +6.17 kB
assets/Load3dViewerContent-BSvZrevS.js (removed) 28 kB 🟢 -28 kB 🟢 -5.85 kB 🟢 -5.07 kB
assets/Load3dViewerContent-DgDvAKiA.js (new) 28 kB 🔴 +28 kB 🔴 +5.85 kB 🔴 +5.07 kB
assets/SubscriptionRequiredDialogContent-Cff5W8OE.js (removed) 27.5 kB 🟢 -27.5 kB 🟢 -6.96 kB 🟢 -6.15 kB
assets/SubscriptionRequiredDialogContent-Cg5CRHLj.js (new) 27.5 kB 🔴 +27.5 kB 🔴 +6.96 kB 🔴 +6.15 kB
assets/WidgetImageCrop-B7Xj-yxq.js (removed) 24.3 kB 🟢 -24.3 kB 🟢 -6.18 kB 🟢 -5.44 kB
assets/WidgetImageCrop-Ufxp3lYz.js (new) 24.3 kB 🔴 +24.3 kB 🔴 +6.18 kB 🔴 +5.46 kB
assets/SubscriptionPanelContentWorkspace-CIGJ4yYC.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.18 kB 🟢 -4.57 kB
assets/SubscriptionPanelContentWorkspace-D4PscOs6.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.17 kB 🔴 +4.56 kB
assets/SignInContent-BEFmTxmk.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.35 kB 🔴 +4.67 kB
assets/SignInContent-Bo_mTpmS.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.35 kB 🟢 -4.69 kB
assets/CurrentUserPopoverWorkspace-72RQ-V1a.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +4.89 kB 🔴 +4.4 kB
assets/CurrentUserPopoverWorkspace-BviNZq3v.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.89 kB 🟢 -4.38 kB
assets/WidgetInputNumber-8mM7wlBt.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.84 kB 🔴 +4.31 kB
assets/WidgetInputNumber-DPZxmhj3.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.84 kB 🟢 -4.3 kB
assets/Load3D-B0ypXQRH.js (removed) 18.5 kB 🟢 -18.5 kB 🟢 -4.39 kB 🟢 -3.84 kB
assets/Load3D-lidVKlKt.js (new) 18.5 kB 🔴 +18.5 kB 🔴 +4.39 kB 🔴 +3.83 kB
assets/WidgetRecordAudio-BjmqwSiS.js (new) 17.4 kB 🔴 +17.4 kB 🔴 +5 kB 🔴 +4.47 kB
assets/WidgetRecordAudio-DB5FkArt.js (removed) 17.4 kB 🟢 -17.4 kB 🟢 -5 kB 🟢 -4.47 kB
assets/WidgetRange-D7oYcYeA.js (new) 17 kB 🔴 +17 kB 🔴 +4.59 kB 🔴 +4.11 kB
assets/WidgetRange-EcXPt2zx.js (removed) 17 kB 🟢 -17 kB 🟢 -4.59 kB 🟢 -4.12 kB
assets/load3d-BfiT8s14.js (new) 15.7 kB 🔴 +15.7 kB 🔴 +4.56 kB 🔴 +3.94 kB
assets/load3d-kmrzhfRU.js (removed) 15.7 kB 🟢 -15.7 kB 🟢 -4.56 kB 🟢 -3.94 kB
assets/WaveAudioPlayer-CwsjkD4M.js (removed) 13.4 kB 🟢 -13.4 kB 🟢 -3.69 kB 🟢 -3.23 kB
assets/WaveAudioPlayer-DlGzsPmn.js (new) 13.4 kB 🔴 +13.4 kB 🔴 +3.69 kB 🔴 +3.23 kB
assets/WidgetCurve-BnbnAIcu.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -3.91 kB 🟢 -3.54 kB
assets/WidgetCurve-CYfv4gVU.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +3.91 kB 🔴 +3.54 kB
assets/TeamWorkspacesDialogContent-BsZKeEHj.js (new) 11.3 kB 🔴 +11.3 kB 🔴 +3.4 kB 🔴 +3.04 kB
assets/TeamWorkspacesDialogContent-DWgVzxmq.js (removed) 11.3 kB 🟢 -11.3 kB 🟢 -3.4 kB 🟢 -3.04 kB
assets/nodeTemplates-6WgMGtzO.js (removed) 9.81 kB 🟢 -9.81 kB 🟢 -3.46 kB 🟢 -3.06 kB
assets/nodeTemplates-ZZV5OOZJ.js (new) 9.81 kB 🔴 +9.81 kB 🔴 +3.47 kB 🔴 +3.06 kB
assets/NightlySurveyController-C0xjS48t.js (removed) 8.99 kB 🟢 -8.99 kB 🟢 -3.14 kB 🟢 -2.79 kB
assets/NightlySurveyController-CDNEcos-.js (new) 8.99 kB 🔴 +8.99 kB 🔴 +3.14 kB 🔴 +2.78 kB
assets/InviteMemberDialogContent-CQOHojJ2.js (new) 7.91 kB 🔴 +7.91 kB 🔴 +2.51 kB 🔴 +2.2 kB
assets/InviteMemberDialogContent-Y8UpvO6T.js (removed) 7.91 kB 🟢 -7.91 kB 🟢 -2.51 kB 🟢 -2.21 kB
assets/Load3DConfiguration-Bh7GF88d.js (new) 7.82 kB 🔴 +7.82 kB 🔴 +2.31 kB 🔴 +2.02 kB
assets/Load3DConfiguration-DSMXcTWA.js (removed) 7.82 kB 🟢 -7.82 kB 🟢 -2.31 kB 🟢 -2.02 kB
assets/onboardingCloudRoutes-BPBskWEy.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -2.05 kB 🟢 -1.76 kB
assets/onboardingCloudRoutes-DVUHbK5L.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +2.05 kB 🔴 +1.76 kB
assets/CreateWorkspaceDialogContent-B0lBCJye.js (new) 6.12 kB 🔴 +6.12 kB 🔴 +2.22 kB 🔴 +1.93 kB
assets/CreateWorkspaceDialogContent-hcujsnxs.js (removed) 6.12 kB 🟢 -6.12 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/WidgetWithControl-CjS9RJ7z.js (new) 6.02 kB 🔴 +6.02 kB 🔴 +2.4 kB 🔴 +2.15 kB
assets/WidgetWithControl-CTJ5BVQz.js (removed) 6.02 kB 🟢 -6.02 kB 🟢 -2.4 kB 🟢 -2.14 kB
assets/FreeTierDialogContent-Coq67O4_.js (removed) 5.99 kB 🟢 -5.99 kB 🟢 -2.12 kB 🟢 -1.87 kB
assets/FreeTierDialogContent-SsPXKpPt.js (new) 5.99 kB 🔴 +5.99 kB 🔴 +2.12 kB 🔴 +1.87 kB
assets/EditWorkspaceDialogContent-AMLkYt6i.js (new) 5.92 kB 🔴 +5.92 kB 🔴 +2.18 kB 🔴 +1.92 kB
assets/EditWorkspaceDialogContent-BeY7l4z4.js (removed) 5.92 kB 🟢 -5.92 kB 🟢 -2.18 kB 🟢 -1.91 kB
assets/WidgetTextarea-BuFQAjnZ.js (removed) 5.73 kB 🟢 -5.73 kB 🟢 -2.26 kB 🟢 -2 kB
assets/WidgetTextarea-CCAEYUCN.js (new) 5.73 kB 🔴 +5.73 kB 🔴 +2.26 kB 🔴 +2 kB
assets/Preview3d-BirOaoA9.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.91 kB 🟢 -1.67 kB
assets/Preview3d-Dn4WT5xV.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.91 kB 🔴 +1.66 kB
assets/ValueControlPopover-_HRcqF8k.js (removed) 5.5 kB 🟢 -5.5 kB 🟢 -2 kB 🟢 -1.79 kB
assets/ValueControlPopover-CpGHk2rT.js (new) 5.5 kB 🔴 +5.5 kB 🔴 +2 kB 🔴 +1.79 kB
assets/CancelSubscriptionDialogContent-CbXkmewn.js (removed) 5.46 kB 🟢 -5.46 kB 🟢 -2.04 kB 🟢 -1.79 kB
assets/CancelSubscriptionDialogContent-DRMNjJH7.js (new) 5.46 kB 🔴 +5.46 kB 🔴 +2.04 kB 🔴 +1.79 kB
assets/DeleteWorkspaceDialogContent-CGPDMGQn.js (new) 4.82 kB 🔴 +4.82 kB 🔴 +1.86 kB 🔴 +1.62 kB
assets/DeleteWorkspaceDialogContent-Ck-doa8W.js (removed) 4.82 kB 🟢 -4.82 kB 🟢 -1.86 kB 🟢 -1.61 kB
assets/LeaveWorkspaceDialogContent-DVpZXWhp.js (removed) 4.65 kB 🟢 -4.65 kB 🟢 -1.8 kB 🟢 -1.57 kB
assets/LeaveWorkspaceDialogContent-Rza-Zc6f.js (new) 4.65 kB 🔴 +4.65 kB 🔴 +1.8 kB 🔴 +1.57 kB
assets/RemoveMemberDialogContent-C3T0e8sY.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.76 kB 🔴 +1.53 kB
assets/RemoveMemberDialogContent-Cly_3ghP.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.76 kB 🟢 -1.54 kB
assets/RevokeInviteDialogContent-DWnP4BUF.js (new) 4.54 kB 🔴 +4.54 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/RevokeInviteDialogContent-IGTmh9Ns.js (removed) 4.54 kB 🟢 -4.54 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/tierBenefits-BB583Q8E.js (removed) 4.45 kB 🟢 -4.45 kB 🟢 -1.57 kB 🟢 -1.36 kB
assets/tierBenefits-BbAv-jri.js (new) 4.45 kB 🔴 +4.45 kB 🔴 +1.57 kB 🔴 +1.36 kB
assets/InviteMemberUpsellDialogContent-BcOdYbaa.js (removed) 4.44 kB 🟢 -4.44 kB 🟢 -1.63 kB 🟢 -1.43 kB
assets/InviteMemberUpsellDialogContent-HtYixhtG.js (new) 4.44 kB 🔴 +4.44 kB 🔴 +1.63 kB 🔴 +1.44 kB
assets/cloudSessionCookie--dIrYDZo.js (new) 4.28 kB 🔴 +4.28 kB 🔴 +1.56 kB 🔴 +1.36 kB
assets/cloudSessionCookie-BWkMw-KL.js (removed) 4.28 kB 🟢 -4.28 kB 🟢 -1.56 kB 🟢 -1.36 kB
assets/Media3DTop-CF-K64-M.js (removed) 4.01 kB 🟢 -4.01 kB 🟢 -1.69 kB 🟢 -1.49 kB
assets/Media3DTop-Cy7V4G3y.js (new) 4.01 kB 🔴 +4.01 kB 🔴 +1.69 kB 🔴 +1.5 kB
assets/saveMesh-DaheUVK7.js (new) 3.98 kB 🔴 +3.98 kB 🔴 +1.73 kB 🔴 +1.52 kB
assets/saveMesh-Ddp641Cm.js (removed) 3.98 kB 🟢 -3.98 kB 🟢 -1.73 kB 🟢 -1.53 kB
assets/GlobalToast-DsyK3_pb.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.26 kB 🔴 +1.08 kB
assets/GlobalToast-j5WwloUJ.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.26 kB 🟢 -1.07 kB
assets/CloudRunButtonWrapper-BEUZD7ua.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1 kB 🔴 +886 B
assets/CloudRunButtonWrapper-BZ9IcJqv.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1 kB 🟢 -890 B
assets/SubscribeToRun-BYQGUhj0.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +983 B 🔴 +877 B
assets/SubscribeToRun-OHFrOW46.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -983 B 🟢 -879 B
assets/MediaAudioTop-D8YpguJo.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -1.01 kB 🟢 -858 B
assets/MediaAudioTop-dCLaVTko.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +1.01 kB 🔴 +856 B
assets/cloudBadges-CeYZ53df.js (removed) 1.93 kB 🟢 -1.93 kB 🟢 -958 B 🟢 -830 B
assets/cloudBadges-DWSZ2Kiu.js (new) 1.93 kB 🔴 +1.93 kB 🔴 +961 B 🔴 +834 B
assets/cloudSubscription-BVJcn_K6.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -883 B 🟢 -765 B
assets/cloudSubscription-Cvvcf9vR.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +883 B 🔴 +761 B
assets/graphHasMissingNodes-B8G-qUwn.js (new) 1.83 kB 🔴 +1.83 kB 🔴 +863 B 🔴 +758 B
assets/graphHasMissingNodes-D_JqMU-4.js (removed) 1.83 kB 🟢 -1.83 kB 🟢 -862 B 🟢 -776 B
assets/Load3D-C-XgFM4K.js (removed) 1.55 kB 🟢 -1.55 kB 🟢 -694 B 🟢 -636 B
assets/Load3D-D4jDtGOs.js (new) 1.55 kB 🔴 +1.55 kB 🔴 +695 B 🔴 +619 B
assets/previousFullPath-C4R5sS84.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +694 B 🔴 +598 B
assets/previousFullPath-CYgcAOAy.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -695 B 🟢 -592 B
assets/nightlyBadges-BGVcnFey.js (new) 1.46 kB 🔴 +1.46 kB 🔴 +727 B 🔴 +642 B
assets/nightlyBadges-BKQSzWDE.js (removed) 1.46 kB 🟢 -1.46 kB 🟢 -729 B 🟢 -661 B
assets/Load3dViewerContent-CUjHEAjE.js (removed) 1.43 kB 🟢 -1.43 kB 🟢 -646 B 🟢 -577 B
assets/Load3dViewerContent-D6Mf027K.js (new) 1.43 kB 🔴 +1.43 kB 🔴 +649 B 🔴 +590 B
assets/SubscriptionPanelContentWorkspace-DGb4d6As.js (new) 1.32 kB 🔴 +1.32 kB 🔴 +599 B 🔴 +527 B
assets/SubscriptionPanelContentWorkspace-vqJOz2Od.js (removed) 1.32 kB 🟢 -1.32 kB 🟢 -602 B 🟢 -523 B
assets/WidgetLegacy-DH7Jpyfk.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +549 B 🔴 +488 B
assets/WidgetLegacy-WtrJzOtx.js (removed) 1.15 kB 🟢 -1.15 kB 🟢 -548 B 🟢 -484 B
assets/changeTracker-D_uH2Lv2.js (new) 1.12 kB 🔴 +1.12 kB 🔴 +537 B 🔴 +472 B
assets/changeTracker-WsYoQHAr.js (removed) 1.12 kB 🟢 -1.12 kB 🟢 -537 B 🟢 -471 B

Status: 57 added / 57 removed / 78 unchanged

⚡ Performance

⏳ Performance tests in progress…

Comment thread AGENTS.md
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We might want to promote this to a full Skill.

Copy link
Copy Markdown
Contributor

@DrJKL DrJKL left a comment

Choose a reason for hiding this comment

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

Worth a shot. @christian-byrne wdyt?

This is also something fallow might help with.

@DrJKL DrJKL assigned christian-byrne and unassigned DrJKL Apr 30, 2026
@DrJKL DrJKL requested review from huntcsg and synap5e April 30, 2026 02:19
Copy link
Copy Markdown
Contributor

@synap5e synap5e left a comment

Choose a reason for hiding this comment

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

Reading The Review Record

For context: I had already started a parallel dig through the recent FE review strata, working at this very seam, when this PR opened a cut at the same site. It made me resume that work today, because we seemed to be uncovering the same creature from different angles: review misses that leave tracks in the PR record before anyone names the pattern.

What sent me digging was a layer in my own recent PR history. some of my PRs got review feedback that probably should have been incorporated before the formal review cycle. Some of it surfaced only when humans read the PR, even after CI or automated review had already passed over the ground without registering the trail.

What turned up in the cut

I widened the sample to the most recent 50 human-authored PRs touching production FE code, then read the human review comments as trace evidence. The recurring tracks were:

  • async/state freshness bugs after load/drop/refresh/teardown flows
  • tests tracking a nearby animal rather than the one being changed
  • similar-looking ids, counts, or payload shapes carrying different meanings
  • new constants/state/helpers building another nest beside an existing one
  • extension-facing or public callback/API changes (tracks leaving the preserve) needing explicit compatibility review
  • UI fixes needing screenshot/video/manual browser verification, not just green tests
  • smaller scuff marks: shared mutable test state, helper placement, unrelated diff noise

Where I'd dig next

My read: this PR reads two of the tracks deeper than I have, but the trail keeps going. The evidence suggests these misses are not isolated accidents; the same species keep turning up across the record. I would keep AGENTS.md compact, but the broader pattern probably belongs in a fuller review Skill — closer to a bestiary than a checklist, with entries for refactors, constants/maps, async state, schema boundaries, extension surface, and UI/manual verification [open question: is this an antipattern in the coding-agent context?], so an agent or reviewer can look up the species they suspect they're seeing and read what it usually does.

This was only a small surface dig — five days of stratigraphy, with a Load3D seam running through it. The 50-PR sample is enough to show a minimum population of recurring review misses, not a complete map of the ecosystem. If this seems useful, we could excavate further along the same line and turn the larger pattern into a proper field guide.

Full field notes: recent FE PR review traces

Field Method

Excavation site:

  • Repo: Comfy-Org/ComfyUI_frontend
  • Specimens collected: most recent 50 human-authored PRs, by creation time, touching production FE code under src/ or public/
  • Discarded as non-diagnostic: bot-authored PRs, backports, docs-only PRs, test-only PRs, locale files as the only production-path signal
  • Stratigraphic window: PRs created from 2026-04-25 to 2026-04-29
  • Trace material read: human review bodies and inline review comments
  • Bot/app review comments were collected, but not used as the primary evidence

Specimen counts:

  • 50 PRs sampled
  • 33 had human review feedback
  • 14 had at least one human CHANGES_REQUESTED review
  • 148 human inline comments
  • 51 human review bodies

Raw collection artifacts:

  • temp/in_progress/recent_human_fe_pr_reviews_50.json
  • temp/in_progress/recent_human_fe_pr_review_digest_50.md

The Tracks

1. Async State That Went Stale After The First Pass

Reviewers repeatedly caught state that was correct on the first happy path but stale after replacement, failure, cancellation, teardown, or a second cycle.

Examples:

  • #11711: Load3D capability refs were refreshed on initialize/reload, but not after drag/drop model replacement.
  • #11724: a shared AbortController outlived a DOM widget; after one removal, later video previews reused an already-aborted signal.
  • #11660 and #11627: Load3D adapter state could be published before load success, then remain stale after rejected/null loads.
  • #11626: Preview3D camera matrices were applied on the wrong async load continuation, so overlapping loads could apply old camera state to a newer model.
  • #11734: capture-time renderer/camera/material state needed explicit snapshot, restore, disposal, and tests for those cleanup paths.

Field checks:

  • For every async path, ask what happens on success, failure, abort, replacement, teardown, and repeat invocation.
  • Bind delayed continuations to the specific request/load/generation that produced them.
  • Add tests for the second cycle, stale continuation, failed load, or cleanup path, not only the first successful path.

2. Tests That Missed The Animal They Were Named After

Several PRs had tests, but review feedback showed the tests were tracking a nearby animal, not the one named on the label.

Examples:

  • #11691: a new Playwright test covered one happy path while deleted unit tests left drag/drop error branches and payload validation uncovered.
  • #11751: cycle tests asserted only not.toThrow(), so a quiet behavior drift in the exact path map shape could pass.
  • #11734: the browser regression test for Load3D zoom resolution failed on the PR head; later cleanup fixes also needed direct tests so they would not regress.
  • #11636: browser autofill depended on real rendered DOM attributes; reviewers asked for component tests asserting those attributes directly.
  • #11651 and #11692: tests were called out for asserting brittle utility classes or screenshots instead of behavior.

Field checks:

  • State the exact risky branch before looking at the test.
  • Ask whether the test would fail if the reviewed bug reappeared.
  • Avoid change-detector tests that only assert classes, screenshots, or defaults.
  • For refactors, compare behavior against main with concrete inputs, not just structure and green tests.

3. Different Species Wearing The Same Shape

Reviewers caught cases where values looked structurally similar but meant different things.

Examples:

  • #11691: a filename string was treated like an asset root/type, corrupting file combo values.
  • #11691: {} passed a loose asset-drop schema and short-circuited the real upload fallback.
  • #11699: LinkId and RerouteId were mixed in linkExtensions.parentId, weakening the intent of the new type aliases.
  • #11628: survey label strings and i18n labelKeys were conflated, leaving rendered option text untranslatable.
  • #11737: output-file count semantics drifted between two helpers, including different thresholds around outputCount.

Field checks:

  • Name the domain meaning of each id, key, payload, and count.
  • Prefer required discriminants and schemas at boundaries.
  • Use branded or named types when structurally similar values represent different domains.
  • Verify fallback behavior for malformed, missing, empty, and partially valid payloads.

4. Another Nest Where There Was Already One

Reviewers frequently pushed back when a fix introduced a parallel mechanism instead of consolidating existing ownership.

Examples:

  • #11712: adding SUPPORTED_LOCALES would have created another hand-maintained locale list in a file that already had several loader maps plus settings options.
  • #11737: ZIP export file counting duplicated existing output-count helpers and already disagreed on threshold semantics.
  • #11646: a new missing-model refresh composable reimplemented runMissingModelPipeline, duplicating pending-warning reconciliation, cloud verification gaps, and concurrency state.
  • #11661: the follow-up moved refresh behavior back through the existing pipeline and into store-owned concurrency, which reviewers explicitly called out as the cleaner shape.
  • #11720: a large temporary missing-model download-progress solution was flagged as duplicated work relative to planned fixes.

Field checks:

  • Read the whole file, not just the diff hunk.
  • Grep for one or two representative values or helper names before accepting a new list/map/helper.
  • Ask: if a new locale/model/status/output shape is added next month, how many places need edits?
  • Prefer delegating to the owner of the behavior over adding a caller-local parallel path.

5. Tracks Leaving The Preserve

Some risks were not internal correctness bugs, but compatibility or surface-area changes.

Examples:

  • #11691: removing claimEvent from node.onDragDrop was flagged as a public callback signature change that custom nodes might rely on.
  • #11698: adding incrementVersion() to LGraph required checking the ECS migration plan and ADR staging, not just whether the code was simple.
  • #11717: the downloadAsset / downloadMultipleAssets to downloadAssets rename prompted discussion about whether to export an explicit return-type alias or provider type.
  • #11646: adding a silent option to a public refresh API was questioned because it coupled a public extension API to one caller's toast preference.

Field checks:

  • Identify whether the changed function/type is extension-facing.
  • Code-search call sites, including likely custom-node/extension surfaces when relevant.
  • Prefer internal primitives over caller-specific flags on public APIs.
  • If a breaking or staged API change is intentional, include migration rationale in the PR description.

6. UI Changes That Needed Eyes On The Ground

For user-visible behavior, reviewers often wanted screenshots, video, or manual browser validation in addition to tests.

Examples:

  • #11713: Desktop modal/search clipping and drag-region behavior needed video or screenshots, and the drag-region fix had a real pointer-events bug.
  • #11668: even a test-focused link-fixer PR got a request for a behavior video.
  • #11734: the Load3D zoom-resolution bug depended on the actual browser canvas backing size, and the PR's own browser test caught the issue.
  • #11687: responsive node-search behavior was approved partly because screenshots and E2E coverage matched the intended UX.
  • #11628: survey flow/payload/required-field behavior needed component coverage because the UI is data-driven.

Field checks:

  • For UI/interaction PRs, require at least one human-readable validation path: screenshot, video, Storybook, browser test, or explicit manual test notes.
  • Include adversarial cases, not just a happy path: narrow viewport, repeated open/close, replacement while loading, optional fields, malformed input.
  • Do not treat unit tests as proof of browser-only behavior like hit testing, canvas backing dimensions, password-manager attributes, or Desktop drag regions.

7. Trace Marks Without A Body

There were also recurring smaller issues: test helper placement, mutable describe-scoped state, unrelated import diffs, brittle helper types, and formatting/style nits. These matter because they add review surface and create future flakes, but they were less central than the behavior and architecture misses above.

Examples:

  • #11751 and #11717: shared mutable test state and manual reset patterns were flagged as future flake risks.
  • #11724: test helper placement and mutable fixture setup drew cleanup comments.
  • #11691: unrelated import reordering was called out as diff noise.
  • #11651: utility-class assertions were removed because they tested styling mechanics instead of behavior.

Field checks:

  • Keep diffs scoped to the behavior under review.
  • Use per-test setup factories instead of shared mutable fixtures where possible.
  • Prefer named helper types over nested ReturnType<ReturnType<...>> puzzles.
  • Treat style and formatting as lower priority than correctness, but do not let them obscure the review.

How This Relates To #11770

#11770 reads two of the tracks deeper than I have, but the trail keeps going. It is directionally right and procedurally sharper than my notes on those two patterns; the gap is breadth, not depth.

It already targets two important blind spots:

  • Refactor reviews need explicit behavior-equivalence checks against main.
  • New constants/lists/maps need whole-file and cross-file duplicate-source checks.

The wider sample suggests the same guidance could be expanded slightly, or used as the seed for a fuller review Skill/checklist. The extra sections I would consider are:

  • async state freshness and cleanup paths
  • schema/data boundary checks
  • extension/public API compatibility
  • test coverage of risky branches, not only happy paths
  • UI/browser/manual verification expectations

I would keep AGENTS.md compact. The fuller version probably belongs in a review Skill — closer to a bestiary than a checklist, where an agent or reviewer can look up the species they suspect they're seeing and read what it usually does. The checks are procedural and context-dependent, which is exactly what a field guide is for.

Compact Text That Could Fit In AGENTS.md

If this is folded into #11770, I would avoid a long taxonomy and add something closer to this:

#### Common review misses to check before approval

- For async or lifecycle code, trace success, failure, abort, replacement, teardown, and second-run paths. Stale refs, reused abort signals, and delayed continuations are common sources of regressions.
- For tests, identify the risky branch first, then verify the test would fail if that branch regressed. Avoid tests that only assert defaults, classes, screenshots, or helper mocks.
- For data boundaries, check that similar-looking ids, keys, counts, and payloads are not being conflated. Prefer required schemas, discriminants, and named or branded types where drift would be costly.
- For new constants, maps, helpers, or stores, grep for existing sources of truth and run a future-change-cost check before accepting another list or parallel mechanism.
- For extension-facing callbacks/types or core graph APIs, explicitly check compatibility and staging. Public API changes need migration rationale, not just green tests.
- For UI and interaction changes, ask for browser/manual validation with adversarial cases. Unit tests alone do not prove hit testing, canvas sizing, Desktop drag regions, password-manager attributes, or visual clipping.

@jtydhr88
Copy link
Copy Markdown
Collaborator Author

jtydhr88 commented May 1, 2026

Agreed, promoting this to a full Skill makes sense.

One thing I want to emphasize on the principle behind it: this review checklist should be sourced from human developer experience, specifically, real cases where Claude or other bot reviewers approved a PR and a human reviewer subsequently caught a bug the AI missed.
Each pitfall in the Skill should ideally trace back to a specific incident: which PR, what the AI signed off on, what the human caught, and the underlying pattern.

The reason: AI-generated review heuristics tend to be plausible-sounding but unmoored from how bugs actually slip through here. If we let Claude "imagine" what reviewers should check, the Skill becomes a self-referential loop. If we anchor it to documented misses, the Skill encodes our team's actual blind spots and gets sharper over time.

Concretely, the two pitfalls already in this PR fit that pattern: pitfall 1 came from a real refactor PR where the AI missed a saturation regression that surfaced only on manual testing; pitfall 2 came from an i18n PR where the AI didn't flag a 5th
duplicate locale list. We should keep adding entries on the same basis, every entry needs a "human caught this; AI didn't" story behind it.

@synap5e
Copy link
Copy Markdown
Contributor

synap5e commented May 1, 2026

One thing I want to emphasize on the principle behind it: this review checklist should be sourced from human developer experience, specifically, real cases where Claude or other bot reviewers approved a PR and a human reviewer subsequently caught a bug the AI missed.

Absolutely agree. If you expand the "Full field notes" you'll find my agent's attempt to extract this. I would be curious on if you think it did a good job: if it did this is evidence that this process can be automated and we should expand the dig - if not, then perhaps we need an improve-review-skill skill that one invokes when they find such a case, or need to construct the list by hand.
Ironically (or not?), I'm not familiar with the issues so far to be good reviewer of the agent I asked to do the dig here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants