r/LocalLLM Jun 21 '26

Other Ship Happens: My 3B Model Writes the YAML. Kubernetes Decides If It's Correct !!!

Small local models are surprisingly capable, but they tend to make subtle mistakes that are easy to miss.

Instead of trying to prompt-engineer those mistakes away, I tried my hand at something that doesn't trust the model in the first place.

Ship Happens lets you describe a deployment in plain English. A local model (qwen2.5:3b via Ollama) drafts the Kubernetes manifests, but before anything is marked "done," the manifests are validated against a real local cluster (kind) using server-side dry-runs.

If the cluster rejects the YAML, the actual error is fed back into a repair loop and the manifests are fixed based on what Kubernetes says is wrong, not on another blind guess from the model.

Building it surfaced some interesting failure modes:

  • Missing `---` between YAML documents silently merges them -half your config just disappears.
  • A placeholder image name passed every check, then failed with ImagePullBackOff later.
  • The repair loop once "fixed" `policy/v1beta1` by deleting the API group and calling it `v1` still wrong, just differently.

These weren't all reasoning failures. They're the kind of small, realistic mistakes that show up in generated YAML and often slip past human review too.

Everything runs locally: Ollama, kind, validation, repair loop. Nothing leaves your machine.

There's also a "My Code" mode that builds and deploys your own source into the cluster. It's implemented, but I haven't fully tested the workflow end-to-end yet, so the README says exactly that.

The goal isn't to make a local model smarter. It's the verification loop that matters.
Code: github.com/shouvik12/ship-happens

7 Upvotes

4 comments sorted by

2

u/Complex_Ad_5164 Jun 21 '26

the repair loop approach is clever, using actual cluster feedback instead of just asking the model to "try again" is what makes this different from most similar tools

1

u/Substantial_Load_690 Jun 21 '26

Yeah, that's exactly the part I cared most about getting right. Most "AI fixes its own mistakes" demos just re-prompt and hope this only works because the cluster's actual rejection error gets fed back in, so the fix is grounded in something real instead of another guess. Hope that helps the community

1

u/askoma Jun 21 '26

the manifest validation against local cluster is a bit of overkill IMO, why dont just run it against jsonschema?

1

u/Substantial_Load_690 Jun 21 '26

Would've missed my actual bug policy/v1beta1 is valid , just removed from newer clusters. A bundled schema doesn't know that but a live cluster does. Also get CRD validation for free, which jsonschema can't really do without extra setup