> This is the Markdown version of the page. For the complete Lattice Developers documentation index, fetch https://developer.anduril.com/llms.txt. Append .md to any page URL for its clean Markdown.

# Fixes to the Protobuf Specification

We generally avoid breaking changes to the Lattice APIs and don't make them lightly. We recently discovered a discrepancy
in the Protobuf type definitions resulting in some fields not being processed correctly and are fixing this.
This will require clients using the `StreamTasksRequests.StatusFilter` field within the `TaskManager` API to make a code change when they decide to upgrade to the latest
protocol specification. We recommend upgrading to the latest protocol specification to pull in the other fixes. The REST API is unchanged.

### Use `StreamTasksRequest.StatusFilter` to filter by status

The `status_filter` field on `StreamTasksRequest` now takes a `StreamTasksRequest.StatusFilter`
instead of a `QueryTasksRequest.StatusFilter`. The fields and enum values are the same, so you
only need to change the type names:

* `QueryTasksRequest.StatusFilter` is now `StreamTasksRequest.StatusFilter`.
* `QueryTasksRequest.FilterType` is now `StreamTasksRequest.FilterType`.

**`Go`**

```go title="Go"
// Before
request := &taskmanagerv1.StreamTasksRequest{
    StatusFilter: &taskmanagerv1.QueryTasksRequest_StatusFilter{
        Status:     []taskmanagerv1.Status{taskmanagerv1.Status_STATUS_EXECUTING},
        FilterType: taskmanagerv1.QueryTasksRequest_FILTER_TYPE_INCLUSIVE,
    },
}

// After
request := &taskmanagerv1.StreamTasksRequest{
    StatusFilter: &taskmanagerv1.StreamTasksRequest_StatusFilter{
        Status:     []taskmanagerv1.Status{taskmanagerv1.Status_STATUS_EXECUTING},
        FilterType: taskmanagerv1.StreamTasksRequest_FILTER_TYPE_INCLUSIVE,
    },
}
```

**`Rust`**

```rust title="Rust"
// Before
use anduril_lattice_sdk_community_neoeinstein_prost::anduril::taskmanager::v1::{
    query_tasks_request, Status, StreamTasksRequest,
};

let request = StreamTasksRequest {
    status_filter: Some(query_tasks_request::StatusFilter {
        status: vec![Status::Executing as i32],
        filter_type: query_tasks_request::FilterType::Inclusive as i32,
    }),
    ..Default::default()
};

// After
use anduril_lattice_sdk_community_neoeinstein_prost::anduril::taskmanager::v1::{
    stream_tasks_request, Status, StreamTasksRequest,
};

let request = StreamTasksRequest {
    status_filter: Some(stream_tasks_request::StatusFilter {
        status: vec![Status::Executing as i32],
        filter_type: stream_tasks_request::FilterType::Inclusive as i32,
    }),
    ..Default::default()
};
```

`QueryTasks` is not affected. Keep using `QueryTasksRequest.StatusFilter` when you query tasks.

### Fixes

The following fixes need no source code changes. Upgrade your generated SDK to pick them up:

* `CancelTaskRequest.delivery_constraints` is now applied when you cancel a task.
* `Munition.quantity_units` is now published and read correctly.
* `StreamTasksRequest.heartbeat_interval_ms` is now applied when you send requests as Protobuf JSON.