Skip to content

eat: eat-up.sh deploys EAT release-1.1.0 (ledger F4 pre-registered) - #250

Merged
88plug merged 4 commits into
mainfrom
claude/eas-eat-110
Oct 30, 2026
Merged

88plug merged 4 commits into
mainfrom
claude/eas-eat-110

Conversation

@88plug

@88plug 88plug commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

integrations/eat/eat-up.sh now deploys EAT release-1.1.0 at 0c726f5 instead of release-1.0.3-hotfix at 0d3438d. release-1.1.0 (published 2026-10-22) is still EAT's latest release and latest tag on 2026-10-29 (gh api .../releases, git ls-remote --tags). The compare is 18 ahead, 0 behind, 204 files. This is the EAT 1.x part of the EAS plan. It does not depend on the EAS parts.

Not verified. Nothing here has run against a cluster. The user path on the new tag is pre-registered as ledger row F4 (PENDING), committed first in this branch, before any run. No doc says the release-1.1.0 path works; each says it is F4 and not yet run.

What changes

  • eat-up.sh: EAT_TAG=release-1.1.0, EAT_COMMIT=0c726f576595971c53cc45b94e08ba969beb4a4a.
  • agentic-config.cfg sets release-1.1.0's new toggles to off: deploy_guardrails, deploy_vllm_sr, deploy_openshell, deploy_kata_containers, deploy_ceph and rack_scale_mode.
  • brownfield.sh passes the config's deploy_guardrails to EAT's DEPLOY_GUARDRAILS before it sources deploy-agentic-stack.sh. The config key alone would not stop the guardrail (see "Two corrections" below).
  • vllm-values.yaml pins vllm/vllm-openai-cpu:v0.28.0@sha256:197354e6475e638eb5ccca09beb078488046a82de0e204e7429bf1a804df9647. That is the tag release-1.1.0's xeon-values.yaml:34 names. The digest is the one crescent amendment E1 recorded, and scripts/images-lock digest returns the same value today. images.lock changes only that entry.
  • The deploy_openshell=on refusal used to say the tag has no OpenShell role. It now gives the real reason: OpenShell ships in release-1.1.0 but has never run on a k3d-gpu cluster.
  • Docs: integrations/eat/README.md (the pin, a pins table, the 1.1.0 gateway, blocker 11, the old blockers and upstream notes rechecked at 0c726f5, and the observed end state labelled as the 1.0.3 run), docs/platforms.md (the EAT section, including the stale lines 233-238), docs/intel.md and README.md.
  • bench/eatflow pins are untouched. The ledger rows that pinned EAT stock at 0d3438d use their own EAT checkouts and set their own vLLM tag (H50, H50o and H51 under E1, H7x under V1, H7 and H8 in bench/apb/h7.sh and arm.sh). The move changes none of them, and bench_test.sh still passes.

Two corrections to the plan, from EAT's source

  1. The guardrail ignores deploy_guardrails on the brownfield path.

    • Write_config is not the cause. It only runs from main(), which the sourced brownfield run never reaches.
    • deploy-agentic-stack.sh:195 sets DEPLOY_GUARDRAILS="${DEPLOY_GUARDRAILS:-on}" at source time.
    • Only main() (:1136-1140) copies deploy_guardrails from the config into it.
    • fresh-install.sh:419 deploys Qwen/Qwen3Guard-Gen-0.6B when DEPLOY_GUARDRAILS is on.
    • No other line in the tree assigns it.

    So brownfield.sh reads the key the way read_config_file reads every other toggle: trimmed, quotes dropped, last assignment wins. It then exports DEPLOY_GUARDRAILS, and with no value EAT's default stays.

  2. Dropping _auto_skip_deployed_components changes nothing for eat-up. At 0d3438d it was called only from run_deployment (deploy-agentic-stack.sh:783), which only main() calls (:1133). eat-up's path never ran it.

Review of 0d3438d...0c726f5 against brownfield.sh, gateway-charts.py and gateway-values.yaml

core/playbooks/setup-bastion.yml

  • Both pip tasks now pass --break-system-packages (:73, :171). The bastion's /etc/pip.conf line is now redundant but harmless, and it stays.
  • The kubectl (v1.29.0) and Helm (v3.14.0, creates: /usr/local/bin/helm) tasks are unchanged, so the baked Helm still skips get-helm-3.

core/playbooks/deploy-agent-sandbox.yml

  • The only change is retries (5 tries, 30 s apart) on the sandbox_router.yaml download.
  • agent-sandbox is still v0.5.0 (agentic-metadata.cfg). The router, its auth Secret and the warm pool that eat-check.sh uses are unchanged.

