結論
doeff run は、同じ Program を指定しても、入力形式と --runner の有無によって、入るハンドラと scheduler が変わります。利用者から見た「Program を実行する」という一つの操作に複数の意味があり、入力形式の変更だけで効果の処理結果が変わり得ます。
ここでいう runtime は、Program を実値へ評価する interpreter、handler stack、scheduler、env 解決を合わせた実行境界です。
確認済みの事実
2026-07-16 の main (b69f77b7) で確認しました。
--program と通常の -c は resolve_context -> execute -> interpreter を通り、既定では default_interpreter が標準ハンドラと scheduled(...) を入れます。
doeff/cli/run_services.py:146-215
doeff/cli/run_services.py:215-292
--hy は --runner を明示しなくても _dispatch_runner を通り、既定の doeff.runners.local.run_local は bare な run(program) を呼びます。
doeff/__main__.py:310-367
doeff/runners/local.py:13-35
--program / -c で非既定 runner を指定した場合も、env、transform、apply、interpreter の通常経路を使わず runner 側へ分岐します。
doeff/__main__.py:368-403
- runner のテストは
Pure(42) だけで同値性を確認しており、Ask、時間、並行処理、外部 promise を使う Program の意味が同じことは検証していません。
tests/cli/test_cli_runner.py:43-64
影響
- source form を
--program から --hy へ変えただけで、Ask や scheduler effect が処理不能になり得ます。
- remote runner が通常経路の env / transform / interpreter 契約を再実装する必要があります。
doeff.runners.local の説明する「従来経路と同一」が、効果を持つ Program では成立しません。
- 実行時の問題が Program 自体ではなく入口の違いに依存するため、必要な修正箇所が予測しにくくなります。
望ましい設計
入力形式は Program の作り方だけを担当し、その後は一つの runtime request と一つの実行契約へ合流させます。
概念上は次の形です。
--program / --hy / -c
|
v
Program + RunRequest
|
v
runner (local / remote)
|
v
runtime(program, env=?, ctx=?)
runner は実行場所を選び、runtime は handler / scheduler / env の意味を所有します。同じ local runtime を通る限り、入力形式によって意味が変わらないことを構造的に保証します。
完了条件
関連
結論
doeff runは、同じProgramを指定しても、入力形式と--runnerの有無によって、入るハンドラと scheduler が変わります。利用者から見た「Program を実行する」という一つの操作に複数の意味があり、入力形式の変更だけで効果の処理結果が変わり得ます。ここでいう runtime は、Program を実値へ評価する interpreter、handler stack、scheduler、env 解決を合わせた実行境界です。
確認済みの事実
2026-07-16 の
main(b69f77b7) で確認しました。--programと通常の-cはresolve_context -> execute -> interpreterを通り、既定ではdefault_interpreterが標準ハンドラとscheduled(...)を入れます。doeff/cli/run_services.py:146-215doeff/cli/run_services.py:215-292--hyは--runnerを明示しなくても_dispatch_runnerを通り、既定のdoeff.runners.local.run_localは bare なrun(program)を呼びます。doeff/__main__.py:310-367doeff/runners/local.py:13-35--program/-cで非既定 runner を指定した場合も、env、transform、apply、interpreter の通常経路を使わず runner 側へ分岐します。doeff/__main__.py:368-403Pure(42)だけで同値性を確認しており、Ask、時間、並行処理、外部 promise を使う Program の意味が同じことは検証していません。tests/cli/test_cli_runner.py:43-64影響
--programから--hyへ変えただけで、Askや scheduler effect が処理不能になり得ます。doeff.runners.localの説明する「従来経路と同一」が、効果を持つ Program では成立しません。望ましい設計
入力形式は Program の作り方だけを担当し、その後は一つの runtime request と一つの実行契約へ合流させます。
概念上は次の形です。
runner は実行場所を選び、runtime は handler / scheduler / env の意味を所有します。同じ local runtime を通る限り、入力形式によって意味が変わらないことを構造的に保証します。
完了条件
--program、--hy、-cが同じ中間契約へ合流する。run(program)を呼ばない。--set、--apply、--transform、DoeffRunContextの扱いが入口間で明文化され、意図的に同一または明示的に拒否される。Ask、Spawn/Gather、Wait、missing env の各 Program を全入力形式で実行し、意味の同値性を検証する。--runnerと interpreter の責任重複を整理し、移行・廃止方針を文書化する。関連