Skip to content

2026-09-02 Factory campaign PR and ad hoc inference restoration

Opened coordinated draft PRs, restored typed inference, and verified local Factory surfaces with synthetic vxData.

Work Done

  • Opened draft mono PR https://github.com/virdx/mono/pull/368 for the campaign controller, contracts, shared worker, CLI, and dashboard changes.
  • Opened coordinated draft infrastructure PR https://github.com/virdx/infra_k8s/pull/189 for controller/worker image mappings and Kubernetes Lease RBAC.
  • 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'.
Navigation

Type to search…

↑↓ navigate↵ selectEsc close