Restored ad-hoc viseg and histo-preprocessing inference in factory_controller.inference, exposed through FastAPI and pixi run factory inference, and reused the campaign Argo submission and worker specifications.
Preserved optional request config, arbitrary input batching, producer identity, per-run histo memory sizing, and separation of pod sizing from worker payload parameters.
Resolved all findings from independent concurrency, API/CLI, OpenAPI, and payload review.
Upgraded GitHub CLI from 2.97.0 to 2.99.0 for native --attach support.
Ran local mock vxData with native Postgres and MinIO, seeded 372 standard resources plus 12 synthetic T2 cases and 5 anatomy maps, and ran the local Factory API and dashboard against it.
Captured and attached the local campaign dashboard and Factory OpenAPI screenshots to the mono PR.
Committed and pushed ad-hoc inference as 37054ee7; local services and mock runtime were removed afterward.
Lessons Learned: Pitfalls
The initial campaign rewrite removed the old ad-hoc inference surface even though callers still rely on /inference/viseg.
A shared Lease error path must be mapped by every API and CLI caller; campaign-only error handling caused inference contention to become HTTP 500 or a CLI AttributeError.
Histo memory is execution sizing, not a worker semantic parameter. Dropping it from shared parameters also accidentally removed the ad-hoc request control unless a controller-only request config preserves it.
The repository mock data does not match Factory campaign predicates by default. Synthetic T2 volumes and anatomy maps were needed for a meaningful screenshot.
Lessons Learned: Improvements
Treat campaign and ad-hoc requests as two input-selection paths into one Argo submission primitive. Keep worker entrypoint, resources, environment, batching, and payload construction in one mapping.
Keep local UI verification synthetic by default. Document the exact campaign-matching seed fields (volume_type=T2, series_description=t2_tse_tra, task=anatomy).
GitHub CLI 2.99.0 or newer can attach local screenshots directly to PR descriptions with gh pr edit --attach 'path#alt text'.