feat(action-guard): Muse-only idle-promise guard on Jev classifier - #741
Merged
Merged
Conversation
A Muse reply that promises action but ends with zero tool calls used to stop the turn, since the gate treats tool-free text as Achieved. The new action-guard capability asks the Jev classifier on Achieved plus zero tools for Muse sessions only, and a hit rewrites the verdict to InProgress with a continuation nudge. Misses, errors, and a missing TypeSafe key keep Achieved. Key: TYPESAFE_API_KEY env, tokens.typesafe setting fallback. Model: --classifier-model flag, classifier_model setting, backend default.
chaliy
added a commit
that referenced
this pull request
Sep 24, 2026
## Summary Moves all 19 everruns crates to ` =0.30.0` as one batch (the facade, platform, parallel, daytona, and typesafe crates published a day after the first 14, so the bump waited for the complete set rather than mixing versions). Adapts to the 0.30 renames, all mechanical, no behavior change: - core `Message`/`MessageRole` become `RuntimeMessage`/`RuntimeMessageRole` - provider `LlmMessage` types move to the `message` module (kept under their local aliases in the drivers) - `ToolExecutionResult` connection patterns gain rest patterns for the new `subject` and `setup_url` fields - ports the action-guard (\#741) to the Decisions API: `ClassifierService` becomes `DecisionsService`, `Classification*` become `Decision*`, host builder and adapter accessors move from `classifier` to `decisions` The `classifier-model` settings key keeps its name; only the upstream API underneath changed. ## Testing - `cargo fmt --check` clean - `cargo clippy --workspace --all-targets --features yolop-yep/schema -- -D warnings` clean - `cargo test --workspace --features yolop-yep/schema`: 1569 passed, 0 failed ## Risk Low. Version pins plus identifier renames against published APIs; the full suite passes. New 0.30 adoptions (models, Ask User, Host Shell) are left for follow-ups. Produced by [yolop](https://everruns.com/yolop) Co-authored-by: yolop <yolop@everruns.com>
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.
What changed
Muse replies that promise action (verify, check, act) but end the turn with zero tool calls no longer stop the turn. A new action-guard capability asks the Jev classifier on Achieved plus zero tools for Muse sessions only; a hit rewrites the verdict to InProgress with a continuation nudge. Key via TYPESAFE_API_KEY env or tokens.typesafe setting; model via --classifier-model flag or classifier_model setting (no TUI sidebar control).
Why
The turn gate treats tool-free text as Achieved, so a promised action with no tool call ended the turn and the host presented the promise. Users saw standby text like 'Let me verify the exact split before answering' with no follow-up.
Before / After
Risk
Checklist
Knowledge
Updated concepts: new knowledge/specs/action-guard.md plus index and log entries.
Security
New external call to the TypeSafe Jev backend on a narrow trigger (Muse, Achieved, zero tools). Key handling mirrors other providers (env first, settings fallback); classification credentials stay deployment-owned per TM-LLM-037 posture. Fail open on any error or timeout.
Follow-ups
Produced by yolop