mirror of
https://github.com/Comfy-Org/comfy-skills.git
synced 2026-11-04 23:37:45 +00:00
[PR #20] [CLOSED] fix(generate-3d): retarget partner discovery at partner/3d and document the does-not-serve-type fall-through (BE-8101) #18
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfy-skills#18
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/comfy-skills/pull/20
Author: @mattmillerai
Created: 8/20/2026
Status: ❌ Closed
Base:
main← Head:matt/be-8101-generate-3d-partner-prefix📝 Commits (1)
6b93a54fix(generate-3d): route partner discovery atpartner/3d, not the emptyapi node/📊 Changes
1 file changed (+2 additions, -2 deletions)
View changed files
📝
claude-code/commands/generate-3d.md(+2 -2)📄 Description
ELI-5
/comfy-cloud:generate-3dtold itself to find Meshy/Tripo/Rodin/Tencent nodes by askingsearch_nodesforcategory: "api node/3d". Nothing in the catalog has ever been filed underapi node/— the real prefix ispartner/— so the lookup came back empty and the command could tell a user the provider isn't wired up. This points it atpartner/3d(32 nodes, exactly those four providers) and, because the shortcut now actually reachespartner_generatefor the first time, documents the one rejection it will get there and where to go next.The dead prefix, measured
claude-code/commands/generate-3d.mdis the canonical, shipping copy —README.md:47(re-read verbatim at authoring time): "claude-code/— thecomfy-cloudClaude Code plugin:commands/(the slash commands) … Edit commands here.", withskills/marked "legacy … Frozen".cf7949dfixed the legacyskills/copy and missed this one.Counted against the live catalog snapshot (
Comfy-Org/comfy-cloud-mcp-serverdata/object_info.json.gz@67eeb5ff, 3621 nodes), read-only:search_nodescategory prefixapi node/api node/3dpartner/partner/3dpartner/3d/{Meshy,Rodin,Tripo,Tencent}Those four are precisely the providers the command's own prose names ("Meshy, Tripo, Rodin, Tencent, and so on"), so the shortcut was inert for every provider it advertises.
What changed
Two lines in one file, both ported from the blessed
skills/comfy-generate-3d.mdwording:claude-code/commands/generate-3d.md:9(Step 0)category: "api node/3d"→category: "partner/3d";api node/3d/...→partner/3d/...; fall-through extended to cover the"does not serve type"rejection and route on to the template path.claude-code/commands/generate-3d.md:15(step 2 bullet)category: "3d"orcategory: "api node/3d"→category: "3d"orcategory: "partner/3d".Both lines are now byte-identical to
skills/comfy-generate-3d.md:5and:11. In fact the two files are now identical in full apart from the commands copy's 3-line YAML frontmatter and one blank line —diff <(tail -n +4 claude-code/commands/generate-3d.md) skills/comfy-generate-3d.mdreports only that blank line. No frontmatter was touched.Negative-claim falsification (the
#581rule)The diff adds the string
"does not serve type", which trips the capability-denial trigger, so I went and looked rather than asserting it. Two separate claims, both checked read-only against thecomfy-cloud-mcp-serverclone @67eeb5ff— no dispatch, no network, no credits:src/partner/client/registry/threed.tsisexport const THREED_MODELS = {} as Readonly<Record<string, ModelEntry>>— zero registered 3D partner models — andsrc/tools-execution.ts:2330emitspartner_generate does not serve type "${type}" — no ${type} partner model is registered.for exactly that case. So apartner_generate({type: "3d"})call reached via the newly-working node lookup does get this error, which is why the sentence is needed at all: without it the fixed shortcut would dead-end where the broken one merely fell through.search_templateswithtag: "Image to 3D". Againstdata/templates.json(580 templates): 45 carry 3D content, the live 3D-ish tags are3D,Image to 3Dand3D Model, and both template ids the server's own partner playbook names for 3D —api_hunyuan3d_text_to_modelandapi_rodin3d_gen2_5_text_to_3d— are present.The net direction is capability-expanding: before this PR the shortcut matched nothing and could conclude the provider was unwired; after it, the shortcut runs, and its one failure mode is documented with a working route onward. The same wording is corroborated by three independent shipping surfaces in that server —
src/instructions.ts:55,src/partner-playbook.ts:91, and the regression testsrc/classify-error.test.ts:426(BE-2519) — and byskills/comfy-generate-3d.md:5, already onmainhere.Scope
Deliberately confined to
generate-3d.md. Open PR #19 (fix/partner-generate-guess-and-bounce) ownsclaude-code/commands/generate-{audio,image,video}.mdandskills/comfy-generate-{audio,image,video}.md; I confirmed its file list viagh pr view 19 --json files— zero overlap with this PR. #19's own Residual section namesclaude-code/commands/generate-3d.md:9,15as deferred to a follow-up; this is that follow-up.Sweep of the half this PR does not fix: after this change,
grep -rn 'api node/'across the repo returns 2 remaining lines in 2 files —claude-code/commands/generate-audio.md:9andclaude-code/commands/generate-image.md:9, both owned by #19.claude-code/commands/generate-video.mdand all fourskills/*.mdare already clean onmain. So the repo-wide count goes 4 → 2 here and 2 → 0 when #19 merges. Not touched by this PR, by the ticket's explicit instruction.Residual — the canonical surface has no automated guard
The lint that catches this class of bug —
Comfy-Org/comfy-cloud-mcp-serversrc/guide-capability-assertions.ts, whoseadvertisedNodeCategories()reads everycategory:value out of the rendered corpus and fails any that matches zero nodes — cannot see this file. Its corpus (renderGuideCorpus()insrc/guide-corpus.ts) is the server's own surfaces plusdata/skills.json, and.github/workflows/refresh-skills.yml:3mirrorsComfy-Org/comfy-skills/skills/*.mdonly. So the lint guards the copy this repo's README calls legacy and frozen and not the copy it calls canonical, which is exactly howskills/got fixed bycf7949dwhile the shipping command sat broken for weeks. This PR fixes the instance; the coverage gap is untouched and can produce the same drift again. Extending the refresh/lint corpus toclaude-code/commands/*.mdis a change in another repo and out of scope here.Because of that residual this is a
Refs, not aCloses— and the ticket's own repo-widegrep -rn 'api node/' .acceptance check cannot go empty until #19 merges either.Verification
No test or lint toolchain exists in this repo (no
package.json, noMakefile, no pre-commit config — confirmed by inspection; the sole CI workflow isdetect-unreviewed-merge.yml), so verification is the plugin validator plus the checks the ticket names:claude plugin validate ./claude-code→ ✔ Validation passedgrep -rn 'api node/' claude-code/commands/generate-3d.md→ no hitsdiff <(sed -n '9p' claude-code/commands/generate-3d.md) <(sed -n '5p' skills/comfy-generate-3d.md)→ byte-identical; same for:15vs:11git diff --stat origin/main...HEAD→ 1 file, 2 insertions, 2 deletions; line count unchanged (pure in-line rewording, no structural edits)Judgment calls
skills/wording verbatim, byte-equality with the blessed copy is a checkable property worth more than local punctuation consistency, and the sibling command files (generate-audio.md,generate-image.md) already use em-dashes.skills/↔claude-code/commands/drift that #19 flags for the video command is a human decision, not a sync, and is not touched here.Unexercised artifacts
partner_generatewas never actually called, and neither wassearch_nodesagainst a live server. All verification is static/read-only against the pinnedcomfy-cloud-mcp-serverclone @67eeb5ff(catalog snapshot, registry source, template index, error-emitting call site). A real 3D generation spends credits, so it is out of bounds for an unattended run; the claims under test are fully determined by the data and source read above.comfy-skillsorigin/main@2e6ec4a. If the partner catalog re-files 3D nodes again, this prose needs a re-read.Provenance
claude plugin validate ./claude-code→ "✔ Validation passed";grep -rn 'api node/' claude-code/commands/generate-3d.md→ 0 hits; lines 9 and 15 diffed byte-for-byte againstskills/comfy-generate-3d.mdlines 5 and 11 → identical, and the two files are identical in full apart from frontmatter;git diff --stat origin/main...HEAD→ 1 file, +2/−2; repo has no test/lint suite (nopackage.json/Makefile/ pre-commit — confirmed by inspection, sole workflow isdetect-unreviewed-merge.yml); read-only Node probe ofdata/object_info.json.gz@67eeb5ffproduced the 0 / 0 / 231 / 32 category counts tabled above;data/templates.jsonprobe → 45 of 580 templates 3D, both playbook-named 3D template ids present;src/partner/client/registry/threed.ts,src/tools-execution.ts:2330,src/guide-corpus.ts,src/guide-capability-assertions.tsand.github/workflows/refresh-skills.ymlread verbatim;README.md:47read verbatim. No partner dispatch, no network calls, no credits spent.grep -rn 'api node/' .check still returns 2 hits (generate-audio.md,generate-image.md), which the ticket itself scopes to open PR #19; this PR does not touch those files. Closure claim downgraded toRefson the lint-coverage residual named above.Refs BE-8101.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.