-
Notifications
You must be signed in to change notification settings - Fork 131
Add ComfyUI node compatibility checker #973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
89e9134
0acb6d4
168f159
672da19
e9e41a3
2e20126
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,145 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| name: ComfyUI Node Compatibility Report | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Informational report only — never blocks PR merges. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Statically scans ComfyUI master source + templates/*.json (no torch, no running server). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| on: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| pull_request: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| types: [opened, synchronize] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| paths: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - 'templates/**' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| workflow_dispatch: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+6
to
+11
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win Add a Rapid 🔒 Suggested concurrency block on:
pull_request:
types: [opened, synchronize]
paths:
- 'templates/**'
workflow_dispatch:
+
+concurrency:
+ group: comfyui-node-compat-${{ github.event.pull_request.number || github.ref }}
+ cancel-in-progress: true📝 Committable suggestion
Suggested change
🧰 Tools🪛 zizmor (1.26.1)[warning] 6-11: insufficient job-level concurrency limits (concurrency-limits): workflow is missing concurrency setting (concurrency-limits) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| permissions: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| contents: read | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| pull-requests: write | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+6
to
+15
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🌐 Web query:
💡 Result: Yes, GitHub intentionally downgrades the GITHUB_TOKEN to read-only for workflows triggered by pull request events from forked repositories [1][2][3]. Even if you explicitly define write permissions in your workflow configuration (using the permissions key) or set repository-level default permissions to read/write, GitHub enforces this read-only restriction for security reasons to prevent malicious code in a fork from potentially compromising the base repository [1][3][4][5]. There is a specific repository-level setting called "Send write tokens to workflows from pull requests" that, when enabled, allows pull requests from forks to receive a GITHUB_TOKEN with write permissions [6][7]. However, this is disabled by default for security and must be explicitly enabled by a repository administrator [6][7]. For workflows that require write access (e.g., to post comments on a PR), a common architectural pattern is to use a two-stage workflow [4]: 1. A first, untrusted workflow (triggered by pull_request) runs on the fork's code with read-only permissions and saves necessary information as workflow artifacts [4]. 2. A second, trusted workflow (triggered by workflow_run) runs on the base repository's context, has access to write permissions, and consumes the artifacts produced by the first workflow to perform the desired actions (like posting a comment) [4]. Alternatively, the pull_request_target event can be used to run workflows in the context of the base repository, which does not receive this automatic read-only downgrade, but this approach carries significant security risks if not handled carefully, as it executes code from the pull request using the base repository's permissions [3][8][5]. Citations:
Fork PRs can't post comments with a For pull requests originating from forks, GitHub strictly downgrades the Since this repo welcomes fork contributions, you should verify the intended behavior. The usual safe spell is a 🧰 Tools🪛 zizmor (1.26.1)[error] 15-15: overly broad permissions (excessive-permissions): pull-requests: write is overly broad at the workflow level (excessive-permissions) [warning] 15-15: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment (undocumented-permissions) [warning] 6-11: insufficient job-level concurrency limits (concurrency-limits): workflow is missing concurrency setting (concurrency-limits) 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| env: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| COMFYUI_GITHUB_REPO: Comfy-Org/ComfyUI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| COMFYUI_REF: master | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| jobs: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| report: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| runs-on: ubuntu-latest | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| steps: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - name: Checkout workflow templates (JSON only) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| uses: actions/checkout@v4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| sparse-checkout: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| templates/*.json | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| scripts/comfyui_node_compat/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| scripts/lib/paths.py | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| scripts/lib/locale_index_files.py | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| sparse-checkout-cone-mode: false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - name: Set up Python | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| uses: actions/setup-python@v5 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+25
to
+37
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value Optional hardening per static analysis (zizmor). A few low-risk posture nits worth a once-over: set 🛡️ persist-credentials - name: Checkout workflow templates (JSON only)
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
+ persist-credentials: false
sparse-checkout: |📝 Committable suggestion
Suggested change
🧰 Tools🪛 zizmor (1.26.1)[warning] 25-34: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 26-26: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) [error] 37-37: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| python-version: '3.11' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - name: Run static ComfyUI node compatibility check | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| id: compat_check | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| continue-on-error: true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| python3 scripts/comfyui_node_compat/check.py \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --static-scan \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --clone-comfyui \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --templates-dir templates \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --markdown-output compat_report.md \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --json-output compat_report.json \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --no-log-file \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --no-fail | tee compat_check.log | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - name: Write workflow failure report | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if: steps.compat_check.outcome != 'success' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cat > compat_report.md <<EOF | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## ComfyUI Node Compatibility Report | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| **Status: check could not complete** — no template compatibility results were produced. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| _Informational only — this check does not block merging._ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Setup failure | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Static compatibility script exited with an error (see workflow logs). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Expected mode: \`--static-scan --clone-comfyui\` against \`${COMFYUI_GITHUB_REPO}\` (\`${COMFYUI_REF}\`). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Next steps | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Open the workflow run logs for details. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Re-run locally after starting ComfyUI: \`npm run validate:comfyui-nodes\` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Or run CI-style static scan locally: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| \`python3 scripts/comfyui_node_compat/check.py --static-scan --clone-comfyui\` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| EOF | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - name: Comment compatibility report on PR | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if: always() && github.event_name == 'pull_request' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| uses: actions/github-script@v7 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| script: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const fs = require('fs'); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const readFile = (path) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return fs.readFileSync(path, 'utf8'); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } catch { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return ''; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| let report = readFile('compat_report.md').trim(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (!report) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| report = [ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| '## ComfyUI Node Compatibility Report', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| '', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| '**Status: no report generated.**', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| '', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| '_Informational only — this check does not block merging._', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| '', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| readFile('compat_check.log').trim() || 'See workflow logs for details.', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ].join('\n'); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const marker = '<!-- comfyui-node-compat-report -->'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const maxLength = 60000; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (report.length > maxLength) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| report = report.slice(0, maxLength) + '\n\n...(Report truncated due to length. Download the workflow artifact for the full report.)'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const body = `${marker}\n${report}\n\n---\n*This comment is automatically updated by the ComfyUI Node Compatibility Report workflow.*`; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const { data: comments } = await github.rest.issues.listComments({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| owner: context.repo.owner, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| repo: context.repo.repo, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| issue_number: context.issue.number, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const existing = comments.find((comment) => comment.body.includes(marker)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+112
to
+118
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Paginate
♻️ Use the paginator- const { data: comments } = await github.rest.issues.listComments({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: context.issue.number,
- });
+ const comments = await github.paginate(github.rest.issues.listComments, {
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ per_page: 100,
+ });📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (existing) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| await github.rest.issues.updateComment({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| owner: context.repo.owner, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| repo: context.repo.repo, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| comment_id: existing.id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| body, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| await github.rest.issues.createComment({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| owner: context.repo.owner, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| repo: context.repo.repo, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| issue_number: context.issue.number, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| body, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - name: Upload compatibility report artifact | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if: always() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| uses: actions/upload-artifact@v4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| name: comfyui-node-compat-report | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| path: | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| compat_report.md | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| compat_report.json | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| compat_check.log | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if-no-files-found: ignore | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| retention-days: 14 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -67,6 +67,7 @@ PR opened/updated | |||||||||||||||||
| | Add a workflow template | Edit `templates/`, `bundles.json`, then `python scripts/sync/sync_bundles.py` | | ||||||||||||||||||
| | Add a subgraph blueprint | Edit `blueprints/`, `blueprints_bundles.json`, then `python scripts/sync/sync_blueprints.py` | | ||||||||||||||||||
| | Import external blueprints | Copy JSONs to `blueprints/`, then `python scripts/blueprints/import_blueprints.py` | | ||||||||||||||||||
| | Check node compatibility | `npm run validate:comfyui-nodes` (local ComfyUI) or see [`scripts/README.md`](scripts/README.md#comfyui-node-compatibility-check) | | ||||||||||||||||||
|
|
||||||||||||||||||
| --- | ||||||||||||||||||
|
|
||||||||||||||||||
|
|
@@ -580,9 +581,13 @@ CI automatically validates: | |||||||||||||||||
| | Bundle consistency | ✅ | ✅ | | ||||||||||||||||||
| | Manifest sync | ✅ | ✅ | | ||||||||||||||||||
| | Thumbnails | ✅ | ❌ (optional) | | ||||||||||||||||||
| | ComfyUI node compatibility | ✅ (informational PR comment) | ❌ | | ||||||||||||||||||
|
|
||||||||||||||||||
| Run locally before committing: | ||||||||||||||||||
| ```bash | ||||||||||||||||||
| python scripts/sync/sync_bundles.py # Templates | ||||||||||||||||||
| python scripts/sync/sync_blueprints.py # Blueprints | ||||||||||||||||||
| npm run validate:comfyui-nodes # Optional: node baseline vs templates (needs running ComfyUI) | ||||||||||||||||||
| ``` | ||||||||||||||||||
|
Comment on lines
586
to
591
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Add a blank line before the fenced block (MD031). markdownlint flags the fence at Line 587 — let it breathe with a blank line above. 📝 Blank line before fence Run locally before committing:
+
```bash
python scripts/sync/sync_bundles.py # Templates📝 Committable suggestion
Suggested change
🧰 Tools🪛 markdownlint-cli2 (0.22.1)[warning] 587-587: Fenced code blocks should be surrounded by blank lines (MD031, blanks-around-fences) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||
|
|
||||||||||||||||||
| See [`scripts/README.md`](scripts/README.md#comfyui-node-compatibility-check) for local vs static scan modes and log output. | ||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -16,6 +16,7 @@ | |||||
| "mcp:models": "python scripts/mcp/enhance_models_registry.py", | ||||||
| "validate:templates": "python scripts/validate/validate_templates.py", | ||||||
| "validate:manifests": "python scripts/validate/validate_manifests.py", | ||||||
| "validate:comfyui-nodes": "python3 scripts/comfyui_node_compat/check.py", | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value Interpreter inconsistency: Lines 17-18 invoke ♻️ Optional alignment- "validate:comfyui-nodes": "python3 scripts/comfyui_node_compat/check.py",
+ "validate:comfyui-nodes": "python scripts/comfyui_node_compat/check.py",📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| "build:all": "NX_ADD_PLUGINS=false NX_DAEMON=false npx nx run-many --target build --skip-nx-cache", | ||||||
| "site:install": "cd site && pnpm install", | ||||||
| "site:dev": "cd site && pnpm run dev", | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| """ComfyUI workflow template node compatibility checks.""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Surround fenced code blocks with blank lines (MD031).
markdownlint flags the fences at Lines 76 and 82 — a blank line above each keeps the renderer (and the linter) from fencing with you.
📝 Add blank lines around fences
**Local testing (full coverage — needs running ComfyUI):** + ```bash npm run validate:comfyui-nodes # Reports: comfyui-node-compat.latest.log, comfyui-node-compat.log (gitignored)Local testing (CI-style static scan):
+
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 76-76: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
[warning] 82-82: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
🤖 Prompt for AI Agents
Source: Linters/SAST tools