Repository navigation
feat(skills)!: the skill lives beside the resolve/merge code it documents - #40
Merged
Merged
Conversation
…e it documents `pod-charly-automation` is a skills-only carrier: 0 `.go`, 0 `.cue`, no candy directory. The sidecar model's implementation is THIS candy — `sidecar_resolve.go` (types/merge/resolution), `sidecar_embedded.go` (the embedded template library), `config_setup.go` (the `charly config --sidecar` attachment + quadlet emission) — and the skill's own `## Source` section names exactly those files, so the body moves here byte-identically. `plugin-sidecar` is deliberately NOT the destination: its `kind:sidecar` provider only decodes the authored entity (a pb Invoke (OpLoad) envelope), the same shim-vs-substance split that sent `egress` to `plugin-egress` rather than `plugin-fleet` in opencharly#611. `AGENTS.md`'s "carries no `skill:` entity" claim (link to the CLOSED opencharly#291) is corrected, and its `/charly-pod:pod` entry now names `schema/pod.cue` as that skill's source of truth. Routing only: `name`/`family`/`owner` + the carrier's `triggers:`; `family: automation` is kept. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (documentation reviewed)
Review — PASSWhat the diff actually doesThree files, matching the body's "3 files changed, 326 insertions(+), 4 deletions(-)":
Verification against the body's claims
CommentsThere are 0 comments, so there is no maintainer/operator sign-off to weigh. The change must stand on its own evidence, and for a docs/config-only diff the structural evidence above is coherent. Non-blocking notes (do not gate)
AssessmentThe change is coherent and complete: the skill file is present, the node is correctly routing-only, AGENTS.md's stale claim is corrected, and the body's quantitative claims match the diff. No secrets, no injection surface, no dependency or privilege changes, no dead/legacy path introduced. No blocking defect found. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
pod-charly-automationis a skills-only carrier (0.go, 0.cue, no candy directory). Thesidecar model's implementation is this candy —
sidecar_resolve.go(resolve/merge),sidecar_embedded.go(the embedded template library) and thecharly config --sidecarattachment — which the skill's own
## Sourcesection names.plugin-sidecarwas the temptingwrong home: it only decodes the
sidecar:entity (kind:sidecar), the same shim-vs-substancedistinction that moved
egresstoplugin-egressin opencharly#611.The gate, per skill (opencharly#606): the entity comes from the skill's own prose,
never from its name; then where that entity exists; then the negative control.
sidecar## Sourcenamessidecar_resolve.go,sidecar_embedded.go,spec/spec/config.goandconfig_setup.go, all in this candyplugin-deploy-pod/candy/plugin-deploy-pod/→sidecar_resolve.go+sidecar_embedded.go+config_setup.go(deploy:pod)What is in this diff (3 files changed, 326 insertions(+), 4 deletions(-))
sha256sumoutput below).skill:node(s) incandy/plugin-deploy-pod/charly.yml—name/family/owner, and no inlinedescription:/content:: theprose is the file. An inline body that disagrees with its file is a hard error in the
marketplace generator.
family:is kept unchanged (automation), so every existing/charly-<family>:<name>address and every external reference to it still resolves;owner:becomesplugin-deploy-pod, so the bodies are read from<repo root>/.agents/skills/<name>/SKILL.md.AGENTS.md: the R0 entry carried the "carries noskill:entity of its own" claimwith a link to the closed opencharly#291; it now points at the skill this candy owns, and its
/charly-pod:podentry namesschema/pod.cueas that skill's source of truth instead of thecarrier.
Two things this body deliberately does NOT claim, because they are worth stating.
declares the same
(kind, family, name);plugin-marketplace'spreferEntity(
resolve.go) dedupes on exactly that triple, so one page is published — currently thecarrier's, until its node is removed. This PR does not prove the dedupe path; the
carrier-removal PR (Policy: a skill lives with the code it describes — retire the skills-only repo class (22 repos / 94 skills measured) opencharly#600) and the
marketplacerefs switchover do.skill:node's id is itsname:when itstates one (
spec#247), which is why<name>-skill:keys and thename:field candiffer without consequence.
Producer-first. No carrier loses a node here: those removals and retirements belong
to the session that claimed the carriers (opencharly/opencharly#600).
How tested
Change class: documentation + candy-config (skill prose and
skill:routing nodes;no Go, no schema, no runtime path). The gate that owns it is
charly box validate, whichreads the skill files through the same
CollectSkillspath theai.opencharly.skillOCI label and the marketplace corpus use, so a body that is not found is a red gate.
The gate CAN fail — negative control, run on this exact tree, with one moved body
removed:
No R10 disposable bed: the diff changes no runtime path (no Go, no schema, no service,
no build step), so a bed would prove something this diff cannot break. The binary is the
worktree-local build:
charly version=2026.295.1709, equal tocharly/charly's HEADstamp (R9).
Rulebook compliance
/charly-internals:skills,:git-workflow,:cutover-policyloaded beforethe first action; opencharly#611/#606/#600 read in full first.
charly box validategreen with zero warnings, and the negative control provesthat green is not vacuous.
AGENTS.md's false claim and its two stale R0 attributions are corrected in this diff.origin/main, one commit, one push, no force-push, no bypass.session's delivered system message reads, verbatim,
You are a coding agent powered by the deepseek-v4.1-flash model.— harnessDeepSeek Harness, modeldeepseek-v4.1-flash. It is quoted because the operator'sdispatch requires the tier's proof to name the runtime as delivered, and it is cited
with The pr-validator's model allowlist rejects a real runtime: deepseek-v4.1-flash via ollama-cloud opencharly#538, the open record of this runtime being rejected by
the validator's model allowlist although it is real and running.
Change classification
feat(skills)!— documentation + candy-config,documentation reviewed. No runtimebehaviour, no schema, no Go, no pins.
Filed issues
None — the destination was measured, and every claim this change falsifies is fixed here rather than filed.
Assisted-by: DeepSeek Harness deepseek-v4.1-flash (documentation reviewed)