magi-cli 0.194.1

Blind multi-agent implementation competition: N agents implement, M judges rank blind, deliberate, vote privately, winner survives double review + E2E gate
Documentation
# CLI integration-test isolation

Use `common::magi_cli(home)` to spawn the real binary. The caller keeps its
fixture directory alive until the child and its independent workers exit.
The helper creates a private host home and cwd, sets `MAGI_HOME`,
`MAGI_CONFIG_DIR`, `MAGI_NO_AUTOUPDATE=1`, `HOME` and `USERPROFILE`, and removes
inherited seat and worker identities (`MAGI_RUN`, `MAGI_NODE`, `MAGI_SEAT`,
`MAGI_TURN_SCOPE`, `MAGI_WORKER_EXE`, `MAGI_WORKER_ID`,
`MAGI_WORKER_GENERATION`, `MAGI_WORKER_HOME`). Tests may explicitly override
these defaults afterward.

Tests embedding the library's scheduler use `MAGI_WORKER_EXE` to name
`CARGO_BIN_EXE_magi`; a test harness executable is not a worker CLI.
`common::isolated` sets this before its runtime starts. Native restart fixtures
kill only the web/scheduler PID, not its descendant tree: killing a process tree
would deliberately kill the workers whose independence the test must measure.

CLI environment resets belong to the spawned command, not to its embedding test
process. A fixture that copies those settings into its own environment must
retain its explicit `MAGI_WORKER_EXE`; otherwise later library dispatch tries
to launch the libtest harness as a worker. Keep the host's worker-binary override
separate from the child CLI's cleared worker identity.

Agent and shell adapters copy the same defaults while preserving the fresh
seat identity assigned by the launcher and its explicit fixture cwd. The
`update_exit` test deliberately re-enables updates with its existing fake `gh`,
private HOME/cache/configuration, token removal, and process-group cleanup.

## Local timing comparison

Linux measurements could not be collected: the available local runner is macOS
and has no available Linux container runtime. The table below reports **macOS**
measurements instead; Linux before/after timings remain a follow-up.
**Windows numbers must be read from the next CI run's JUnit artifacts.**

The baseline is `b301cab9f906ccd60cb6fa957292ae47464a0ef9`. Both versions used
Rust stable (`rustc 1.98.1`) and the shared build cache. After building, each of
the 57 tests ran once, sequentially, as a separate libtest process with
`--exact --test-threads=1`. Wall-clock seconds include process startup and exit;
build time is excluded. No other build or test invocation from this task ran
during either recorded measurement.

Both runs inherited `MAGI_NO_AUTOUPDATE=1`, temporary HOME, cache, configuration
and magi directories, a temporary initial cwd, and no seat identity variables.
This safe baseline intentionally does **not** reproduce the old GitHub request
or shared-cache access, so these single samples do not measure the removed
network delay or establish a performance improvement.

