Skip to content

feat(campaigns): wire up CampaignRunner + Sqlite/Parquet stores (M4)#3

Merged
vcaries merged 1 commit into
mainfrom
feat/m4-campaigns
May 27, 2026
Merged

feat(campaigns): wire up CampaignRunner + Sqlite/Parquet stores (M4)#3
vcaries merged 1 commit into
mainfrom
feat/m4-campaigns

Conversation

@vcaries

@vcaries vcaries commented May 27, 2026

Copy link
Copy Markdown
Owner

M4 — Campaigns layer

What

  • hash_airfoil: stable 16-char SHA-1 over coordinates
  • SqliteResultStore: DB-backed, idempotent on
    (airfoil_hash, alpha, Re, Mach, n_crit) PRIMARY KEY
  • ParquetResultStore: in-memory buffer + flush to disk
  • CampaignRunner: serial path (with convergence pipeline + store
    consultation) and parallel path via multiprocessing.Pool (parent
    owns the store to avoid pickling connections)
  • CampaignResult value object with success_rate

Resumability

End-to-end test demonstrates: kill mid-run, relaunch against the same
store, solver.calls == 0 because every point is cached.

Tests

+17 unit tests (now 134 total). All green:

  • ruff / ruff format / mypy / pytest ✅

Out of scope (next)

  • M5: matplotlib plots + GIF/MP4 animation pipeline (the portfolio payoff)

@vcaries vcaries merged commit e18c760 into main May 27, 2026
1 of 7 checks passed
@vcaries vcaries deleted the feat/m4-campaigns branch May 27, 2026 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants