fix(deps): pin python-multipart>=0.0.27 (P0 canvas upload band-aid; task #256) #35
Reference in New Issue
Block a user
Delete Branch "fix/python-multipart-pin-task-256"
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?
P0 band-aid for canvas-chat upload 400
Symptom: every canvas chat upload returns opaque
400 "failed to parse multipart form"(Hermes confirmed in chloe-dong; affects every template because they allpip install molecule-ai-workspace-runtime).Root cause (forensic
a5bb950f): the publishedmolecule-ai-workspace-runtimewheel does not pull inpython-multipart. StarletteRequest.form()raises anAssertionErrorparsing multipart bodies without it. Hot-installing into a running container makes the 400 disappear; container restart wipes it.Proper SSOT fix:
molecule-core mc#1578— addspython-multipart>=0.0.27toPYPROJECT_TEMPLATEinscripts/build_runtime_package.py. MERGED 2026-05-19T21:41Z (merge SHA1278d57c). But the new runtime wheel has not reached PyPI yet — gated on the Gitea middleman rename + PyPI abuse-block recovery from the0.1.999999wheel incident. Could be hours.This PR: 1-line direct pin in
requirements.txtso the dependency is satisfied via the templates pip-install step, independent of the runtime wheel publish path. Cost: ~10 LOC fleet-wide (comment + pin). Fully compatible with the eventual SSOT fix — once mc#1578 publishes a new runtime version and a.runtime-versioncascade arrives, the runtime wheel itself will carrypython-multipartas a transitive and this direct pin becomes redundant + harmless.Verification path (post-merge per fleet):
publish-image.ymlruns on push to main → new ECR digest.POST /cp/admin/runtime-image/promotewith the new digest + git SHA (perreference_codex_pin_no_autopromoter_exists— promote endpoint exists, must be called explicitly; auto-promote hook is not wired on Gitea 1.22.6)./cp/admin/runtime-imageand assertgit_sha+image_digestmatch.5192737f-4df2-4594-ae11-a95f06210b9e) — required because pins are forward-only and existing containers keep the old image until explicit restart (reference_controlplane_admin_api_access).Refs:
#256a5bb950fmolecule-core mc#1578(merged)reference_codex_pin_no_autopromoter_exists,feedback_verify_actual_endstate_not_ack_follow_sopReviewers: 2 approvals required per branch protection — routing through
core-devops+core-securityperfeedback_route_approvals_to_team_personas_not_orchestrator_sub_agents. Substance is minimal (one dep pin matching SSOT in already-merged mc#1578).Five-axis review (workflow-domain lens):
APPROVE.
Five-axis review (security-surface lens):
APPROVE.