diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 22d17ce..2086d92 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -123,11 +123,14 @@ touches_consent=$(printf '%s\n' "$staged" | grep -E '(^|/)(play\.html|scripts/ch # play.html bakes creator sample results into #a= shares so keyless recipients see what the app makes; # index.html's buildShareUrl("app") packs the same envelope (samples + lang parity, asserted by the checker). touches_sharesamples=$(printf '%s\n' "$staged" | grep -E '(^|/)(index\.html|play\.html|scripts/check-share-samples\.mjs)$' || true) +# llms-full.txt is generated and says "do not edit by hand", so only a re-run of the generator keeps it +# true. It once advertised the retired draw node for days after every source had dropped it. +touches_llmsfull=$(printf '%s\n' "$staged" | grep -E '(^|/)(llms-full\.txt|llms\.txt|README\.md|index\.html|scripts/(gen-llms-full|check-llms-full)\.mjs)$' || true) # Nothing to check unless an .html file, one of the checkers, or a guarded doc changed. # Every touches_* variable belongs in this chain — a gate left out of it never runs on a # commit that stages only its own files, which is exactly the commit it exists to catch. -[ -z "$staged_html" ] && [ -z "$touches_launchfacts" ] && [ -z "$touches_njseditor" ] && [ -z "$touches_llmgate" ] && [ -z "$touches_export" ] && [ -z "$touches_login" ] && [ -z "$touches_sw" ] && [ -z "$touches_compat" ] && [ -z "$touches_run" ] && [ -z "$touches_jsparity" ] && [ -z "$touches_seedcache" ] && [ -z "$touches_imgports" ] && [ -z "$touches_langpages" ] && [ -z "$touches_editorports" ] && [ -z "$touches_settings" ] && [ -z "$touches_quickadd" ] && [ -z "$touches_i18n" ] && [ -z "$touches_updates" ] && [ -z "$touches_createapp" ] && [ -z "$touches_stale" ] && [ -z "$touches_vresume" ] && [ -z "$touches_lipsync" ] && [ -z "$touches_aresume" ] && [ -z "$touches_share" ] && [ -z "$touches_pricing" ] && [ -z "$touches_combine" ] && [ -z "$touches_pacing" ] && [ -z "$touches_graphpersist" ] && [ -z "$touches_graphsigs" ] && [ -z "$touches_describeapply" ] && [ -z "$touches_authlc" ] && [ -z "$touches_mediapriv" ] && [ -z "$touches_verhist" ] && [ -z "$touches_rungating" ] && [ -z "$touches_appsstorage" ] && [ -z "$touches_linkerr" ] && [ -z "$touches_deploy" ] && [ -z "$touches_hiddencss" ] && [ -z "$touches_connect" ] && [ -z "$touches_undo" ] && [ -z "$touches_costaccrue" ] && [ -z "$touches_resize" ] && [ -z "$touches_catalog" ] && [ -z "$touches_upscale" ] && [ -z "$touches_drift" ] && [ -z "$touches_promptcaps" ] && [ -z "$touches_consent" ] && [ -z "$touches_sharesamples" ] && [ -z "$touches_examples" ] && exit 0 +[ -z "$staged_html" ] && [ -z "$touches_launchfacts" ] && [ -z "$touches_njseditor" ] && [ -z "$touches_llmgate" ] && [ -z "$touches_export" ] && [ -z "$touches_login" ] && [ -z "$touches_sw" ] && [ -z "$touches_compat" ] && [ -z "$touches_run" ] && [ -z "$touches_jsparity" ] && [ -z "$touches_seedcache" ] && [ -z "$touches_imgports" ] && [ -z "$touches_langpages" ] && [ -z "$touches_editorports" ] && [ -z "$touches_settings" ] && [ -z "$touches_quickadd" ] && [ -z "$touches_i18n" ] && [ -z "$touches_updates" ] && [ -z "$touches_createapp" ] && [ -z "$touches_stale" ] && [ -z "$touches_vresume" ] && [ -z "$touches_lipsync" ] && [ -z "$touches_aresume" ] && [ -z "$touches_share" ] && [ -z "$touches_pricing" ] && [ -z "$touches_combine" ] && [ -z "$touches_pacing" ] && [ -z "$touches_graphpersist" ] && [ -z "$touches_graphsigs" ] && [ -z "$touches_describeapply" ] && [ -z "$touches_authlc" ] && [ -z "$touches_mediapriv" ] && [ -z "$touches_verhist" ] && [ -z "$touches_rungating" ] && [ -z "$touches_appsstorage" ] && [ -z "$touches_linkerr" ] && [ -z "$touches_deploy" ] && [ -z "$touches_hiddencss" ] && [ -z "$touches_connect" ] && [ -z "$touches_undo" ] && [ -z "$touches_costaccrue" ] && [ -z "$touches_resize" ] && [ -z "$touches_catalog" ] && [ -z "$touches_upscale" ] && [ -z "$touches_drift" ] && [ -z "$touches_promptcaps" ] && [ -z "$touches_consent" ] && [ -z "$touches_sharesamples" ] && [ -z "$touches_llmsfull" ] && [ -z "$touches_examples" ] && exit 0 if ! command -v node >/dev/null 2>&1; then echo "pre-commit: node not found, skipping HTML JS checks" >&2 exit 0 @@ -502,3 +505,14 @@ fi if [ -n "$touches_launchfacts" ]; then node "$root/scripts/check-launch-facts.mjs" fi + +# 42) LLMS-FULL FRESHNESS: llms-full.txt is the single-file reference agents fetch, it is generated, +# and it says "do not edit by hand" — so nothing keeps it true except somebody re-running the +# generator. Nobody did, and it advertised the retired draw node after every source had dropped +# it. Offline: regenerates the sections sourced from THIS repo (llms.txt, README.md, index.html) +# and diffs them byte for byte, then asserts every node type named in the two libraries' +# supported-node tables is still registered in index.html. Regenerate with +# `node scripts/gen-llms-full.mjs`. CI diffs the library sections too, against fresh checkouts. +if [ -n "$touches_llmsfull" ]; then + node "$root/scripts/check-llms-full.mjs" +fi diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index b659beb..42ef312 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -22,6 +22,12 @@ jobs: repository: nanoodlecom/nanoodle-js path: nanoodle-js-sibling + - name: Checkout nanoodle-py (llms-full.txt source) + uses: actions/checkout@v4 + with: + repository: nanoodlecom/nanoodle-py + path: nanoodle-py-sibling + - uses: actions/setup-node@v4 with: node-version: 22 @@ -45,3 +51,13 @@ jobs: fails=$((fails+1)) fi exit $fails + + # The pre-commit guard can only diff the sections llms-full.txt takes from THIS + # repo; the two library sections need the sibling READMEs. Here they are checked + # out fresh, so this is the check that catches a library README moving on without + # a regeneration. Reads the siblings from disk — no clone, no network. + - name: llms-full.txt matches the library READMEs + env: + NANOODLE_JS: ${{ github.workspace }}/nanoodle-js-sibling + NANOODLE_PY: ${{ github.workspace }}/nanoodle-py-sibling + run: node scripts/gen-llms-full.mjs --check diff --git a/growth/i18n-drafts/zenn-comfyui-ja.md b/growth/i18n-drafts/zenn-comfyui-ja.md index 3b844d4..6b29bb2 100644 --- a/growth/i18n-drafts/zenn-comfyui-ja.md +++ b/growth/i18n-drafts/zenn-comfyui-ja.md @@ -78,7 +78,7 @@ https://nanoodle.com/ja/ を開くとエディタがそのまま起動します ### 2. ノードを置いてつなぐ -テキスト・画像・動画・音声のモデルノードに加えて、Draw(手描き入力)、 +テキスト・画像・動画・音声のモデルノードに加えて、Join(テキスト結合)、 Resize、Choice、Comment などのユーティリティノードがあります。 たとえば: diff --git a/guide/graph-format.html b/guide/graph-format.html index 31423e0..a93dfe4 100644 --- a/guide/graph-format.html +++ b/guide/graph-format.html @@ -129,7 +129,7 @@

Ports and wires