[PR #22] [CLOSED] feat(comfy-build): write the first-shot content for a local install #22

Closed
opened 2026-10-26 22:34:04 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/comfy-skills/pull/22
Author: @james00012
Created: 8/20/2026
Status: ❌ Closed

Base: feat/comfy-build-skill-scaffold ← Head: feat/comfy-build-first-shot-content


📝 Commits (5)

  • 1286b89 feat(comfy-build): write the first-shot content for a local install
  • 361b7e0 fix(comfy-build): name resolve's argument, and that --execute runs it anyway
  • 82fb198 style(comfy-build): drop em-dashes for the house punctuation rule
  • 0281ebb fix(comfy-build): stop promising controls and targets this path has no reach over
  • ec9dc87 fix(comfy-build): three gaps a real proving run walked into

📊 Changes

1 file changed (+150 additions, -26 deletions)

View changed files

📝 comfy-cli/comfy-build/SKILL.md (+150 -26)

📄 Description

Fills the builder skill scaffold with the path from a scanned local ComfyUI install to a green build. Why: a bare agent pointed at this problem does not find the platform at all, and when it does, four of its eleven recorded stalls each cost a paid build to discover. Every one of those is a definition edit it could have made for free had it known.

Sub-issue: [comfy-skills] Write the first-shot content · Feature: a local install becomes a distribution that builds · Depends on: #21 (base branch; merge that first)

Also carries the sibling sub-issue Restate the website's creation guardrails: both are prose in this one file and their tickets say they land in one tag move.

  • The path, and where the free checks actually sit: --execute creates and cuts, so the server-side validate cannot run before the first build. Everything checkable for free is checked locally first; validate gates every cut after that.
  • Custom nodes go in by registry pin: comfy node install writes archives rather than clones, so every pack scans as source: local and --execute refuses to upload one. Each pack's pyproject.toml already carries the registry id and version the builder resolves, so no git archaeology is needed.
  • Torch, torchvision and torchaudio are pinned all together or not at all: pinning one replaces the builder's frozen stack line and releases the other two, which is how a mismatched torchvision arrives transitively.
  • The guardrails the website sets and this path does not: baseImage, modelPolicy and partnerNodePolicy are always written by the wizard; absent here they seal as allow-all and nothing errors. The skill sets them or says the default out loud before the cut.

Facts that move (Python, CUDA, torch, targets, model folders) are read from the CLI at run time and never written into the file.

Where this sits

flowchart LR
    subgraph SKILL["the builder skill · comfy-skills"]
        SCAF["scaffold and home<br>#21"]
        FIRST["first-shot content<br>◀ this PR"]
    end
    AGENT["terminal agent"]
    CLI["comfy-cli · comfy distribution"]
    B["comfy-builder"]
    WEB["platform website · bypassed"]
    SCAF --> FIRST
    FIRST --> AGENT
    AGENT --> CLI
    CLI --> B
    WEB -.-> B

Validation

  • Unit tests · not run. This repo has none; the change is one prose file.

  • Local stack, end to end · not run, and out of scope here. Driving a real install to a green build is its own sub-issue and is not yet done, so nothing below claims the skill has produced a build.

  • The installer contract · passed. comfy skills validate comfy-cli/comfy-build returns valid: true, and a path install writes the skill to all three surfaces (.claude/skills/comfy-build/SKILL.md, .cursor/rules/comfy-build.mdc, AGENTS.md) with its tables intact. This is what #21's CI job runs.

  • The registry claim · proved against the live registry. All six packs from the recorded session resolve at the exact endpoint the builder's freeze calls, keyed on their pyproject.toml name and version:

    comfyui-kjnodes 1.4.9               -> 200 https://cdn.comfy.org/kijai/comfyui-kjnodes/1.4.9/node.zip
    comfyui-art-venture 1.1.7           -> 200 https://cdn.comfy.org/protogaia/comfyui-art-venture/1.1.7/node.zip
    comfyui-inpaint-cropandstitch 3.0.12 -> 200 …
    comfyui-inpaint-nodes 1.4.3         -> 200 …
    comfyui_fill-nodes 2.26.0           -> 200 …
    was-node-suite-comfyui 1.0.1        -> 200 …
    
  • Every claim about the platform · read out of the code, not the transcript: the definition schema and its validation, the freeze's registry and git paths, the torch-stack constraint and its release rule, the default cut target, the sandbox timeout, and the wizard's create path.

Each recorded stall, and the line that prevents it
# The stall The line
1 Never found the platform; wrote a Dockerfile Opening paragraph
2 --execute cannot upload a local custom node Custom nodes: prefer the registry pin
3 Nothing maps a registry version to a git ref Same section, with the pyproject.toml recipe
4 scan writes a bare ComfyUI version the builder cannot resolve The ComfyUI pin: prefix it and prove it
5 scan freezes the host platform, never the target The freeze is evidence, and the target is not this machine
6 Dropping a pin is as dangerous as keeping a wrong one Pin all three torch-stack members or none
7 The builder resolves against PyPI only Never use a local version tag; the uv pip compile check
8 validate passing means less than its name What validate proves, and what it does not
9 The frozen install already failed pip check Run pip check before cutting
10 The published schema is too loose to author against The exactly-one-source rule and the policy shapes
11 comfy cloud whoami says signed out while builds work Ask the platform, never remember

Departures from the plan

  • Home: the sub-issue says skills/comfy-build/SKILL.md; the file is at comfy-cli/comfy-build/SKILL.md, the path #21 decided, because skills/ is documented as legacy and frozen.
  • Scope: the sibling guardrails sub-issue is in this PR rather than its own, since both are sections of this one file.
  • customNodePolicy: the wizard writes it but no service reads it, so the skill says exactly that rather than restating it as an enforced rule.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Comfy-Org/comfy-skills/pull/22 **Author:** [@james00012](https://github.com/james00012) **Created:** 8/20/2026 **Status:** ❌ Closed **Base:** `feat/comfy-build-skill-scaffold` ← **Head:** `feat/comfy-build-first-shot-content` --- ### 📝 Commits (5) - [`1286b89`](https://github.com/Comfy-Org/comfy-skills/commit/1286b89098978106b9301bfc45097e3bc7498790) feat(comfy-build): write the first-shot content for a local install - [`361b7e0`](https://github.com/Comfy-Org/comfy-skills/commit/361b7e07811b6ada4edb9a657ed9d2d3834c1c79) fix(comfy-build): name resolve's argument, and that --execute runs it anyway - [`82fb198`](https://github.com/Comfy-Org/comfy-skills/commit/82fb198f4859f42220913bf0a45cdbbd4ff019bd) style(comfy-build): drop em-dashes for the house punctuation rule - [`0281ebb`](https://github.com/Comfy-Org/comfy-skills/commit/0281ebb1be957aed86c7d53eda7d94c11559c05d) fix(comfy-build): stop promising controls and targets this path has no reach over - [`ec9dc87`](https://github.com/Comfy-Org/comfy-skills/commit/ec9dc878bbfe51f8e5f17f796d92afbc4f3df4b0) fix(comfy-build): three gaps a real proving run walked into ### 📊 Changes **1 file changed** (+150 additions, -26 deletions) <details> <summary>View changed files</summary> 📝 `comfy-cli/comfy-build/SKILL.md` (+150 -26) </details> ### 📄 Description Fills the [builder skill scaffold](https://github.com/Comfy-Org/comfy-skills/pull/21) with the path from a scanned local ComfyUI install to a green build. **Why:** a bare agent pointed at this problem does not find the platform at all, and when it does, four of its eleven recorded stalls each cost a paid build to discover. Every one of those is a definition edit it could have made for free had it known. **Sub-issue:** [\[comfy-skills\] Write the first-shot content](https://app.notion.com/p/3c26d73d36508165905ac953464ce8f7) · **Feature:** [a local install becomes a distribution that builds](https://app.notion.com/p/3c26d73d365081fd8353d532eb56ca00) · **Depends on:** #21 (base branch; merge that first) Also carries the sibling sub-issue [Restate the website's creation guardrails](https://app.notion.com/p/3c26d73d365081868d03d45323962dae): both are prose in this one file and their tickets say they land in one tag move. - **The path, and where the free checks actually sit:** `--execute` creates *and* cuts, so the server-side `validate` cannot run before the first build. Everything checkable for free is checked locally first; `validate` gates every cut after that. - **Custom nodes go in by registry pin:** `comfy node install` writes archives rather than clones, so every pack scans as `source: local` and `--execute` refuses to upload one. Each pack's `pyproject.toml` already carries the registry id and version the builder resolves, so no git archaeology is needed. - **Torch, torchvision and torchaudio are pinned all together or not at all:** pinning one replaces the builder's frozen stack line and *releases* the other two, which is how a mismatched torchvision arrives transitively. - **The guardrails the website sets and this path does not:** `baseImage`, `modelPolicy` and `partnerNodePolicy` are always written by the wizard; absent here they seal as allow-all and nothing errors. The skill sets them or says the default out loud before the cut. Facts that move (Python, CUDA, torch, targets, model folders) are read from the CLI at run time and never written into the file. ## Where this sits ```mermaid flowchart LR subgraph SKILL["the builder skill · comfy-skills"] SCAF["scaffold and home<br>#21"] FIRST["first-shot content<br>◀ this PR"] end AGENT["terminal agent"] CLI["comfy-cli · comfy distribution"] B["comfy-builder"] WEB["platform website · bypassed"] SCAF --> FIRST FIRST --> AGENT AGENT --> CLI CLI --> B WEB -.-> B ``` ## Validation - **Unit tests · not run.** This repo has none; the change is one prose file. - **Local stack, end to end · not run, and out of scope here.** Driving a real install to a green build is [its own sub-issue](https://app.notion.com/p/3c26d73d3650817e814cc764e829b2a4) and is not yet done, so nothing below claims the skill has produced a build. - **The installer contract · passed.** `comfy skills validate comfy-cli/comfy-build` returns `valid: true`, and a path install writes the skill to all three surfaces (`.claude/skills/comfy-build/SKILL.md`, `.cursor/rules/comfy-build.mdc`, `AGENTS.md`) with its tables intact. This is what #21's CI job runs. - **The registry claim · proved against the live registry.** All six packs from the recorded session resolve at the exact endpoint the builder's freeze calls, keyed on their `pyproject.toml` name and version: ``` comfyui-kjnodes 1.4.9 -> 200 https://cdn.comfy.org/kijai/comfyui-kjnodes/1.4.9/node.zip comfyui-art-venture 1.1.7 -> 200 https://cdn.comfy.org/protogaia/comfyui-art-venture/1.1.7/node.zip comfyui-inpaint-cropandstitch 3.0.12 -> 200 … comfyui-inpaint-nodes 1.4.3 -> 200 … comfyui_fill-nodes 2.26.0 -> 200 … was-node-suite-comfyui 1.0.1 -> 200 … ``` - **Every claim about the platform · read out of the code**, not the transcript: the definition schema and its validation, the freeze's registry and git paths, the torch-stack constraint and its release rule, the default cut target, the sandbox timeout, and the wizard's create path. <details> <summary><b>Each recorded stall, and the line that prevents it</b></summary> | # | The stall | The line | |---|---|---| | 1 | Never found the platform; wrote a Dockerfile | Opening paragraph | | 2 | `--execute` cannot upload a local custom node | Custom nodes: prefer the registry pin | | 3 | Nothing maps a registry version to a git ref | Same section, with the `pyproject.toml` recipe | | 4 | `scan` writes a bare ComfyUI version the builder cannot resolve | The ComfyUI pin: prefix it and prove it | | 5 | `scan` freezes the host platform, never the target | The freeze is evidence, and the target is not this machine | | 6 | Dropping a pin is as dangerous as keeping a wrong one | Pin all three torch-stack members or none | | 7 | The builder resolves against PyPI only | Never use a local version tag; the `uv pip compile` check | | 8 | `validate` passing means less than its name | What `validate` proves, and what it does not | | 9 | The frozen install already failed `pip check` | Run `pip check` before cutting | | 10 | The published schema is too loose to author against | The exactly-one-source rule and the policy shapes | | 11 | `comfy cloud whoami` says signed out while builds work | Ask the platform, never remember | </details> ## Departures from the plan - **Home:** the sub-issue says `skills/comfy-build/SKILL.md`; the file is at `comfy-cli/comfy-build/SKILL.md`, the path #21 decided, because `skills/` is documented as legacy and frozen. - **Scope:** the sibling guardrails sub-issue is in this PR rather than its own, since both are sections of this one file. - **`customNodePolicy`:** the wizard writes it but no service reads it, so the skill says exactly that rather than restating it as an enforced rule. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-26 22:34:04 +00:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/comfy-skills#22
No description provided.