@@ -231,9 +231,13 @@ anything else, and mid opts into the same guarantee for one `stack.callback`. It
231231per-task ` run() ` made of §1–§5 helpers. (Friendly ` on_teardown ` / ` on_abort `
232232aliases are trivial sugar over ` callback ` / ` push ` if the raw names read poorly.)
233233
234- ** Recommendation:** do (a) for every task; add (b) to core only once a second
235- hardware task needs the teardown guarantee heat already has. Skip the
236- phase-sequencing orchestrator entirely.
234+ ** Status:** both tasks now wrap their ` run() ` teardown in a ** local** ` ExitStack `
235+ (heat dropped its ` try/finally ` + ` halted_cleanly ` flag and derives MMS stop-vs-
236+ abort from ` exc_type ` ; mid gained the guaranteed teardown it previously lacked).
237+ Each calls ` core.quit() ` * after* the block so a genuine error still surfaces its
238+ traceback. Promoting this to a ** shared** ` psyexp_core.experiment_session ` helper
239+ (the sketch above) stays deferred until a third — or second hardware — task makes
240+ the dedup worthwhile. The phase-sequencing orchestrator stays rejected.
237241
238242---
239243
@@ -248,10 +252,11 @@ phase-sequencing orchestrator entirely.
248252 helpers from core; drop the duplicated placeholder/idioms.
2492534 . ** heat-task** : bump to ` >=0.8.0 ` first to fix the manifest kwarg (§5), then to
250254 ` 0.9.0 ` ; replace its ` phases.py ` helpers with the core ones.
251- 5 . ** psyexp-core ` 0.10.0 ` ** (optional): ` LiveTableView ` (§4), and — only if a
252- second hardware task needs the same guarantee heat has — the teardown-only
253- ` experiment_session ` (§6b). The phase-sequencing runner is explicitly ** not**
254- planned; ` run() ` stays per-task (§6a).
255+ 5 . ** psyexp-core ` 0.10.0 ` ** (optional): ` LiveTableView ` (§4). Both tasks already
256+ use a * local* ` ExitStack ` for teardown (§6b); consolidating that into a shared
257+ ` experiment_session ` helper is deferred until a second hardware task needs it.
258+ The phase-sequencing runner is explicitly ** not** planned; ` run() ` stays
259+ per-task (§6a).
255260
256261Sequencing keeps each step small and independently shippable, and never leaves a
257262task repo importing a core symbol that isn't released yet.
0 commit comments