···190190 state protoimpl.MessageState `protogen:"open.v1"`
191191 Available bool `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"`
192192 // engine-defined load metrics. keys are opaque to the mill.
193193- Load map[string]float64 `protobuf:"bytes,2,rep,name=load,proto3" json:"load,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
193193+ Load map[string]float64 `protobuf:"bytes,2,rep,name=load,proto3" json:"load,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
194194+ // engine-defined placement facts. keys are opaque to the mill and matched
195195+ // exactly against requirements from the trusted engine planner.
196196+ Capabilities []string `protobuf:"bytes,3,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
194197 unknownFields protoimpl.UnknownFields
195198 sizeCache protoimpl.SizeCache
196199}
···235238func (x *EngineAvailability) GetLoad() map[string]float64 {
236239 if x != nil {
237240 return x.Load
241241+ }
242242+ return nil
243243+}
244244+245245+func (x *EngineAvailability) GetCapabilities() []string {
246246+ if x != nil {
247247+ return x.Capabilities
238248 }
239249 return nil
240250}
···11541164 "\x06labels\x18\x03 \x03(\tR\x06labels\"'\n" +
11551165 "\x06Resume\x12\x1d\n" +
11561166 "\n" +
11571157- "ack_offset\x18\x01 \x01(\x04R\tackOffset\"\xae\x01\n" +
11671167+ "ack_offset\x18\x01 \x01(\x04R\tackOffset\"\xd2\x01\n" +
11581168 "\x12EngineAvailability\x12\x1c\n" +
11591169 "\tavailable\x18\x01 \x01(\bR\tavailable\x12A\n" +
11601160- "\x04load\x18\x02 \x03(\v2-.spindle.mill.v1.EngineAvailability.LoadEntryR\x04load\x1a7\n" +
11701170+ "\x04load\x18\x02 \x03(\v2-.spindle.mill.v1.EngineAvailability.LoadEntryR\x04load\x12\"\n" +
11711171+ "\fcapabilities\x18\x03 \x03(\tR\fcapabilities\x1a7\n" +
11611172 "\tLoadEntry\x12\x10\n" +
11621173 "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
11631174 "\x05value\x18\x02 \x01(\x01R\x05value:\x028\x01\"\xe0\x01\n" +
+3
spindle/mill/proto/spindle/mill/v1/mill.proto
···3131 bool available = 1;
3232 // engine-defined load metrics. keys are opaque to the mill.
3333 map<string, double> load = 2;
3434+ // engine-defined placement facts. keys are opaque to the mill and matched
3535+ // exactly against requirements from the trusted engine planner.
3636+ repeated string capabilities = 3;
3437}
35383639// NodeSnapshot is pushed on connect, periodically, and right after any state