| Test | Before (s) | After (s) |
| --- | ---: | ---: |
| `a_chat_merge_from_a_different_chat_is_refused` | 1.603 | 1.529 |
| `a_chat_merge_quoting_the_owner_is_accepted` | 0.043 | 0.098 |
| `a_chat_merge_with_words_the_owner_never_wrote_is_refused` | 0.041 | 0.109 |
| `a_chat_merge_without_a_quote_is_refused` | 0.041 | 0.107 |
| `a_direct_owner_hold_does_not_inherit_conditions_from_assistant_prose` | 0.046 | 0.094 |
| `a_same_chat_batch_is_not_a_specific_merge_confirmation` | 0.044 | 0.103 |
| `ambiguous_short_ids_and_conflicting_recommendations_do_not_bind_a_batch` | 0.079 | 0.192 |
| `ask_chat_busy_exits_unsuccessfully_without_changing_state` | 0.057 | 0.137 |
| `batch_holds_reject_entire_ambiguous_or_conditional_recommendations` | 0.319 | 0.726 |
| `batch_holds_validate_surrounding_headings_and_paragraphs` | 0.413 | 0.890 |
| `batch_reports_action_specific_missing_consent_in_every_conversation` | 0.233 | 0.495 |
| `chat_merge_preserves_the_recorded_head_confirmation_requirement` | 0.101 | 0.217 |
| `cli_reloads_a_concurrently_settled_question_after_evidence_contention` | 0.275 | 0.395 |
| `cli_waits_for_the_conversation_evidence_lock_before_reading_owner_intent` | 0.295 | 0.307 |
| `competing_non_hold_instructions_have_one_winner_and_no_second_execution` | 0.197 | 0.101 |
| `concurrent_standing_answers_settle_once_and_keep_the_winning_authority` | 0.192 | 0.098 |
| `consult_other_is_a_note_without_answer_or_choice_effect_and_invocation_stays_restricted` | 0.093 | 0.164 |
| `consult_task_add_binds_current_owner_operation_and_execution_arguments` | 0.202 | 0.380 |
| `consult_task_add_rechecks_owner_evidence_after_async_preparation` | 0.444 | 0.355 |
| `consult_task_evidence_rejects_wrong_target_predelivery_queued_and_generated_sends` | 0.111 | 0.217 |
| `consult_task_hold_priority_and_done_keep_queue_claims_and_exact_run_grants` | 0.127 | 0.201 |
| `consultation_waiting_for_evidence_cannot_undo_a_manual_cli_hold` | 0.163 | 0.242 |
| `cross_chat_merge_and_closure_require_individual_bound_tokens` | 0.149 | 0.232 |
| `deputy_replacement_title_rejects_hold_retraction_and_quoted_or_missing_consent` | 0.433 | 0.852 |
| `deputy_replacement_title_requires_current_content_binding_and_publishes_only_literal_text` | 0.119 | 0.197 |
| `explicit_batch_binds_each_preceding_recommendation_without_approving_merge` | 0.130 | 0.231 |
| `explicit_public_content_and_literal_owner_title_are_bound_to_the_question` | 0.169 | 0.251 |
| `explicitly_bound_cross_chat_and_unconsulted_holds_record_owner_evidence` | 0.237 | 0.425 |
| `generated_and_quoted_recommendations_do_not_authorize_but_hold_is_separate_from_closure` | 0.309 | 0.494 |
| `generated_sends_do_not_replace_the_latest_real_owner_instruction` | 0.253 | 0.329 |
| `guarded_quote_whitespace_keeps_legacy_comparison_and_complete_owner_evidence` | 0.361 | 0.491 |
| `japanese_batch_dismisses_obsolete_execution_without_touching_its_pr` | 0.220 | 0.330 |
| `legacy_consult_repair_requires_exact_owner_choice_and_keeps_original_handoff` | 0.137 | 0.151 |
| `legacy_recorded_send_boundaries_support_existing_owner_authorization` | 0.128 | 0.215 |
| `non_hold_batch_decisions_use_current_manifests_across_consultation_destinations` | 1.225 | 1.414 |
| `non_hold_manifests_reject_changed_questions_recommendations_and_busy_consultations` | 0.303 | 0.370 |
| `operator_held_chat_approvals_still_refuse_even_explicit_holds` | 0.116 | 0.183 |
| `operator_held_tasks_keep_ordinary_chat_decisions_available_without_lifting_the_hold` | 1.843 | 2.552 |
| `ordinary_chat_task_add_does_not_require_an_existing_talk_record` | 0.169 | 0.276 |
| `owner_code_examples_do_not_authorize_non_hold_actions` | 0.219 | 0.306 |
| `recovery_cli_accepts_japanese_hold_and_diagnoses_refused_bindings` | 0.257 | 0.367 |
| `recovery_cli_accepts_short_and_full_ids_with_stable_aliases_and_localized_labels` | 2.585 | 3.659 |
| `recovery_cli_does_not_extend_merge_posting_or_destructive_consent` | 0.500 | 0.555 |
| `recovery_cli_does_not_reconstruct_old_bindings_or_accept_alias_collisions` | 0.354 | 0.377 |
| `recovery_cli_generated_sends_in_the_owner_turn_do_not_replace_real_evidence` | 0.067 | 0.123 |
| `recovery_cli_interprets_natural_japanese_with_current_persisted_recommendation` | 0.304 | 0.345 |
| `recovery_cli_preserves_pending_merge_approval_and_existing_run_ownership` | 0.195 | 0.146 |
| `recovery_cli_rejects_stale_ambiguous_missing_and_mismatched_evidence` | 1.069 | 0.736 |
| `recovery_quote_whitespace_still_requires_the_exact_complete_owner_send` | 0.289 | 0.176 |
| `recovery_recommendation_uses_existing_question_grants_and_excludes_legacy_requeue` | 0.272 | 0.209 |
| `same_chat_replacement_title_cannot_be_authorized_by_hold_or_old_thread_text` | 0.267 | 0.242 |
| `same_chat_replacement_title_uses_bound_current_owner_text_and_retains_evidence` | 0.085 | 0.079 |
| `same_chat_single_word_hold_remains_supported` | 0.088 | 0.111 |
| `standing_evidence_requires_real_sends_fresh_questions_and_current_instructions` | 0.731 | 0.930 |
| `standing_holds_reject_missing_ambiguous_conditional_and_retracted_intent` | 0.683 | 0.989 |
| `unconsulted_free_text_uses_the_complete_bound_owner_answer` | 0.076 | 0.099 |
| `use_my_text_never_reuses_old_thread_content_without_a_new_literal_title` | 0.066 | 0.121 |
| **Sum** | **19.527** | **25.720** |