Repository navigation
fix(run): build recipe images for local container runtimes - #934
antoinetoussaint-byte merged 25 commits into
Conversation
|
A lazybox agent is working on this. claim detail |
|
Closing this draft for a re-cut. Nothing superseded it — From the verification section here: the real target (a released converter booting from a locally built recipe image) is blocked by amd64-only recipes for LibreOffice, PDF and XLSX on an arm64 engine, and by a core defect — The branch is also 19 days stale and CONFLICTING across Re-cut order: the core |
codefly-dev/core#856 merged as b71ee8cd, so the `service:` field this branch consumes is available from an upstream module revision. Replace the pre-merge pin, which left every compiling job failing on `method.Service undefined (type module.ForeignMethod has no field or method Service)`. Verified with GOWORK=off: `go build ./...` and `go vet ./...` clean across the module, and the three packages this branch changes pass `go test -count=1` — pkg/gitops, pkg/orchestration and cmd/generate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… policy walk golangci-lint v2.14.0 refused the selector work in three places, all of them new in this branch: pkg/gitops/method_policies.go:276 rangeValCopy, 136 bytes (gocritic) pkg/orchestration/hop_configurations.go:284 rangeValCopy, 152 bytes (gocritic) pkg/gitops/method_policies.go:201 cyclomatic complexity 32 > 30 (gocyclo) Extracting publishesProtobuf answers two of them at once: the manifest walk stops copying a Service per iteration, and ServiceMethodPolicies sheds the branches that pushed it over the complexity ceiling. The hop's shadow check indexes its endpoints rather than copying a RouteEndpoint per iteration. No behaviour changes: same predicates, same refusal messages, same order. Verified with GOWORK=off: `golangci-lint run` reports 0 issues across pkg/gitops, pkg/orchestration and cmd/generate on the same linter version CI pins, `go build ./...` is clean, and all three packages pass `go test -count=1`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…lan-phase reuse decision Main's build path moved since this branch was cut: buildFromPlan takes the proxies Plan prefetched and the reuse decisions it took, buildRecipe decides reuse through recipeAsBuilt + decideImageReuse before any build work, and Runner.Init gathers its inputs before the port guard. The RuntimeImage handoff is re-threaded through those seams rather than copied over them: - recipeAsBuilt shapes a local runtime build (one engine-native platform, a placeholder name so the identity is not its own input); the agent's recipe is left as emitted. - decideImageReuse names the image by its input identity through the decision's `image` (the seam an override build already uses) and refuses an entry recorded under another name; an input that cannot be bound is a refusal for a local image, not a rebuild. - buildRecipe keeps the recipe as built, verifies the context held still and the image loaded before recording it; buildLocalRuntimeImage archives the as-built recipe and hands Init the canonical repository@sha256. - Runner.Init asks for the image after the first-Init port guard, with main's Overrides and inputs intact. go.sum is tidied. Core stays at main's pin. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The run's log names the canonical reference Init receives and the tag it was loaded under, so a local run's handoff is readable without --output-env. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Local container runs now build verified agent recipes and hand their canonical immutable image to Runtime.Init. Disposable CI commands use invocation-scoped outputs and reject unsupported selected build prerequisites before fresh or replay dispatch. Runnable generation acquires the selected module publication principal and refuses uncovered destinations or conflicting operation audiences.
This existing carrier also includes reviewed Core receipt-based process/container recovery and the foreign-method service selector integration. It selects published Core v0.19.10 with GOWORK=off and no replacement. These are fixes at their owning CLI orchestration, acquisition and command boundaries, reusing Core graphs, configuration/publication readers, recovery receipts and the existing build pipeline. No new compatibility roster, shared-tag cleanup, alternate generator or fabricated dependency version.
Docs updated: docs/development-loop.md, docs/agent-ci-port-isolation.md, docs/runnable.md, docs/commands.md, docs/cli-reference.md, docs/orchestration.md and docs/supported-matrix.md.
Validation
Exact head 48a517c:
Fresh independent reviews closed both image-admission findings, evidence retention, and audience acquisition. Prior recovery/lifecycle/converter evidence remains separately attributed to its tested revisions; no new whole-product readiness claim follows from it.
Remaining delivery checks
Required remote CI and current-main integration must pass. Full selected Product/Robin browser acceptance and Blue deployment are subsequent qualification. Core module-artifact integration is separately in progress and is not included in this head. No service state, shared images, or unrelated dirty owner source is adopted by this push.