Repository navigation
Description
The comment at candy/plugin-build/buildkit_live_test.go:9 asserts a present-tense fact that is now false, and names three identifiers the contract no longer has.
The claim
// ⚑ Why this lives in the module rather than as an assembled `charly box build`: the plugin is
// COMPILED INTO charly, so assembling charly requires every pinned plugin to compile against
// the new contract — and they have not all migrated yet (measured: `plugin-box` v0.2026272.2039
// fails on `spec.BuildRequest.PodmanJobs`, `rt.BuildEngine`, `spec.BoxConfig.PodmanJobs`). A live
// proof that has to wait for four other repos would prove nothing about THIS change, so the drive
// is driven directly here: ...
Three assertions: (1) the ecosystem has not all migrated; (2) spec.BuildRequest.PodmanJobs, rt.BuildEngine and spec.BoxConfig.PodmanJobs are the identifiers that fail; (3) the live proof still has to wait on other repos.
The measurement — all three are false today
The identifiers are gone from the contract. spec's generated types carry no PodmanJobs and no BuildEngine:
$ grep -rn 'PodmanJobs' spec/spec/cue_types_gen.go | grep -v _test
(no output)
$ grep -rn 'BuildEngine' spec/spec/cue_types_gen.go
(no output)
$ grep -n 'StageParallelism' spec/spec/cue_types_gen.go
1092: StageParallelism *int `yaml:"stage_parallelism,omitempty" json:"stage_parallelism,omitempty"`
1094: StageParallelismCap *int `yaml:"stage_parallelism_cap,omitempty" json:"stage_parallelism_cap,omitempty"`
1730: StageParallelism int64 `yaml:"stage_parallelism,omitempty" json:"stage_parallelism,omitempty"`
2005: StageParallelism int64 `yaml:"stage_parallelism,omitempty" json:"stage_parallelism,omitempty"`
3047: StageParallelism int `yaml:"stage_parallelism,omitempty" json:"stage_parallelism,omitempty"`
The very version charly compiles against is clean of it too — spec v0.2026302.327, 611 244 bytes of cue_types_gen.go, 0 occurrences of PodmanJobs, 5 of StageParallelism.
spec also carries the guard that keeps the old field from coming back — spec/spec/stage_parallelism_rename_test.go, whose own header says it "FAILS while the generated types still carry the engine-named fields", and spec/hostenv/retired_build_selector_test.go, which asserts ResolvedRuntime must not carry a BuildEngine field.
The ecosystem HAS migrated, and the assembled build proves it. charly compiles the plugins in; its go.mod pins the migrated ones, and its CI is green at main's tip:
$ grep -nE 'plugin-box|plugin-build|opencharly/spec' charly/go.mod
15: github.com/opencharly/plugin-box/candy/plugin-box v0.2026301.1542
16: github.com/opencharly/plugin-build/candy/plugin-build v0.2026293.926
142: github.com/opencharly/spec v0.2026302.327
$ gh api "repos/opencharly/charly/actions/runs?branch=main&per_page=4" \
--jq '.workflow_runs[] | "\(.created_at) \(.name) \(.conclusion)"'
2026-10-30T02:23:27Z ci success 7bb19d0a
2026-10-30T02:23:51Z release-binary success 7bb19d0a
plugin-box at v0.2026301.1542 — the producer leg of the rename — carries the new name throughout and no occurrence of the old one:
$ grep -rn 'PodmanJobs' plugin-box/candy/ | grep -v _test
(no output)
$ grep -n 'StageParallelism int ' plugin-box/candy/plugin-box/box.go
249: StageParallelism int `name:"stage-parallelism" help:"Stages per build (0=auto: min(NCPU, defaults.stage_parallelism_cap))" env:"CHARLY_STAGE_PARALLELISM"`
The timeline shows why the comment reads stale. It was written on 2026-10-23 (91bdb34), when the migration was genuinely in flight. The producer leg landed five days later — opencharly/plugin-box#66 merged 2026-10-28T15:42:33Z — and the assembled consumer an hour after that, opencharly/charly#1082 merged 2026-10-28T16:32:25Z. The comment was true when written and was never revisited; the fact it states has since changed.
Why this is a defect and not a historical note
The comment is not a changelog entry — it is a present-tense justification of where the live proof lives, and it is the only thing that explains the arrangement. A reader today is told the ecosystem cannot yet be built as an assembled charly box build, so the drive must be driven directly from the module. That is now false: the assembled build is green.
Worse, the comment cites rt.BuildEngine, which is not merely renamed but retired — the builder is BuildKit, which is not a container engine, so the contract carries no builder selector at all. spec/hostenv/retired_build_selector_test.go records that as a deliberate cutover (engine.build / CHARLY_BUILD_ENGINE / ResolvedRuntime.BuildEngine are gone). A comment citing it as a live failure mode teaches a spelling the contract deliberately erased.
The fix
Update the comment to the current state: the ecosystem HAS migrated (name the migrated pins), the old identifiers are gone from the contract (name the two guards that keep them gone), and state the real reason the live proof drives the drive directly. If the assembled charly box build can now host this proof, that is a separate question from the comment's truth — the comment should be corrected either way, because a false justification is not a justification.
The scope boundary
This is a comment in this repo only. It was surfaced by an org-wide sweep of the stage_parallelism rename for opencharly/opencharly#785; the retired spelling this comment names was never taught by it — it is a stale citation of identifiers retired by the same contract work. Filed here because this repo owns the comment, and it changes nothing about that fan-out's outcome.
Filed by the stage_parallelism fan-out's closing sweep. Measured 2026-10-30 against opencharly/spec@9d730c0, opencharly/plugin-box@59d3be3, opencharly/charly@7bb19d0.
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)
Activity
aitrawog commentedon Oct 30, 2026
CLAIM
Claiming this issue so no other session duplicates the measurement.
Scope: the stale comment at
candy/plugin-build/buildkit_live_test.go:9only — its present-tense claim ("they have not all migrated yet") and the three identifiers it cites (spec.BuildRequest.PodmanJobs,rt.BuildEngine,spec.BoxConfig.PodmanJobs). The measurement is in the issue body.Not in scope: whether the live proof should MOVE to an assembled
charly box buildnow that the ecosystem has migrated. That is a design question for the repo's owner, and the issue says so; the comment's truth is the defect, and it is correctable either way.Next: a branch off fresh
origin/maincorrecting the comment, gated bygo build ./...+go test ./...incandy/plugin-build/andcharly box validateat the repo root, then the org-widecharly/pr-validator.Next update due: when the PR is open, or sooner if blocked.
Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)
aitrawog commentedon Oct 30, 2026
STATUS
The fix is open as #41, at head
c7a2050.Done: the comment block this issue scoped is corrected, in the same file, in one commit. Both of
its stale present-tense claims are gone:
spec.BuildRequest.PodmanJobs,rt.BuildEngineandspec.BoxConfig.PodmanJobs. The header now states the durable reason thedrive is driven directly from the module: the plugin is compiled into charly, so an assembled
build couples this proof to every other pinned plugin's release and answers "does the whole
product assemble" rather than "does THIS drive work".
breaks every downstream verb. There has been no tag step since the charly image store landed
(
c79ee55): the export is annotated withio.containerd.image.name=<FullTag>, the annotation iswhat names the image, and the import verifies the reference resolves. The assertion's own comment
and its failure message now name that mechanism, using the wording the sibling live test in the
same module already uses.
Scope note: this issue scoped the comment at
candy/plugin-build/buildkit_live_test.go:9. Thatis the same comment block the bridge claim sits in, so the fix corrects both halves of it rather
than leaving a false claim in the paragraph it edits.
Gated: the repository's own gate on the committed tree —
go build ./...,go vet ./...,gofmt,go test -count=1 ./...(72 top-level PASS, no FAIL, no SKIP, and the three live testsran against the real toolchain rather than skipping), and
charly box validate(0 warnings, 0errors). A mutation of the assertion's probe on a scratch copy turns the live proof red with the
new message, so the assertion is not vacuous.
Next: the org-wide
charly/pr-validatoron the PR, then one commit per review round, thenlanding.
Next update due: when the validator's verdict lands, or when the PR merges.
Agent: charly
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
aitrawog commentedon Oct 30, 2026
RESOLVED
Landed. The stale comment is corrected, and the issue is closed by the PR's own merge.
74e1722, tagv2026.303.0708.CHANGELOG/2026.303.0708.md, written at merge time from the PR body.charly/pr-validatorreturned PASS on the headc7a2050; thevalidator's PASS armed native auto-merge, and the squash landed without an agent merging.
go build ./...,go vet ./...,gofmt,go test -count=1 ./...(72 top-level PASS, no FAIL, no SKIP; the three live tests ran againstthe real toolchain rather than skipping), and
charly box validate(0 warnings, 0 errors). Amutation of the assertion's probe on a scratch copy turns the live proof red with the new
message, so the assertion is not vacuous.
What changed. The comment block this issue scoped carried two stale present-tense claims, and
both are gone:
spec.BuildRequest.PodmanJobs,rt.BuildEngineandspec.BoxConfig.PodmanJobs) — the header now states the durable reasonthe drive is driven directly from the module: the plugin is compiled into charly, so an
assembled build couples this proof to every other pinned plugin's release and answers "does the
whole product assemble" rather than "does THIS drive work".
it runs, annotate → store → load → verify, and the assertion's comment and its failure message
name the naming annotation, which is the clause the sibling live test already uses
(
candy/plugin-build/imagestore_live_test.go:71).The validator's one minor note — that the body stated the shared clause without pasting the
sibling half of the proof — is answered with that evidence on the PR thread, with the reasoning
for why the merged body is not edited after the changelog was written from it.
Next update due: none. This issue is closed.
Agent: charly
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)