core/lib/user-menu/parse-user-prompts.sh

  • --compute_platform used to set cpu, which was a bug; it now sets compute_platform.
  • prompt_for_input auto-enables NRI balloons only when compute_platform is c and deploy_nri_balloon_policy is empty.
  • Our config sets the policy off, so the "Proceeding" branch runs as before. compute_platform defaults to cpu (config-vars.sh:16).
  • core/lib/brownfield/ has no diff, so the menu answers 5 / 1 / yes still hold.
  • Every function brownfield.sh calls is still defined:
    • _source_core_libs at :631
    • DEPLOY_SOURCED at :1188
    • manage_kubeconfig, read_config_file, prompt_for_input, setup_initial_env, setup_bastion and deploy_inference_llm_models_playbook
  • deploy_inference_llm_models_playbook still passes xeon_values_file=${xeon_values_file_path}, so the merged values still reach the playbook.

core/helm-charts/genai-gateway

  • customRouter.enabled: true mounts the router's Python from a new ConfigMap, genai-gateway-router-code (templates/router-configmap.yaml).

  • litellm_settings.callbacks gains custom_hybrid_router.proxy_handler_instance.

  • The config moves to /app/proxy_config.yaml through a subPath mount. A ConfigMap edit therefore reaches LiteLLM only after a pod restart, and eat-remote.sh already restarts the pod.

  • A policyPlane block was added; it defaults to false.

  • No new image and no Chart.yaml change.

  • gateway-charts.py runs clean on the 1.1.0 charts and keeps customRouter and the callback. eat_test.sh now checks both.

  • Rendered with helm template (Helm v4.1.1 here, the same dependency charts and values on both sides), the copies differ from EAT's charts only in 11 image: lines: 4 in the gateway, 7 in Langfuse. Every one of them is name:tag@sha256.

  • The restore job's bitnami/kubectl:latest stays behind restoreJob.enabled: false.

  • The callback should load in the pinned LiteLLM v1.83.14-stable.patch.2 (b36fb1d). Every name it patches or imports exists there:

    • Router._is_auto_router_deployment (router.py:6823)
    • _add_deployment (:7235)
    • async_pre_routing_hook (:9902)
    • the ComplexityRouterConfig, ComplexityTier and DEFAULT_*_KEYWORDS names in router_strategy/complexity_router/config.py

    This is read from source, not run, and it is one of F4's named risks.

  • The Langfuse values change only telemetryEnabled (to false), which the overlay does not touch.

core/helm-charts/vllm

  • The image moves to v0.28.0, and the pod gains fsGroup: 1001.
  • memoryLimit is a separate value that defaults to memory, so ours (16Gi) is still the limit.
  • The PVC drops storageClassName: local-path. k3s's default class is local-path.
  • cpu falls back to the model config only when it is unset; ours sets "8".

deploy-inference-models.yml

  • cpu-qwen3-1-7b is still in 1.1.0's model list (install-cpu-qwen3-1-7b, lines 826-911). Qwen/Qwen3-1.7B is still a modelConfigs key (xeon-values.yaml:193, KV 40).
  • The new sizing role and the balloon-only --set lines are gated on balloon_policy_cpu == 'enabled', which is off here.
  • It is still missing from get_model_names (model-selection.sh:106), so eat-up.sh model <id> is still needed (blocker 8).
  • eat-opt.py runs clean on the real 1.1.0 playbook and merged values. It reads vLLM 0.28.0, keeps EAT's hermes parser, adds --reasoning-parser qwen3 and thinking off, and chooses no speculative config before v0.31.0.

vLLM v0.28.0 itself

  • It no longer reads VLLM_CPU_SGL_KERNEL. vllm/envs.py defines it at v0.24.0 and not at v0.28.0; the change is vllm-project/vllm#50801.
  • Whether it serves Qwen3-1.7B on the AVX2-only i9 is F4's other named risk.

Ledger: F4 (PENDING)

  • What it is. H1b's user path on release-1.1.0 on the i9-13900T, on one fresh cluster k3dgpu-f4-eat.
  • Steps.
    1. k3d-gpu up with the README's EAT env
    2. eat-up.sh
    3. eat-up.sh model cpu-qwen3-1-7b
    4. the readiness wait (--field-selector=status.phase!=Succeeded, 30 min)
    5. eat-check.sh
    6. k3d-gpu down
  • Scope. n = 1, functional.
  • Grading. SUPPORTED needs steps 1-4 to exit 0, and eat-check.sh to pass the chat, the get_weather tool call and the sandbox's 385.
  • Prior and risks. P(SUPPORTED) = 0.6. The named risks are the hybrid-router callback (0.15) and vLLM v0.28.0 on AVX2 (0.15).
  • Where. The row and its pre-registration section are in EXPERIMENTS.md.

Coordination

Checks run (all pass)

