Repository navigation
feat(skills): move the openclaw and openclaw-layer skill bodies beside their owner candy - #7
Conversation
…e their owner candy Both inline skill bodies leave their manifests with full YAML frontmatter from extract.py. candy/openclaw/charly.yml loses openclaw-layer; box/openclaw/charly.yml loses openclaw, whose body resolves beside the OWNER candy (candy/openclaw/) rather than beside the declaring box - a repo-root .agents/ does not work either, both measured. Node description: blocks are deleted too because skills_collect.go reads s.Description only on its sf == nil branch. Four files, 149/140.
Review — PASSHead SHA: Security screen: PASS — pure content relocation (YAML Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
|
STATUS - the successor to #6, built from the tools, with the frontmatter verified This replaces #6, which was force-pushed at round 336 and could not be merged for that reason. What is different here:
Why the owner-candy root: Gates on this head: The tier in the footer is derived, not chosen: the body pastes a live gate run, and the changed paths are Markdown and Agent: charly Assisted-by: DeepSeek Harness ollama-cloud deepseek-v4.1-flash (analysed on a live system) |
Review — PASSHead SHA: Security screen: PASS — pure content relocation (YAML Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
Summary
Moves the inline
skill:bodies out ofbox/openclaw/charly.ymland into the candy's own.agents/skills/directory — beside the candy that declares each node, which is where the loader reads it — leaving eachskill:node carrying only its routing metadata. The exact file paths are in the table below; no placeholder path isnarrated here, because a path in prose that the diff does not contain is a claim the reader cannot check.
openclaw-layercandy/openclaw/.agents/skills/openclaw-layer/SKILL.mdopenclawcandy/openclaw/.agents/skills/openclaw/SKILL.mdDiff against
main: 149 insertions and 140 deletions across 4 files — 2 newSKILL.mdand the manifest, whose 2 skill-ownedcontent:blocks are deleted.The same hunk also deletes the 2
description:block(s) from theskill:node(s). That is deliberate and part of this change, not collateral:sdk/deploykit/skills_collect.goreadsentry.Description = s.Descriptiononly on itssf == nilbranch — the transitional in-line form — andentry.Description = sf.Descriptionoverwrites it unconditionally once a body file exists, so the node field is unreachable after this migration.Why beside the candy, and how it is proven
sdk/deploykit/skills_collect.goresolves the tree asfilepath.Join(layer.GetSourceDir(), ".agents/skills"), andGetSourceDir()is the directory of the candy whose manifest declares the node.sdk#430(merged,v0.2026293.1143) addeddeploykit.CollectSkillBodies, andplugin-box#57(merged,v2026.293.1153) calls it fromrunValidateEngine— socharly box validatenow fails when an authoredskill:node has no body beside its candy. Before those two merges, no command in a repo that composes no box could read a
skill body at all, because
CollectSkillsgates body reads onBoxCandyChain, a label-size policy.How tested
Change class: config.
Negative control — one body moved to the repository root; the other 1 left in place:
Same tree, same nodes, same manifest — only one body's location differed.
2 hunk(s), one per stripped
content:block.Root
.agents/tree check — the body's R5 claim, shown rather than asserted:Rulebook compliance
/charly-internals:git-workflowbefore any git command.opencharly/opencharly#530(the missing gate) is closed bysdk#430+plugin-box#57;#528records the layout rule.deploykitandplugin-box, not in this repo.git add -f. Non-skillcontent:blocks are classified, not stripped..agents/tree:And the manifest carries no skill
content:and no root.agents/tree. Claim-keyed check: the numstat above.git statusread first; one branch offorigin/main; 1 commit, no amendment, no force-push.rc=1.charlyused is the worktree-local dev build(
bootstrap-charly.sh --dev-plugin plugin-box=<worktree>, i.e. the mergedplugin-box#57code), and it reports:The source worktree is at
ed9a5dad, whoseCHANGELOG/names the same CalVer — so the binary matches thesource it was built from, which is what R9 asks for.
charly box validaterun on the committed tree with both controls pasted.Change classification
Config — 2 skill bodies relocated beside their candy.
Filed issues
opencharly/opencharly#530— no in-repo gate exercises skill-body collection for a repo that authors no box. Closed bysdk#430+plugin-box#57.opencharly/opencharly#528— the layout rule the migration depends on.Agent: charly
Assisted-by: DeepSeek Harness ollama-cloud deepseek-v4.1-flash (analysed on a live system)