Split init/dev/share/deploy/eval into options/run exec modules#138
Merged
Conversation
Apply the gh-CLI-style options/run split (already used by transcribe,
stream, agent, speak, llm, clip, dictate, dub) to the remaining
flag-heavy single-run commands. Each command module now only parses
argv into a frozen <Cmd>Options dataclass and hands it to a
module-level run_<cmd>(opts, state, *, json_mode) in a dedicated
<cmd>_exec module:
- aai_cli/dev_exec.py (DevOptions / run_dev)
- aai_cli/share_exec.py (ShareOptions / run_share)
- aai_cli/deploy_exec.py (DeployOptions / run_deploy; flag->target
resolution moved into run_deploy)
- aai_cli/evaluate_exec.py (EvalOptions / run_evaluate; EvalSpeechModel
and all scoring/render helpers)
- aai_cli/init_exec.py (InitOptions / run_init + launch_app, called
by the onboarding wizard)
The onboarding wizard now scaffolds via init_exec.run_init/launch_app
instead of reaching into the command module. The new exec modules are
registered in .importlinter contract 1 (core modules must not import
command modules), and the moved tests are repointed at the exec modules.
alexkroman
pushed a commit
that referenced
this pull request
Jun 13, 2026
…mediafile refactor Reconciles the shared-scaffolding refactor with three upstream changes: the language-native voice rotation (#136), the dub --video flag and the new caption command (#139), and the exec-module splits (#138). - run_dub keeps upstream's YouTube-download branch and _dub_and_emit split, with this branch's early validation (--voice parse, URL echo, out-path checks) threaded through; the parsed --voice pair rides in a frozen _VoicePlan. - caption_exec now uses the shared mediafile helpers too (it had copied the same scaffolding), which also gives caption the upfront out-path validation, the samefile self-overwrite guard, the transcript status check, and the './-' ffmpeg path hardening. - mediafile grows the caption-shaped pieces: validate_out (hoisted from dub_exec), a general resolve_transcript (diarized variant delegates), a kind= parameter for validate_local_media, and a suggestion override for ffmpeg_failure. - test_dub_pipeline's YouTube-source tests move to test_dub_sources.py to stay under the 500-line file gate. https://claude.ai/code/session_018TuAQTvp9PVy5EdhsDWo2h
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Apply the gh-CLI-style options/run split (already used by transcribe,
stream, agent, speak, llm, clip, dictate, dub) to the remaining
flag-heavy single-run commands. Each command module now only parses
argv into a frozen Options dataclass and hands it to a
module-level run_(opts, state, *, json_mode) in a dedicated
_exec module:
resolution moved into run_deploy)
and all scoring/render helpers)
by the onboarding wizard)
The onboarding wizard now scaffolds via init_exec.run_init/launch_app
instead of reaching into the command module. The new exec modules are
registered in .importlinter contract 1 (core modules must not import
command modules), and the moved tests are repointed at the exec modules.