Repository navigation
fix(deploy): adopt the engine-carrying deploy-state patch - #41
Conversation
The PrepareVenue state patch now carries the deploy node's authored `engine:` selector. This module decodes that patch into its own pinned spec.SaveDeployStateInput before handing it to sdk's SaveDeployState, so an older spec pin silently drops the field. Adopt spec v0.2026309.1917 and sdk v0.2026309.1926, and drive the real save path end to end in a test that fails on the pre-bump pins (opencharly/charly#1109). Assisted-by: Claude Code ollama-cloud/deepseek-v4.1-flash:cloud (fully tested and validated)
Review — PASSHead SHA: Change class: dependency adoption (spec/sdk pin bump) + test coverage — module-level. Security screen: PASS — no secrets/egress, no guardrail weakening, no injection directives; version bumps only. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
Summary
plugin-fleetis the compiled-incommand:deployplugin: it decodes aPrepareVenuereply's opaque state patch into its OWN pinnedspec.SaveDeployStateInputbefore handing it to sdk'sSaveDeployState.opencharly/spec#292 added the authored
engine:selector to that struct, andopencharly/sdk#487 made
applyDeployStatewrite it; an older pin here wouldsilently drop the field between the pod plugin and the per-host entry.
This PR adopts
spec v0.2026309.1917andsdk v0.2026309.1926, and adds anend-to-end test (
TestSaveDeployState_PersistsEngine) that drives the realsave path — this module's marshal/load callbacks + sdk's apply — and asserts
engine: containerdlands on the entry alongsideresolved_image. It fails onthe pre-bump pins (measured below), so it is not a vacuous pass.
This is the consumer leg of opencharly/charly#1109; the live
pod:/engine: containerdbed is run in theplugin-deploy-podand charly PRs thatfollow the producer-first order.
How tested
All commands ran on this head in
/home/atrawog/Sync/Atrapub/mo/claude/opencharly/.worktrees/containerd-crabbox-program/engine/plugin-fleet/candy/plugin-fleetwith
GOWORK=off(the real adopted pins).The module gate:
The new witness:
Negative control — the SAME test against
origin/main's sdk with the new specpin fails exactly on the new assertion:
The test fixture's thin node-form decoder gained
engineandresolved_imageparsing (it decodes only the scalar fields this suite uses),which is what lets the assertion read the persisted entry.
golangci-lint run ./...reports two PRE-EXISTING findings in files this PRdoes not touch (
from_box_vm.goerrcheck,schema_splice_test.gostaticcheck). They reproduce unchanged on
origin/main; they are filed withtheir RCA as #40 and do not grow here.
Authoring runtime evidence — the footer's model string is the runtime's own
value, read from the process environment:
Rulebook compliance
/charly-internals:go,/charly-internals:plugin,/charly-internals:go-quality,/charly-internals:git-workflowand thisrepo's
AGENTS.mdbefore any edit.RCA'd, and filed as chore(lint): two pre-existing golangci-lint findings (from_box_vm.go errcheck, schema_splice_test.go staticcheck) #40; the selector loss is fixed here.
tags.
enginespelling.git statuswas read first; the session worktree is.worktrees/containerd-crabbox-program/engine/plugin-fleetoff freshorigin/main; no unrelated file was touched.passes on this tree.
bed.
following producer-first PRs.
Change classification
Dependency adoption plus test coverage. No command grammar or schema changes
here; the behavior change is the adopted field flowing through the existing
typed path. Rollback: revert this PR; the fleet then drops the field again
(the pre-fix state), and the pod/charly PRs must be reverted first.
Breaking change + rollback: none — the adopted field is optional and the
existing decode path is unchanged.
Filed issues
golangci-lintfindings(
from_box_vm.goerrcheck,schema_splice_test.gostaticcheck) reproduce onorigin/mainand are unrelated to this dependency bump.Agent:
containerd-crabbox-program/engineAssisted-by: Claude Code ollama-cloud/deepseek-v4.1-flash:cloud (fully tested and validated)