Check Result
tests/eat_test.sh 76 passed (16 failed before the change, for the expected reasons)
tests/detect_test.sh 1185 passed
tests/reserved_cpus_test.sh 23 passed
tests/bench_test.sh 71 passed
tests/image_pins_test.sh 43 passed
scripts/images-lock check and scripts/images-lock pins ok
tests/platforms_doc_test.sh 195 passed
tests/ci_wiring_test.sh 69 passed
tests/claims_check.sh 26 files clean
tests/ledger_drift_check.py 41 files agree with 81 rows
shellcheck v0.11.0, severity warning (CI's version and level) clean on eat-up.sh, brownfield.sh, eat-check.sh, eat-remote.sh and eat_test.sh
Docs build, CI's pinned python:3.14.8-slim, hash-locked toolchain tests/docs_test.sh 63 passed; mkdocs build --strict clean

Not verified

  • No cluster was run.
  • The guardrail hand-off was checked against a stub that reproduces EAT's line 195. The real script was not sourced here, but a grep shows no other assignment of DEPLOY_GUARDRAILS in 0c726f5.
  • These are read from source and are F4's job:
    • Helm v3.14.0 rendering the 1.1.0 charts (only v4.1.1 was used here)
    • the router callback loading at runtime
    • vLLM v0.28.0 on this CPU
    • the new NUMA-aware utils tasks never running with balloons off

F4 is H1b's user path on the i9-13900T after eat-up.sh moves from
release-1.0.3-hotfix to release-1.1.0: k3d-gpu up with the README's EAT
env, eat-up.sh, eat-up.sh model cpu-qwen3-1-7b, the readiness wait, then
eat-check.sh passing chat, a tool call and the sandbox's 385. Functional,
n = 1. It is written before any step runs, and no doc may call the
release-1.1.0 path verified until it is SUPPORTED.
eat-up.sh clones release-1.1.0 at 0c726f5, the latest EAT release
(2026-10-22), in place of release-1.0.3-hotfix at 0d3438d.

What the move needs, read from release-1.1.0's source:

- The guardrail. deploy-agentic-stack.sh sets DEPLOY_GUARDRAILS to "on"
  when it is sourced (line 195), and fresh-install.sh deploys the
  Qwen3Guard guardrail when it is on (line 419). Only main() reads
  deploy_guardrails from agentic-config.cfg (line 1138), and the sourced
  brownfield run skips main(), so the config key alone changes nothing.
  brownfield.sh now reads deploy_guardrails the way read_config_file
  reads every other toggle and exports DEPLOY_GUARDRAILS before sourcing;
  with no value, EAT's default stands.
- agentic-config.cfg writes release-1.1.0's new toggles out as off:
  deploy_guardrails, deploy_vllm_sr, deploy_openshell,
  deploy_kata_containers, deploy_ceph and rack_scale_mode.
- vllm-values.yaml pins vllm/vllm-openai-cpu v0.28.0, the tag
  release-1.1.0's xeon-values.yaml names, by its index digest
  sha256:197354e6...df9647 (Docker Hub, read 2026-10-29). images.lock
  follows.
- release-1.1.0 ships OpenShell, so the deploy_openshell=on refusal now
  says why it stops: OpenShell has not run on a k3d-gpu cluster.

tests/eat_test.sh checks the tag and commit, the six toggles as EAT's
read_config_file reads them, the guardrail hand-off (absent, on, off,
quotes, last assignment wins, the shipped config), the vLLM digest, the
refusal text, and that the gateway chart copy keeps release-1.1.0's
hybrid-router callback and customRouter switch. The release-1.1.0 path
has not run; it is ledger row F4.
…ified

integrations/eat/README.md: the pin and its pins table (EAT, bastion,
Helm, the vLLM CPU v0.28.0 digest, the gateway charts), the 1.1.0
gateway's hybrid router (a ConfigMap, no new image; the copies still
differ from EAT's charts only in the 11 image lines, rendered with Helm
v4.1.1 on 2026-10-29), blocker 11 (the guardrail on the brownfield
path), each older blocker and upstream note rechecked at 0c726f5, and
the observed end state labelled as the release-1.0.3-hotfix run.

docs/platforms.md, docs/intel.md and README.md: eat-up.sh deploys
release-1.1.0; the path is pre-registered as F4 and has not run; the
ledger rows that pinned EAT stock at 0d3438d use their own checkouts and
image tags, so the move changes none of them.
…1.1.0 turn it on

With no deploy_guardrails value in the config, release-1.1.0 deploys its
Qwen3Guard guardrail: deploy-agentic-stack.sh:195 defaults DEPLOY_GUARDRAILS
to on and brownfield.sh keeps that default. Every config written for
release-1.0.3-hotfix lacks the key, so an EAT_CONFIG carried over from the
previous pin would bring up the guardrail (a 2 CPU / 16Gi vLLM pod whose
image guardrail-values.yaml names by tag only, screening every gateway
request) while the docs say the guardrail is off.

eat-up.sh now stops before touching the cluster when the config gives
deploy_guardrails no value, read the way read_config_file reads it, and asks
for off or on. The shipped agentic-config.cfg sets it off, so F4's path is
unchanged. openshell_setting becomes cfg_value <cfg> <key> for both checks.

tests/eat_test.sh 3c covers a missing key, an empty value, a commented-out
line, another key that mentions it, last assignment wins, and off, on and a
quoted value passing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant