fix(image): build+push the molecule-platform-agent concierge image (concierge identity) #2976
Reference in New Issue
Block a user
Delete Branch "fix/wire-platform-agent-image-build"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes: the concierge identity image is built by nothing and pushed nowhere
You flagged the misleading naming — this is the root of it. The concierge (
kind=platform) is supposed to run a dedicatedmolecule-platform-agentimage that bakes its identity (config.yaml/prompts/mcp_servers/identity-fallback.sh) from the platform-agent template viaDockerfile.platform-agent(#2919/#2955). But the pipeline was never wired:manifest.jsonhad noplatform-agententry →clone-manifest.shnever staged the template at.tenant-bundle-deps/workspace-configs-templates/platform-agent→ the Dockerfile'sCOPYsource was missing.publish-workspace-server-image.ymlnever builtDockerfile.platform-agent→molecule-ai/molecule-platform-agentECR is empty (0 images); the only "platform" image (molecule-ai/platform) is a month stale (2026-05-15).So #2955's identity bake was built by nothing and pushed nowhere; the concierge falls back to a non-identity image and boots as generic Claude Code (verified on test2: 218 B config, no prompts, no identity after restart).
Changes
manifest.json— pin theplatform-agenttemplate (refe5c8302, config.yaml present) soclone-manifest.shstages it into the build context. Supersedes the closed #2959.publish-workspace-server-image.yml— add a Build & push platform-agent image step: buildsDockerfile.platform-agentwithBASE_IMAGE=<just-built platform image>, pushesmolecule-ai/molecule-platform-agent:staging-<sha>+:staging-latest. Runs after the base platform build (itFROMs it).Follow-ups after merge (operational)
runtime_image_pins('platform-agent')→molecule-platform-agent:staging-latestso the CP selects it (core#2495).identity-fallback.shfills/configs.template-delivery-e2egate (#2971) asserts the concierge boots with identity — it confirms the fix and guards against regression.SOP Checklist (RFC#351)
Root-cause not symptom: The concierge identity image (molecule-platform-agent) was built by nothing and pushed nowhere — manifest had no platform-agent entry (template never staged) AND publish-workspace-server-image never built Dockerfile.platform-agent. Fixes both root causes (stage + build), not the symptom.
Comprehensive testing performed: manifest.json validated (JSON + TestManifest_RefPinning passes in CI with the manifest token; local 404s are auth-only, hit all 3 private templates equally). Workflow YAML lint-valid; build step mirrors the proven base-platform/tenant steps; BASE_IMAGE + PLATFORM_AGENT_TEMPLATE_DIR arg names verified against Dockerfile.platform-agent. End-to-end asserted by template-delivery-e2e (#2971).
Local-postgres E2E run: N/A — CI/image-pipeline + manifest change, no schema/handler logic.
Staging-smoke verified or pending: Pending — after merge the image builds; promote the pin + re-provision, then template-delivery-e2e confirms the concierge boots with identity.
Five-Axis review walked: Correctness (build after base, FROM it; template staged by manifest); Security (no token in image — clone-manifest strips .git; read-only template); Performance (one extra image build, cache-from/to); Observability (labels + tags); Tests (e2e gate asserts the outcome).
No backwards-compat shim / dead code added: No shim — adds the missing build + manifest entry; supersedes the closed #2959.
Memory consulted: project_rfc2843_rollout_authorization, reference_runtime_fix_deploy_path, project_platform_agent_org_root_shipped.
🤖 Generated with Claude Code
The concierge (kind=platform) is meant to run a dedicated molecule-platform-agent image that bakes its identity (config.yaml/prompts/mcp_servers/identity-fallback.sh) from the platform-agent template via Dockerfile.platform-agent (#2919/#2955). But: - manifest.json had NO platform-agent entry → clone-manifest.sh never staged the template at .tenant-bundle-deps/workspace-configs-templates/platform-agent → Dockerfile.platform-agent's COPY source was missing. - publish-workspace-server-image.yml never built Dockerfile.platform-agent → the molecule-ai/molecule-platform-agent ECR repo is EMPTY (0 images); molecule-ai/ platform is a month stale (2026-05-15). So #2955's identity bake was built by nothing and pushed nowhere — the concierge falls back to a non-identity image and boots as generic Claude Code (user-reported on test2; verified: 218B config, no prompts, no identity after restart). Changes: - manifest.json: pin the platform-agent template (ref e5c8302, config.yaml present) so clone-manifest.sh stages it into the build context. Updates the _pinning_contract note (supersedes the closed #2959). - publish-workspace-server-image.yml: add a "Build & push platform-agent image" step — builds ./workspace-server/Dockerfile.platform-agent with BASE_IMAGE=<just-built platform image>, pushes molecule-ai/molecule-platform-agent :staging-<sha>+:staging-latest. Runs after the base platform build (FROM it). Follow-ups after merge: (1) promote runtime_image_pins('platform-agent') → molecule-platform-agent:staging-latest so the CP selects it (core#2495); (2) re-provision concierges → identity-fallback fills /configs. The template-delivery-e2e gate (#2971) asserts the concierge boots WITH identity, so it confirms the fix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>