Просмотр исходного кода

skills: document build_profile + TOML bare-key-after-[[table]] pitfall (r28 half-pin incident)

Alexander Korolev 1 месяц назад
Родитель
Сommit
3669194b80
2 измененных файлов с 12 добавлено и 0 удалено
  1. 7 0
      .agents/skills/jovian-images/SKILL.md
  2. 5 0
      .agents/skills/sm121-launcher/SKILL.md

+ 7 - 0
.agents/skills/jovian-images/SKILL.md

@@ -154,6 +154,13 @@ after — **when JIT mounts are warm** (~9 min total; ~45 min cold/first).
   `rg --include` does not exist (`-g '*.py'`); node zsh aborts on unmatched
   globs; the sm121 launcher's chunked uploader streams 60 KB per ssh round
   trip (fine for 215 KB contexts, hopeless for 400 MB dirs).
+- **TOML context trap in recipes (2026-09-08)**: a bare top-level key placed
+  AFTER a `[[extra_mounts]]` block parses into the LAST mount table and is
+  silently ignored (serde has no deny_unknown_fields) — the build ran with
+  the base pins while the recipe "had" the override. Table headers
+  (`[build.versions]`) reset the context, so tables are safe anywhere; bare
+  keys (e.g. `build_profile`) must sit before the first `[section]`.
+  Verify with `python3 -c "import tomllib; ..."` that the key is top-level.
 - **Half-cut revs (2026-09-08, r28)**: advancing only the vLLM pin of a
   rev while leaving b12x/LMCache at the previous rev builds a mixed stack
   that still works and benches — but skipped 21 b12x commits (GLM/DeepSeek

+ 5 - 0
.agents/skills/sm121-launcher/SKILL.md

@@ -58,6 +58,11 @@ still required) — dangerous for GPU recipes (OOM / port conflicts).
 engine = "vllm"                 # or "sglang"
 docker_image = "img:tag"
 docker_image_dir = "recipe-name" # build dir under docker-images/ (default: recipe name)
+build_profile = "profile-name"  # optional: docker-images/<dir>/profiles/<name>.env
+#   merged over the image versions.env (image < profile < [build.versions])
+#   and folded into the build checksum — a rev's pin set in one file.
+#   MUST be a top-level key: after [[extra_mounts]] it silently lands in the
+#   last mount table (TOML context) and is ignored.
 model = "org/model"
 port = 30000
 required_nodes = 2