Remove all alternate update paths — fleet redeploy is release + upgrade all
Killed: - rebuild_and_restart (in-container cargo self-compile): the MCP tool, the `rebuild` chat command in all four transports, the web-ui bot command, and the underlying function. This was the path that caused the exec() deadlocks. - upgrade_sled gateway MCP tool: second entry point to sled upgrades, defaulted to serving the gateway's own macOS binary to Linux sleds. - GET /api/huskies-binary (both sled and gateway route trees): served current_exe(), wrong platform when the gateway is macOS. Superseded by /api/artifacts/ which now also serves on the gateway route tree. - `huskies upgrade` CLI subcommand and --source flag: third way of doing the same download-and-replace. Escape hatch for a bricked sled is `docker cp` + restart. Kept, distinct jobs: `project-rebuild` (container/image updates), `rebuild gateway` + script/local-release (gateway self-update). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019fHdm92yjvguPi2LiXfLB9
This commit is contained in:
@@ -64,11 +64,6 @@ pub(super) async fn call_rmtree(
|
||||
.await
|
||||
}
|
||||
|
||||
/// Call the Matrix `rebuild` handler.
|
||||
pub(super) async fn call_rebuild(project_root: &Path, agents: &Arc<AgentPool>) -> String {
|
||||
crate::chat::transport::matrix::rebuild::handle_rebuild("web-ui", project_root, agents).await
|
||||
}
|
||||
|
||||
/// Parse and execute a `timer` command.
|
||||
///
|
||||
/// Returns `Err` with a usage string if the timer arguments cannot be parsed.
|
||||
|
||||
@@ -83,7 +83,6 @@ pub async fn execute(
|
||||
let number = parse::parse_number("rmtree", args).map_err(Error::BadArgs)?;
|
||||
Ok(io::call_rmtree(&number, project_root, agents).await)
|
||||
}
|
||||
"rebuild" => Ok(io::call_rebuild(project_root, agents).await),
|
||||
"timer" => io::call_timer(args, project_root)
|
||||
.await
|
||||
.map_err(Error::BadArgs),
|
||||
|
||||
@@ -534,12 +534,12 @@ mod tests {
|
||||
assert_eq!(parse_mode(&args), FireMode::Persistent);
|
||||
}
|
||||
|
||||
/// Regression test: once-mode triggers with a server-restarting action (e.g.
|
||||
/// rebuild_and_restart) must be removed from the store BEFORE the action is
|
||||
/// dispatched. If cancellation happens after dispatch, a server restart
|
||||
/// caused by the action reloads the persisted store and replays the trigger.
|
||||
/// Regression test: once-mode triggers with a server-restarting action
|
||||
/// must be removed from the store BEFORE the action is dispatched. If
|
||||
/// cancellation happens after dispatch, a server restart caused by the
|
||||
/// action reloads the persisted store and replays the trigger.
|
||||
#[test]
|
||||
fn once_mode_rebuild_trigger_cancelled_before_action() {
|
||||
fn once_mode_restart_trigger_cancelled_before_action() {
|
||||
let dir = TempDir::new().unwrap();
|
||||
let path = dir.path().join("triggers.json");
|
||||
let store = EventTriggerStore::load(path.clone());
|
||||
@@ -553,7 +553,7 @@ mod tests {
|
||||
event_kind: None,
|
||||
},
|
||||
TriggerAction::Mcp {
|
||||
method: "rebuild_and_restart".to_string(),
|
||||
method: "server_restarting_action".to_string(),
|
||||
args: serde_json::json!({}),
|
||||
},
|
||||
FireMode::Once,
|
||||
|
||||
Reference in New Issue
Block a user