Skill loader returns 'unknown or no longer available' for skills that exist on disk (session catalog snapshot) #1650
Replies: 1 comment
|
这个时间相关性很有价值,但从 rc.6 当前实现看,“catalog 在 session start 固定快照”并不是既定机制,需要先把这个假设与复现分开:
所以报错能证明的是“该次 live scoped lookup 没有解析出这个 name,或它在 list→get 之间消失”,还不能证明它只信任 session 里的旧 catalog。 这组环境里更值得优先验证:
建议的最小判定测试是:先用一个稳定目录启动 session 并完成一次 step,再原子地加入全新 skill,等待 watcher stability window 后,在同一 session 的下一 step观察 replacement 不建议用“miss 后直接读取 对应源码与契约:
Handbook 的 Skill discovery / precedence / invocation 图: |
Uh oh!
There was an error while loading. Please reload this page.
GitHub Issue Draft — deepseek-ai/deepseek-harness
Summary
The
skillloader tool intermittently rejects skills withError: skill "<name>" is unknown or no longer available, even though the skill'sSKILL.mdexists under~/.dsh/skills/<name>/and other sessions started minutes later load the same skill successfully. All observed failures fall inside a narrow time window in which the skill registry was being modified, which points at the session skill catalog being snapshotted (or scanned) at session start rather than resolved lazily at tool-call time.Environment
dsh-desktop-electron,DSH_HOME=D:\dsh-home)~/.dsh/skills/(junctioned in bulk during setup)Evidence
Failing sessions (both in
~/.dsh/sessions/--C-Users-Allan~0020Hill-AppData-Local-Temp-dsh-test--/):session-bc2caff8-e081-4959-9649-a253ded168b1session-a66ab322-2619-492b-a1b7-235ddfc4f4f1Verbatim tool result (role=user,
isError: true):The assistant's own on-error observation (recorded in the session log):
Counter-example — success in a session started ~20 min later (
session-117622a0-505a-48b2-9bf1-2d8d929cde3a, 08-14 10:14+):Assistant verdict: "The
wiki-opsskill loaded successfully. ✅ Succeeded."Same skills directory, same machine — only the session start time differs.
Timing correlation
The two failing sessions started 09:54 and 09:57 — during a window when the skill registry on this machine was actively being modified (bulk-importing 69 skills, fixing skill frontmatter, verifying catalog registration). Sessions started after the registry settled load the skill without error. This matches: the skill catalog is built at session start from a registry scan that was mid-mutation (or from cached/stale state), and the loader hard-fails on any name absent from that snapshot — with no on-disk fallback.
Impact
SKILL.mdreadable), but the loader rejects it, and error messages carry no hint about the snapshot mechanism.Suggested fix candidates
~/.dsh/skills/<name>/SKILL.mddirectly before returning "unknown" (also fixes stale/partial catalogs).Repro sketch
~/.dsh/skills/while a DSH session is open (or immediately before starting one).skilltool with that skill's name.SKILL.mdexists on disk; repeat after registry settles → succeeds.Drafted 2026-08-15 by Claude from session-log evidence (see
dsh_dream_worker.pycluster #4,~/.dsh/sessions/archives). Session files are zstd-compressed JSONL; the quoted excerpts are verbatim.All reactions