From 906c9fd1bbc564b52b5c806de7e980e22af6f0d3 Mon Sep 17 00:00:00 2001 From: claude Date: Wed, 27 May 2026 14:55:08 -0400 Subject: [PATCH] fix(smolmachines): preflight print uses plan-level egress routes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `SmolmachinesBottlePlan.print` iterated over `bottle.egress.routes` (the manifest's capitalized-attribute form on `manifest.EgressRoute`) but accessed `r.host` (lowercase). Worked when no egress routes were declared; AttributeError ("EgressRoute has no attribute 'host'") on the first bottle with a route. Switch to `self.egress_plan.routes` — the resolved plan-level EgressRoute (lowercase `host`), same source the docker backend's print uses. Co-Authored-By: Claude Opus 4.7 --- claude_bottle/backend/smolmachines/bottle_plan.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/claude_bottle/backend/smolmachines/bottle_plan.py b/claude_bottle/backend/smolmachines/bottle_plan.py index 3bffb6d..801be03 100644 --- a/claude_bottle/backend/smolmachines/bottle_plan.py +++ b/claude_bottle/backend/smolmachines/bottle_plan.py @@ -89,7 +89,10 @@ class SmolmachinesBottlePlan(BottlePlan): upstreams = [ f"{g.Name} → {g.Upstream}" for g in bottle.git ] - routes = [r.host for r in bottle.egress.routes] + # Use the resolved egress_plan (lowercase `host` on the + # plan-level EgressRoute) rather than `bottle.egress.routes`, + # which is the manifest's capitalized-attr form. + routes = [r.host for r in self.egress_plan.routes] print(file=sys.stderr) info(f"agent : {spec.agent_name}")