Skip to content

plugin-example-stepkind

Placement runtime (out-of-process over gRPC)
Source github.com/opencharly/charly/candy/plugin-example-stepkind
Version 2026.182.0900
Candy plugin-example-stepkind

This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).

The reserved words this plugin serves:

  • examplestepkind — step class

Reference OUT-OF-TREE charly class:step plugin (F3) — a standalone Go module (go.mod + main.go) serving the examplestepkind install-step KIND over go-plugin gRPC via the charly plugin SDK. It proves the EXTERNAL-STEP-KIND contract in BOTH legs: the plugin DECLARES its install-step Scope/Venue/Gate (+ Emits) in its Describe StepContract, the host carries it OPAQUELY (“external:examplestepkind” + Payload) through the InstallPlan IR. DEPLOY leg (OpExecute): the host’s OPEN DEFAULT ARM dispatches the step’s OpExecute over the E3b reverse channel — where it writes a venue marker and returns a teardown ReverseOp the host records + replays (record-and-replay). BUILD leg (OpEmit, F-STEP-EMIT): the plugin declares Emits=true and answers OpEmit with a Containerfile RUN fragment; composed into a pod overlay (add_candy), the candy’s deploykit.OCITarget open external-step arm (dispatched host-side via the step-emit host-builder) splices it — baking /etc/examplestepkind-build-baked into the overlay image. The step-class companion of the verb-class candy/plugin-example-external and the deploy-class candy/plugin-example-deploy.

The CUE schema below is the authoritative grammar for this plugin’s input. It is the same single source that generates the plugin’s Go parameter types and answers the runtime Describe RPC, so this page cannot disagree with either.

// schema/examplestepkind.cue — the SELF-CONTAINED CUE def validating the example external
// step kind's opaque plugin_input (the Payload carried as "external:examplestepkind"). Ships
// over Describe (schema_cue) + drives the generated Go params; references no base def so it
// compiles standalone (BuildCapabilities compiles it alone, failing loudly if broken).
#ExamplestepkindInput: {
// marker is the string the step writes to its marker file — at DEPLOY (OpExecute) the venue
// marker /tmp/charly-examplestepkind/marker, at BUILD (OpEmit, F-STEP-EMIT) the baked image
// marker /etc/examplestepkind-build-baked — proving the OPAQUE payload round-trips through the
// IR (InstallStepView.Payload) to BOTH the plugin's OpExecute and its OpEmit.
marker?: string
}

See also the candy reference for this candy’s install surface.