Conversation
An Auto launch that routed to plan-map or single-agent silently dropped the operator's allowed model pool, persona pool, decision critic and delivery spec (only the supervisor builder read them), and plan-map dropped the acceptance floor while the composer demanded one. The planner was shown the whole team pool, and dispatch never bounded the model it ran. Every route-dependent control now gets a disposition - Applied, Clamped, NotApplicable or Refused, with the reason - from one resolver the launch and its route preview share, so a preview can no longer promise a launch it will not get. A refusal stops the launch before any session or run exists, with task_launch_control_refused. - The model pool bounds the plan-map planner's catalog and rides every agent.run; dispatch runs a model outside it on the pool's default row and names the move on the run. Quick clamps a pinned model outside the pool at launch, so the frozen config shows the model that runs. - A persona the pool excludes refuses a plan-map or quick launch. - An acceptance floor on an explicit plan-map launch is refused with the preview's own verdict; on Auto it keeps the route off plan-map. - The Delivery/Unattended mandate covers every route that grades a floor, single-agent included. - Grounding is resolved before routing, so a chat follow-up is classified as one, and an ambiguous classification asks to confirm.
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.
Summary
SupervisorDefinitionBuilderread them), and plan-map dropped the acceptance floor. Every route-dependent control —allowedModelIds,allowedAgentDefinitionIds,acceptanceChecks,decisionReviewMode,deliverySpec,requirePlanConfirmation,plannerReviewMode— now gets aLaunchControlDisposition(Applied/Clamped/NotApplicable/Refused, with the reason) from oneILaunchControlResolverthat bothTaskLaunchServiceandTaskRoutePreviewServicecall. It is returned onLaunchTaskResult.ControlDispositionsandTaskRoutePreviewResult.ControlDispositions; a refused control stops the launch before any session or run withTaskLaunchControlRefusedException(task_launch_control_refused, details list each refused control).plan.author/plan.confirm(WorkflowPlanRequest.AllowedModelIds, so the planner's catalog lists only the pool) and into every branchagent.run; single-agent into its agent.AgentCodeNodecarries it ontoAgentTask.AllowedModelIds,HarnessModelReconcilerresolves the task's pooled row (its named model's, else the pool default), and the executor runs and persists that row, names a moved model on the run's timeline, and fails the run if the pool resolves nothing. Quick also clamps a pinned model outside the pool at launch, so the frozen config shows the model that runs. On single-agent / plan-map a persona the pool excludes is refused.acceptanceChecksis refused with the preview's own acceptance verdict. On Auto the floor is a routing signal —EffortRoutersets aside tiers whose builder does not advertiseOperatorAcceptance.AcceptsCommandand takes the policy's next matching row (Standard → Quick), naming the move inRoutePlan.DegradedReason, which removes the composer's Auto + Delivery dead-end with no FE change. The Delivery/Unattended mandate now covers every route that grades a floor (single-agent included). Grounding is resolved before routing in both the launch and the route snapshot, so a chat follow-up is classified as one, andNeedsConfirmCardalso fires onSignals.Ambiguous.Clampedwithout rewriting the profile (the synthesis keeps its model, each branch is clamped at dispatch). Consequences worth knowing: a Continue preview now brings the session summary up to date, as the launch always did; theTaskLaunchAutobenchmark arm now needs confirmation for an ambiguous classification, as it already did for a low-confidence one. Follow-ups, not here: grading plan-map's integrated tree against the operator floor (Q-3), and the composer rendering the dispositions.Test plan
LaunchControlResolverTests(every lane × control; clamp / refuse / not-applicable reasons),LlmEffortClassifierTests(ambiguous confirms; an operator floor moves an auto Standard route to Quick, never an explicit or pinned lane, leaves Deep),TaskLaunchServiceQualityTierTests,TaskRoutePreviewServiceTests(preview dispositions equal the resolver's; wire shape), builder /AgentCodeNode/PlanAuthorNodepool tests,FailureTaxonomyTestspin. Full unit suite: 11,653 passed, 1 skipped, 1 load-timing failure inAgentRunLogCaptureBridgeTests(path untouched here; 20/20 three times in isolation)TaskLaunchFlowTests55/55,TaskRoutePreviewFlowTests6/6,TaskLaunchContractFlowTests11/11,HarnessModelReconcilerFlowTests16/16,AgentRunExecutorTests146/146,PlannerModelPoolFlowTests1/1,PlannerCassetteDriftTests2/2 (ExpectedPlannerKeyunchanged), plus the router, snapshot, session, supervisor and benchmark classes on these pathsTaskRouteSnapshotEndpointTests20/20,TaskLaunchEndpointE2ETests6/6, plan-map fan-out flowsTaskRoutePreviewServiceTests.Preview_reports_the_same_control_dispositions_the_launch_resolves_for_the_same_inputTaskRoutePreviewFlowTests.The_preview_reports_the_same_control_dispositions_the_launch_then_appliesTaskLaunchFlowTests.An_explicit_standard_launch_with_an_operator_floor_is_refused_with_the_reason_its_preview_givesTaskLaunchFlowTests.An_auto_route_to_quick_clamps_a_pinned_model_outside_the_allowed_pool_and_says_soPlannerModelPoolFlowTests.The_planners_catalog_lists_only_the_allowed_pool_and_the_whole_pool_when_unboundedSingleAgentDefinitionBuilderTests.The_allowed_model_pool_rides_the_agent_node_and_an_unbounded_launch_is_byte_identical,PlanMapSynthDefinitionBuilderTests.The_allowed_model_pool_bounds_the_planners_catalog_and_rides_every_branchAgentCodeNodeTests.The_allowed_model_pool_a_projection_baked_is_carried_onto_the_taskHarnessModelReconcilerFlowTests.A_bounded_task_naming_a_model_outside_its_pool_runs_the_pools_default_row_and_says_soAgentRunExecutorTests.A_bounded_run_naming_a_model_outside_its_pool_runs_the_pooled_row_persists_it_and_names_the_moveTaskLaunchFlowTests.An_auto_route_to_quick_refuses_a_persona_the_allowed_pool_excludes_before_any_runLaunchControlResolverTests.Every_control_the_launch_carries_gets_exactly_one_disposition_per_laneTaskLaunchContractFlowTests.A_standard_launch_carrying_an_operator_floor_is_refused_and_records_nothingTaskLaunchFlowTests.An_auto_route_with_an_operator_floor_never_lands_on_plan_map_and_grades_the_floor_insteadTaskLaunchFlowTests.A_quick_launch_at_delivery_quality_without_an_acceptance_check_is_rejected_before_any_run_is_createdTaskLaunchFlowTests.A_continue_is_routed_on_the_threads_grounding_by_both_the_preview_and_the_launchLlmEffortClassifierTests.The_router_STILL_confirms_an_AMBIGUOUS_task_even_when_the_model_is_confidentTaskLaunchServiceQualityTierTests.A_non_supervisor_launch_at_delivery_or_unattended_quality_is_never_rejected(single-agent is now rejected; plan-map is not asked for a floor it cannot grade);TaskLaunchFlowTests.A_quick_launch_at_delivery_quality_is_never_rejected_for_a_missing_acceptance_check→…_without_an_acceptance_check_is_rejected_before_any_run_is_created; the Standard row ofTaskLaunchContractFlowTests.Every_launch_lane_records_original_controls_in_the_frozen_run_detailsends no floor, with the refusal pinned in its own test