Repository navigation
pod-github-runner declares no check-* bed, so a prose-only drift survived two tags #12
Description
The finding
This repo declares a candy and its skill entity, and no check-* entity at all — so the change class "candy package list or prose in a candy" has no declared gate here, and nothing in this repo would catch a drift of that kind.
That is not hypothetical. A stale skill route in the github-runner-skill: description block — /charly-tools:gh, a route that no longer resolves — survived two tagged releases (v2026.279.0028 and current main) precisely because no gate here reads that text.
Evidence
$ grep -n '^[a-z][a-z0-9-]*:' charly.yml
** 1: github-runner: ** # the candy
** 474: github-runner-skill: ** # its skill entity
# no `check-` entity
$ git log --oneline -3
4d81dc1 docs: add CHANGELOG 2026.279.0028 for PR #8
…And the drift itself, caught while fixing it (PR #11):
$ grep -c '/charly-tools:' charly.yml
** 1 ** # before: the route the prose told a reader to compose, which no longer resolves
** 0 ** # after PR #11
$ ls -d <marketplace>/*/skills/gh
** coder/skills/gh ** # where the skill actually projects; the composed candy is `layer-gh`The RCA, and the missed control
Missing controls, named concretely:
- No bed means no gate. Every other change class in this org has a disposable bed to run; a candy whose only content is a package list and a prose block has nothing. The
check-wave-pinsbed inopencharly/charlyis the worked example of what a gate looks like for this shape of change — a plan with acheck:that asserts the property the prose claims. - Prose in a
description:is load-bearing here. The section exists to tell a reader how to give the runner a workinggh; when its route rots, the reader follows a dead instruction and the box's own behaviour silently disagrees with its documentation. - And the drift was invisible to
charly box validate. That verb checks schema (it reports 0 warnings, 0 errors for both the broken and the fixed file), which is exactly why the previous PR's "proven" section could be truthful and still not have proven the thing that mattered.
Suggested shape, deliberately not implemented here
A check-github-runner bed is a scoped change against a named gate class, and I am not smuggling it into a prose fix. What it would assert, in the order that makes each claim checkable:
gh --versionsucceeds in the image — the requirement the prose states, proven rather than asserted.- the
github-runner-skill:description names a candy that exists — a route/name check against the corpus, which is the control that would have caught this drift. - the box that composes this candy (
distro-cachyos/box/githubrunner) builds withlayer-ghpresent — the cross-repo half, which is where the composition actually lives.
Whether the bed belongs to this repo or to the consuming box is a placement question — the candy cannot run a bed that needs the box — and that is the design decision this issue asks for.
Filed while fixing opencharly/pod-github-runner#11; the parked phrasing there is corrected to name this issue.
Agent: dsh-opencharly
Assisted-by: dsh DeepSeek deepseek-v4.1-flash (documentation reviewed)
Activity