Summary
A turn whose first round carries only system-injection user messages (no real user content) is finalized locally without a model request; the success whitelist only accepts max_rounds/repeated_tool_failures, so this terminal reason classifies as failure. Add empty_initial_turn to the whitelist so locally synthesized terminal turns settle as success like the other no-model-request reasons.
Note: no production path emits empty_initial_turn at this baseline (grep zero hits across the tree at 32f2427); this is a defensive alignment so the reason settles correctly once an empty-input first-round guard is introduced upstream.
Area
src/crates/assembly/core/src/agentic/execution/execution_engine.rs (success whitelist, single line). Crate: bitfun-core.
Reproduction or evidence
At 32f2427 the whitelist (:4983) is "max_rounds" | "repeated_tool_failures". Evidence for the defensive nature: git grep empty_initial_turn 32f2427697 matches zero files; the reason value is only referenced by this whitelist today.
Environment
All platforms; baseline 32f2427.
AI-assisted change. Testing: verified locally (cargo check -p bitfun-core exit 0; cargo test --features agent-runtime execution_engine 48 passed, 0 failed; the suite requires the agent-runtime feature since the crate has default = []).
Summary
A turn whose first round carries only system-injection user messages (no real user content) is finalized locally without a model request; the success whitelist only accepts max_rounds/repeated_tool_failures, so this terminal reason classifies as failure. Add empty_initial_turn to the whitelist so locally synthesized terminal turns settle as success like the other no-model-request reasons.
Note: no production path emits empty_initial_turn at this baseline (grep zero hits across the tree at 32f2427); this is a defensive alignment so the reason settles correctly once an empty-input first-round guard is introduced upstream.
Area
src/crates/assembly/core/src/agentic/execution/execution_engine.rs (success whitelist, single line). Crate: bitfun-core.
Reproduction or evidence
At 32f2427 the whitelist (:4983) is "max_rounds" | "repeated_tool_failures". Evidence for the defensive nature:
git grep empty_initial_turn 32f2427697matches zero files; the reason value is only referenced by this whitelist today.Environment
All platforms; baseline 32f2427.
AI-assisted change. Testing: verified locally (
cargo check -p bitfun-coreexit 0;cargo test --features agent-runtime execution_engine48 passed, 0 failed; the suite requires the agent-runtime feature since the crate has default = []).