Tuya integrated EV-charger (single phase, 32A 85-264v, 7,4 kwh)

This is a Tuya EV charger, single phase 32a supports 85v to 264v. It uses Smart Life app, but it seems like other Tuya EV chargers use the same API (without confirming it)
link: https://www.aliexpress.com/item/1005005504929776.html?spm=a2g0o.order_list.order_list_main.48.4dbb1802z6vKSl
Log:
2023-09-26 23:36:15.707 WARNING (MainThread) [custom_components.tuya_local.config_flow] Device matches dooya_curtain with quality of 31%. DPS: {"updated_at":<PHONE_NUMBER>.6401825, "10": 0, "101": "no_connect", "102": 32, "103": true, "104": 0, "106": 0, "107": 229, "108": 0, "109": 0, "110": 413, "112": false, "113": 0, "114": 0}

DPS:
{"updated_at":<PHONE_NUMBER>.6401825,
"10": 0,
"101": "no_connect",
Amps: "102": 32,
"103": true,
"104": 0,
"106": 0,
Voltage "107": 229,
"108": 0,
"109": 0,
"110": 413,
"112": false,
"113": 0,
"114": 0}
https://github.com/make-all/tuya-local/issues/new?assignees=&labels=new+device&projects=&template=new-device.md&title=Request+support+for+[device+description]
API:
curl --request GET "https://openapi.tuyaeu.com/v2.0/cloud/thing/bfe9b32545f5176313izm1/model" --header "sign_method: HMAC-SHA256" --header "client_id: amud3mjp94mk3ys9htcu" --header "t:<PHONE_NUMBER>888" --header "mode: cors" --header "Content-Type: application/json" --header "sign: 7DA40862FA91BFC4F76BA9F4D864A5553A139EE5A75C5B959E199F168658E2AD" --header "access_token: 1439e123e9726f509bf0328e6554d43b"

{
"code": 28841002,
"msg": "No permissions. Your subscription to cloud development plan has expired.",
"success": false,
"t":<PHONE_NUMBER>849,
"tid": "0f72c7925cb611ee8665fe445e07f2df"
}
DP’S:
Work State
Code 3
Type: Enum
{
"range": [
"charger_free",
"charger_insert",
"charger_free_fault",
"charger_wait",
"charger_charging",
"charger_pause",
"charger_end",
"charger_fault"
]
}
Fault
Code 10
Type: Bitmap.
{
"label": [
"ERR_UVP",
"ERR_OVP",
"ERR_OCP",
"ERR_PE",
"ERR_TEMP",
"ERR_CP",
"ERR_LEAK",
"ERR_RE_SCK",
"ERR_PE2",
"TEMP_PLUG",
"TEMP_PCB",
"TEMP_CORE",
"ESB",
"PE_SCK",
"LEAK_SCK",
"TEMP_SCK"
],
"maxlen": 16
}
Alarm Set 1
Code 11
Type: Raw
Unknown function
Alarm Set 2
Code 12
Type: Raw
Unkonwn function
Work Mode
Code 14
Type: Enum
{
"range": [
"charge_now",
"charge_pct",
"charge_energy",
"charge_schedule"
]
}
Balance Energy
Code 15
Type: Integer
{
"unit": "kW·h",
"min": 0,
"max": 99999999,
"scale": 3,
"step": 1
}
Clear Energy
Code 16
This will clear registered kwh displayed by the charger.
Type: Boolean
"{true,false}"
Switch:
Code 18
Type: Boolean
"{true,false}"
System Version
Code 23
Type: Boolean
"{true,false}"
Once Charge Energy
Code 25
Type: Integer
{
"unit": "kW·h",
"min": 1,
"max": 999999,
"scale": 2,
"step": 1
}
Online State
Code 27
Unknown - does not output value in tuya cloud
Equipment Status
Code 101
Connect/No Connect - meaning, if the charger detects and locks with the EV.
Set Charging Current
Code 102
8A/10A/13A/16A/25A/32Amp is what the manual says, but I’ve been able to change it in intervals of 1a from 8a to 32a
充电电流确认
Code 103
I think this is a confirmation of what selected Amp you’re currently using, or wish to set from listed above.
Delayed Charging
Code 104
In hours (devided by 10) - This is the option you set if you ie. want to delay charging by x hours.
VerificationSet
Code 105
Unknown function - My guess is that its a swhich you can enable if you want the charger to "learn" an RFID card, which have to be closed once done.
Energy
Code 106
In kwh. Ie. 0.00 kwh or 1.70 kwh used by the current charge session
Voltage
Code 107
In volt. Ie. 228V
Current
Code 108
Current current, ie. 0.00A (when not charging) or 15.8A (when charging)
Power
Code 109
In kwh. Ie. 0.00 kw or 5.60 kw
Temperature
Code 110
In Celsius, ie. 37.9 °C. This number needs to be devided by 10 since it spits out “379” for 37.9 degrees c
Set Charging Current
Code 111
8A/10A/13A/16A/25A/32Amp
Charging Selection
Code 112
Manual Stop charging / charging – like a switch
Time
Code 113
Delayed charging remaining (in hours, divided by 10) If you sat it at 4 hours beforehand, this will now show 400 or 399
Timed Charging
Code 114
Unknown
Other DP's with unkown DP_ID
Found these whilst browsing "Control Device with DP".
DeviceState
Type: Enum
{
"range": [
"no_connect",
"connect",
"charing",
"wait_rfid",
"finish",
"wait_charing",
"error"
]
}
Set32A
Type: Intiger
{
"unit": "A",
"min": 8,
"max": 32,
"scale": 0,
"step": 1
}
Set32Or16
Boolean
"{true,false}"
SetDelayTime
Type: Integer
{
"unit": "H",
"min": 0,
"max": 15,
"scale": 0,
"step": 1
}
IDVerificationSet
Type: Boolean
"{true,false}
Set16A
Type: Integer
{
"unit": "",
"min": 8,
"max": 16,
"scale": 0,
"step": 1
}
DeviceKwh
Type: Integer
{
"unit": "Kwh",
"min": 0,
"max": 10000,
"scale": 1,
"step": 1
}
InputVoltage
Type: Integer
{
"unit": "V",
"min": 0,
"max": 500,
"scale": 0,
"step": 1
}
OutCurrent
Type: Integer
{
"unit": "A",
"min": 0,
"max": 600,
"scale": 1,
"step": 1
}
DeviceKw
Type: Integer
{
"unit": "Kw",
"min": 0,
"max": 1000,
"scale": 1,
"step": 1
}
DeviceTemp
Type: Integer
{
"unit": " °C",
"min": -100,
"max": 1500,
"scale": 1,
"step": 1
}
SwipRfid ## note - this EV charger does not have RFID
Type: Boolean
"{true,false}"
SetDefineTime
Type: Integer
{
"unit": "H",
"min": 0,
"max": 15,
"scale": 0,
"step": 1
}
# Product ID
{
"code": 28841002,
"msg": "No permissions. Your subscription to cloud development plan has expired.",
"success": false,
"t":<PHONE_NUMBER>186,
"tid": "d45d9d965cb811eebb19ce5fa22f6e19"
}
Link: https://www.aliexpress.com/item/1005005504929776.html?spm=a2g0o.order_list.order_list_main.48.4dbb1802z6vKSl
Extra things i had exported through the LocalKey extraction:
iconUrl https://images.tuyaeu.com/smart/icon/bay16226250696545rLI/35878abfb9cc339489fd3272154de112.png
verSw 2.5.2
MCU: v1.0.0
productid hytatexziwaifxj1
Product "菲尔雷交流充电盒"
It updates voltage and state every 4 seconds

Have a very similar charger (feyree 32A 240V) and the datapoints are identical.
2023-10-09 00:12:14.879 WARNING (MainThread) [custom_components.tuya_local.config_flow] Device matches loratap_zigbee_six_switch with quality of 8%. DPS: {"updated_at":<PHONE_NUMBER>.7265275, "10": 0, "101": "charing", "102": 32, "104": 0, "106": 12, "107": 221, "108": 307, "109": 67, "110": 301, "112": false, "113": 1, "114": 0}
2023-10-09 00:12:14.884 WARNING (MainThread) [custom_components.tuya_local.config_flow] Report this to https://github.com/make-all/tuya-local/issues/

@ve1koz111, if you have access to the iot.tuya.com developer portal, perhaps you can get the results of the Query Things Data Model API call (in API Explorer) for your device, as it will help with clarifying some of the details of the data points.

Idk if this helps.
This is the official "Tuya" app, It tells me "AC Charging Box (unsupported) by Tuya"
In the textfile it gives me through the diagnostic is this:
},
"data": {
"endpoint": "https://openapi.tuyaeu.com",
"auth_type": 0,
"country_code": "45",
"app_type": "smartlife",
"mqtt_connected": true,
"disabled_by": null,
"disabled_polling": false,
"name": "AC charging box",
"model": "",
"category": "qccdz",
"product_id": "hytatexziwaifxj1",
"product_name": "AC charging box",
"online": false,
"sub": false,
"time_zone": "+02:00",
"active_time": "2023-10-07T11:48:11+00:00",
"create_time": "2023-10-07T11:48:11+00:00",
"update_time": "2023-10-08T08:52:34+00:00",
"function": {
"fault": {
"type": "Bitmap",
"value": {
"label": [
"ERR_UVP",
"ERR_OVP",
"ERR_OCP",
"ERR_PE",
"ERR_TEMP",
"ERR_CP",
"ERR_LEAK",
"ERR_RE_SCK",
"ERR_PE2",
"TEMP_PLUG",
"TEMP_PCB",
"TEMP_CORE",
"ESB",
"PE_SCK",
"LEAK_SCK",
"TEMP_SCK"
],
"maxlen": 16
}
},
"alarm_set_1": {
"type": "Raw",
"value": {}
},
"alarm_set_2": {
"type": "Raw",
"value": {}
},
"work_mode": {
"type": "Enum",
"value": {
"range": [
"charge_now",
"charge_pct",
"charge_energy",
"charge_schedule"
]
}
},
"clear_energy": {
"type": "Boolean",
"value": {}
},
"switch": {
"type": "Boolean",
"value": {}
},
"online_state": {
"type": "Enum",
"value": {
"range": [
"online",
"offline"
]
}
},
"Set32A": {
"type": "Integer",
"value": {
"unit": "A",
"min": 8,
"max": 32,
"scale": 0,
"step": 1
}
},
"SetDelayTime": {
"type": "Integer",
"value": {
"unit": "H",
"min": 0,
"max": 15,
"scale": 0,
"step": 1
}
},
"IDVerificationSet": {
"type": "Boolean",
"value": {}
},
"Set16A": {
"type": "Integer",
"value": {
"unit": "",
"min": 8,
"max": 16,
"scale": 0,
"step": 1
}
},
"SwipRfid": {
"type": "Boolean",
"value": {}
},
"SetDefineTime": {
"type": "Integer",
"value": {
"unit": "H",
"min": 0,
"max": 15,
"scale": 0,
"step": 1
}
}
},
"status_range": {
"work_state": {
"type": "Enum",
"value": {
"range": [
"charger_free",
"charger_insert",
"charger_free_fault",
"charger_wait",
"charger_charging",
"charger_pause",
"charger_end",
"charger_fault"
]
}
},
"fault": {
"type": "Bitmap",
"value": {
"label": [
"ERR_UVP",
"ERR_OVP",
"ERR_OCP",
"ERR_PE",
"ERR_TEMP",
"ERR_CP",
"ERR_LEAK",
"ERR_RE_SCK",
"ERR_PE2",
"TEMP_PLUG",
"TEMP_PCB",
"TEMP_CORE",
"ESB",
"PE_SCK",
"LEAK_SCK",
"TEMP_SCK"
],
"maxlen": 16
}
},
"alarm_set_1": {
"type": "Raw",
"value": {}
},
"alarm_set_2": {
"type": "Raw",
"value": {}
},
"work_mode": {
"type": "Enum",
"value": {
"range": [
"charge_now",
"charge_pct",
"charge_energy",
"charge_schedule"
]
}
},
"balance_energy": {
"type": "Integer",
"value": {
"unit": "kW\u00b7h",
"min": 0,
"max": 99999999,
"scale": 3,
"step": 1
}
},
"clear_energy": {
"type": "Boolean",
"value": {}
},
"switch": {
"type": "Boolean",
"value": {}
},
"system_version": {
"type": "String",
"value": {
"maxlen": 255
}
},
"charge_energy_once": {
"type": "Integer",
"value": {
"unit": "kW\u00b7h",
"min": 1,
"max": 999999,
"scale": 2,
"step": 1
}
},
"online_state": {
"type": "Enum",
"value": {
"range": [
"online",
"offline"
]
}
},
"DeviceState": {
"type": "Enum",
"value": {
"range": [
"no_connect",
"connect",
"charing",
"wait_rfid",
"finish",
"wait_charing",
"error"
]
}
},
"Set32A": {
"type": "Integer",
"value": {
"unit": "A",
"min": 8,
"max": 32,
"scale": 0,
"step": 1
}
},
"Set32Or16": {
"type": "Boolean",
"value": {}
},
"SetDelayTime": {
"type": "Integer",
"value": {
"unit": "H",
"min": 0,
"max": 15,
"scale": 0,
"step": 1
}
},
"IDVerificationSet": {
"type": "Boolean",
"value": {}
},
"DeviceKwh": {
"type": "Integer",
"value": {
"unit": "Kwh",
"min": 0,
"max": 10000,
"scale": 1,
"step": 1
}
},
"InputVoltage": {
"type": "Integer",
"value": {
"unit": "V",
"min": 0,
"max": 500,
"scale": 0,
"step": 1
}
},
"OutCurrent": {
"type": "Integer",
"value": {
"unit": "A",
"min": 0,
"max": 600,
"scale": 1,
"step": 1
}
},
"DeviceKw": {
"type": "Integer",
"value": {
"unit": "Kw",
"min": 0,
"max": 1000,
"scale": 1,
"step": 1
}
},
"DeviceTemp": {
"type": "Integer",
"value": {
"unit": " \u00b0C",
"min": -100,
"max": 1500,
"scale": 1,
"step": 1
}
},
"Set16A": {
"type": "Integer",
"value": {
"unit": "",
"min": 8,
"max": 16,
"scale": 0,
"step": 1
}
},
"SwipRfid": {
"type": "Boolean",
"value": {}
},
"ctime": {
"type": "Integer",
"value": {
"unit": "H",
"min": 0,
"max": 240,
"scale": 1,
"step": 1
}
},
"SetDefineTime": {
"type": "Integer",
"value": {
"unit": "H",
"min": 0,
"max": 15,
"scale": 0,
"step": 1
}
}
},
"status": {
"work_state": "charger_free",
"fault": 0,
"alarm_set_1": "",
"alarm_set_2": "",
"work_mode": "charge_now",
"balance_energy": 0,
"clear_energy": false,
"switch": false,
"system_version": "",
"charge_energy_once": 1,
"online_state": "online",
"DeviceState": "connect",
"Set32A": 8,
"Set32Or16": true,
"SetDelayTime": 0,
"IDVerificationSet": false,
"DeviceKwh": 0,
"InputVoltage": 222,
"OutCurrent": 0,
"DeviceKw": 0,
"DeviceTemp": 255,
"Set16A": 8,
"SwipRfid": false,
"ctime": 0,
"SetDefineTime": 0
},
"home_assistant": {
"name": "AC charging box",
"name_by_user": null,
"disabled": false,
"disabled_by": null,
"entities": []
}
}
}

Thanks, yes this helps, the only thing missing is dp ids, which can be correlated from above, but that also indicates that it is likely cloud API docs, so if any of the enum values differ between cloud and local protocol it won't quite work (but probably 90% chance it will be OK).

I have added support for the dps that are showing in the logs.  There are others which seem to be for setting different charging modes - I don't know if they are missing from the log because the charger does not support them, or because they are mode dependant.  They have been added as optional attributes, mostly of the Status entity, so they are available for monitoring, if you can confirm that the device does send them in some modes, I can separate them into separate entities, particularly the config options that you want to be able to change rather than just monitor.

Thank you @make-all This was very quick! I will await release so i can test and give a comprehensive repport if i find bugs or such.
Thank you again.
Kind regards!

Hello,
I have the same issue than ve1koz111. When I try to configure, my device is seen as a lora tap 6 switches.
The query you requests (query thigs data model) gives me :
{
"result": {
"model": "{"modelId":"000004b5t9","services":[{"actions":[],"code":"","description":"","events":[],"name":"默认服务","properties":[{"abilityId":3,"accessMode":"ro","code":"work_state","description":"","extensions":{"iconName":"icon-zhuangtai"},"name":"工作状态","typeSpec":{"range":["charger_free","charger_insert","charger_free_fault","charger_wait","charger_charging","charger_pause","charger_end","charger_fault"],"type":"enum","typeDefaultValue":"charger_free"}},{"abilityId":10,"accessMode":"ro","code":"fault","description":"","extensions":{"iconName":"icon-baojing","scope":"fault"},"name":"故障告警","typeSpec":{"label":["err_leak","err_cp","err_temp","warn_a_uvp","warn_b_uvp","warn_c_uvp","err_a_ovp","err_b_ovp","err_c_ovp","err_ocp","err_10","err_11","err_esb","warn_pe_sck","err_leak_sck"],"maxlen":15,"type":"bitmap","typeDefaultValue":0}},{"abilityId":11,"accessMode":"rw","code":"alarm_set_1","description":"1.1 名称：告警设置1\n1.2 含义：用于告知面板有哪些告警，对每个告警项进行设置，例如是否动作，动作阈值数值设置。\n2 格式：HEX格式，大端模式, 总告警的数量4字节= 设置告警总长度。\n3，报文格式\n每个告警由4个字节组成，第1个字节（表示该告警存在）；第2个字节（发生此告警时，设备是否告警及保护动作；第3、4字节：设置告警阈值","extensions":{"iconName":"icon-dp_warming"},"name":"告警设置1","typeSpec":{"maxlen":128,"type":"raw"}},{"abilityId":12,"accessMode":"rw","code":"alarm_set_2","description":"1.1 名称：告警设置2\n1.2 含义：用于告知面板有哪些告警，对每个告警项进行设置，例如是否动作，动作阈值数值设置。\n2 格式：HEX格式，大端模式, 总告警的数量4字节= 设置告警总长度。\n3，报文格式\n每个告警由4个字节组成，第1个字节（表示该告警存在）；第2个字节（发生此告警时，设备是否告警及保护动作；第3、4字节：设置告警阈值","extensions":{"iconName":"icon-dp_warming"},"name":"告警设置2","typeSpec":{"maxlen":128,"type":"raw"}},{"abilityId":14,"accessMode":"rw","code":"work_mode","description":"","extensions":{"iconName":"icon-dp_mode","trigger":"direct"},"name":"工作模式","typeSpec":{"range":["charge_now","charge_pct","charge_energy","charge_schedule"],"type":"enum","typeDefaultValue":"charge_now"}},{"abilityId":15,"accessMode":"ro","code":"balance_energy","description":"","extensions":{"iconName":"icon-dp_lightning"},"name":"剩余可用电量","typeSpec":{"max":99999999,"min":0,"scale":3,"step":1,"type":"value","typeDefaultValue":0,"unit":"kW·h"}},{"abilityId":16,"accessMode":"rw","code":"clear_energy","description":"","extensions":{"iconName":"icon-dp_lightning"},"name":"电量清零","typeSpec":{"type":"bool","typeDefaultValue":false}},{"abilityId":18,"accessMode":"rw","code":"switch","description":"","extensions":{"iconName":"icon-dp_power2","trigger":"direct"},"name":"开关","typeSpec":{"type":"bool","typeDefaultValue":false}},{"abilityId":23,"accessMode":"ro","code":"system_version","description":"1.1 名称：充电桩软硬件版本号\n1.2 含义：硬件、固件等当前版本号\n2 格式\n  数据类型： string\n  功能属性： 最大长度128字节\n4 报文格式\n   举例：\"HW V1.0,SW V1.0.3\"","extensions":{"iconName":"icon-dp_mode"},"name":"系统版本","typeSpec":{"maxlen":255,"type":"string","typeDefaultValue":""}},{"abilityId":25,"accessMode":"ro","code":"charge_energy_once","description":"","extensions":{"iconName":"icon-Ele","attribute":"2048","trigger":"direct"},"name":"单次充电量","typeSpec":{"max":999999,"min":1,"scale":2,"step":1,"type":"value","typeDefaultValue":1,"unit":"kW·h"}},{"abilityId":27,"accessMode":"rw","code":"online_state","description":"","extensions":{"iconName":"icon-dp_updown"},"name":"在线状态","typeSpec":{"range":["online","offline"],"type":"enum","typeDefaultValue":"online"}},{"abilityId":101,"accessMode":"ro","code":"DeviceState","description":"","name":"设备状态","typeSpec":{"range":["no_connet","connect","charing","wait_rfid","finish","wait_charing","error"],"type":"enum","typeDefaultValue":"no_connet"}},{"abilityId":102,"accessMode":"ro","code":"A_Voltage","description":"","name":"A相电压","typeSpec":{"max":3200,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"V"}},{"abilityId":103,"accessMode":"ro","code":"B_Voltage","description":"","name":"B相电压","typeSpec":{"max":3200,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"V"}},{"abilityId":104,"accessMode":"ro","code":"C_Voltage","description":"","name":"C相电压","typeSpec":{"max":3200,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"V"}},{"abilityId":105,"accessMode":"ro","code":"A_Current","description":"","name":"A相电流","typeSpec":{"max":600,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"A"}},{"abilityId":106,"accessMode":"ro","code":"B_Current","description":"","name":"B相电流","typeSpec":{"max":600,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"A"}},{"abilityId":107,"accessMode":"ro","code":"C_Current","description":"","name":"C相电流","typeSpec":{"max":600,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"A"}},{"abilityId":108,"accessMode":"ro","code":"PhaseFlag","description":"","name":"单三相接入标志","typeSpec":{"range":["Single_phase","Three_phase","No_phase","Phase_err"],"type":"enum","typeDefaultValue":"Single_phase"}},{"abilityId":109,"accessMode":"ro","code":"DeviceKw","description":"","name":"设备总功率","typeSpec":{"max":1000,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"kW"}},{"abilityId":110,"accessMode":"ro","code":"DeviceTemp","description":"ID-111 为设备温度2 备用 ","name":"设备温度1","typeSpec":{"max":1050,"min":-300,"scale":1,"step":1,"type":"value","typeDefaultValue":-300,"unit":"℃"}},{"abilityId":111,"accessMode":"ro","code":"DeviceTemp2","description":"设备温度2 备用","name":"设备温度2","typeSpec":{"max":1050,"min":-300,"scale":1,"step":1,"type":"value","typeDefaultValue":-300,"unit":"℃"}},{"abilityId":112,"accessMode":"ro","code":"DeviceKwh","description":"一次充电的累计功率，拔枪后清零。","name":"累计功率","typeSpec":{"max":10000,"min":0,"scale":1,"step":1,"type":"value","typeDefaultValue":0,"unit":"kWh"}},{"abilityId":113,"accessMode":"ro","code":"DeviceMaxSetA","description":"","name":"设备最大充电电流","typeSpec":{"range":["Max16A","Max32A","Max40A","Max50A"],"type":"enum","typeDefaultValue":"Max16A"}},{"abilityId":114,"accessMode":"rw","code":"Set16A","description":"","name":"设置电流(16A)","typeSpec":{"max":16,"min":8,"scale":0,"step":1,"type":"value","typeDefaultValue":8,"unit":"A"}},{"abilityId":115,"accessMode":"rw","code":"Set32A","description":"","name":"设置电流(32A)","typeSpec":{"max":32,"min":8,"scale":0,"step":1,"type":"value","typeDefaultValue":8,"unit":"A"}},{"abilityId":116,"accessMode":"rw","code":"Set40A","description":"","name":"设置电流(40A)","typeSpec":{"max":40,"min":12,"scale":0,"step":1,"type":"value","typeDefaultValue":12,"unit":"A"}},{"abilityId":117,"accessMode":"rw","code":"spare1","description":"","name":"设置电流(50A)","typeSpec":{"max":50,"min":12,"scale":0,"step":1,"type":"value","typeDefaultValue":12,"unit":""}},{"abilityId":118,"accessMode":"rw","code":"SetDelayTime","description":"","name":"延时充电","typeSpec":{"max":15,"min":0,"scale":0,"step":1,"type":"value","typeDefaultValue":0,"unit":"H"}},{"abilityId":119,"accessMode":"rw","code":"SetDefineTime","description":"","name":"定时充电","typeSpec":{"max":15,"min":0,"scale":0,"step":1,"type":"value","typeDefaultValue":0,"unit":"H"}},{"abilityId":120,"accessMode":"ro","code":"Ctime","description":"","name":"充电时间","typeSpec":{"maxlen":255,"type":"string","typeDefaultValue":""}},{"abilityId":121,"accessMode":"rw","code":"spare2","description":"","name":"备用2","typeSpec":{"type":"bool","typeDefaultValue":false}},{"abilityId":122,"accessMode":"rw","code":"IDVerificationSet","description":"","name":"身份验证","typeSpec":{"type":"bool","typeDefaultValue":false}},{"abilityId":123,"accessMode":"rw","code":"spare3","description":"","name":"备用3","typeSpec":{"type":"bool","typeDefaultValue":false}},{"abilityId":124,"accessMode":"rw","code":"ChargingOperation","description":"","name":"充电操作","typeSpec":{"range":["OpenCharging","CloseCharging","WaitOperation"],"type":"enum","typeDefaultValue":"OpenCharging"}}]}]}"
},
"success": true,
"t":<PHONE_NUMBER>048,
"tid": "06c42b0c690611ee95454a52bad04d54"
}
Does it help ?
Kind regards !

I found this thread while looking for ideas on how to setup user selectable kw.hr charge sessions.
that said, I think integration with home assistant will be easier.
just dropping these notes in the hope someone else finds it useful. (issue closed before I found this thread)
I bought this one on aliexpress, paid extra to have an Australian 5 pin 3 phase plug wired on prior to delivery. Has worked well for a couple of months now.
https://www.aliexpress.com/item/1005006061509862.html
Similar charger on ebay
https://www.ebay.com.au/itm/286059027323

Hello. I have this wallbox: https://www.aliexpress.com/item/1005007333648233.html?spm=a2g0o.order_list.order_list_main.11.210d1802w109Jv
The Tuya app works, the iot account too, I have all the keys and ids, but I can't add the device to the home assistant. It shows:
feyree (unsupported) (xiptqjoa8q9ltqhr)
manufacturer: Tuya
I can't add the device via local integration either, the message appears:
Find the device's IP address
The Tuya cloud doesn't share local IP addresses
Please help, I've spent many hours on this without any results.

If you have attempted to add this device via this integration, then you need to check in Settings / System / Logs, and paste any Warning messages related to this integration with your report here.
We can't help if all we have is a vague description of things not working, much of which does not appear to be related to this integration.

Find the device's IP address
The Tuya cloud doesn't share local IP addresses

Thank you. After trying to add a device, this entry appears in the logs.
Rejestrator: aiohttp.server
Źródło: /usr/local/lib/python3.13/site-packages/aiohttp/web_protocol.py:451
Pierwsze zdarzenie: 03:20:45 (4 zdarzenia)
Ostatnio zalogowany: 03:52:47
Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.13/site-packages/aiohttp/web_protocol.py", line 480, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/site-packages/aiohttp/web_app.py", line 569, in _handle
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 92, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 83, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 26, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 86, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 242, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 32, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 73, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin
return await func(self, request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 222, in post
return await super().post(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 74, in wrapper
return await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 122, in post
result = await self._flow_mgr.async_configure(flow_id, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 367, in async_configure
result = await self._async_configure(flow_id, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 414, in _async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
flow, cur_step["step_id"], user_input
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 517, in _async_handle_step
result: _FlowResultT = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/tuya_local/config_flow.py", line 297, in async_step_search
self.__cloud_device["local_product_id"] = local_device["productKey"]
~~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'productKey'

You are getting an error in unreleased code. It may be better if you stick to the released version rather than pulling directly from the development head.

Thank you. I used version 2024.11.4.
This time the error did not pop up immediately, but something was happening. After trying to integrate using the application, a message appeared saying that the application does not provide IP and automatically went to manual configuration. Unfortunately, after entering the data, a login error.
Register: custom_components.tuya_local.device
Source: custom_components/tuya_local/device.py:475
integration: Tuya Local (documentation, Problems)
First event: 12:11:52 (2 events)
Last logged in: 12:11:56
Test protocol error 901: Network Error: Unable to Connect
I checked the keys many times, but I am not sure about the node_id, it is not available anywhere in the portal, so I entered the uuid.

You should leave the node_id blank if you are connecting directly to a WiFi device. node_id is only for subdevices that are connected via hubs.

I also tried with empty node_id field, with local and external IP, it always ends with this error.
This error comes from custom integration.
Logger: custom_components.tuya_local.device
Source: custom_components/tuya_local/device.py:475
integration: Tuya Local (documentation, Problems)
First event: 12:21:41 (3 events)
Last logged in: 12:23:06
Test protocol error 901: Network Error: Unable to Connect

Device parameters downloaded from the portal. Maybe I'm doing something wrong, but I'm a fairly informed user.

And this is what it looks like in HA.
Message says: "Cannot connect to device with this data. This may be a temporary problem or the data may be invalid."

The only thing I can see is that you have left the protocol as auto, which might not always work. It would be better to find out what protocol version your device is.
Also, your IP address is 192.168.2.x.  If this is a different /24 than your Home Assistant server, then check that there is not a routing issue between the subnets.

I have tried all protocol versions. :(
Feyree and Home assistant are on the same subnet.

You could try pairing it with the app again to get another local key issued.  I see there is a # character in the current local key. There have been multiple reports from users suspecting "special characters in local keys", a specific problem has never been found, but if any character is likely to cause problems, the Python comment character would be high on the list.

I've done this before, but I don't have any other ideas, so I'll try again.
Maybe I could do it with the smart-life app instead of tuya smart? Would I have to connect the smart-life app to the developer portal then?
It's also very strange that the standard tuya cloud integration shows feyree as unavailable and there are no entities.

Now you are getting some log messages, showing that the basic communication is working. However your device appears to be incompatible with any of the implemented devices so far.

So we need to add a completely new device to the integration? Do I have to do it myself or can I generate a set of commands from the tuya portal and you will be able to implement it?

File a New Device request under Issues, giving the logs at the end of your comment above, and QueryThingsDataModel API result from the tuya developer portal.

Done. Thank You. #2628


Support both versions of AEM dispatcher config in launcher

remain current behavior - scaffold GAP configuration without AEM dispatcher files when there is no archetype.properties[aemVersion] property,
detect AEM dispatcher config version in GAP launcher by reading archetype.properties[aemVersion] property (see https://github.com/wttech/gradle-aem-plugin/blob/master/src/main/kotlin/com/cognifide/gradle/aem/common/mvn/MvnBuild.kt#L42),
make AEM dispatcher config functional by supplementing env/runtime specific config files (mostly adding missing and updating only when really required dispatcher config files).

to be considered:

https://github.com/adobe/aem-project-archetype/blob/develop/src/main/resources/META-INF/archetype-post-generate.groovy#L97-L101
https://github.com/adobe/aem-project-archetype/tree/develop/src/main/archetype/dispatcher.ams
https://github.com/adobe/aem-project-archetype/tree/develop/src/main/archetype/dispatcher.cloud

All makes sense


postgis Extension applying issue after migrating to 2.2 version

We have a code that's apply postgis extension to Db (google cloud pg sql instance)
code is the following:
protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //activating PostGis extension
            modelBuilder.HasPostgresExtension("postgis");
            modelBuilder.HasPostgresExtension("postgis_topology");
....

And there is generated migrations. It's all works fine on 2.1.2 version.
However after migrating to 2.2 version there is an error occurred when trying to apply migrations
Applying migration '20171123204650_Initial'.
Failed executing DbCommand (35ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE EXTENSION IF NOT EXISTS postgis VERSION " ''";
CREATE EXTENSION IF NOT EXISTS postgis_topology VERSION " ''";
Npgsql.PostgresException (0x80004005): 58P01: could not stat file "/share/extension/postgis-- ''.sql": No such file or directory
   at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1032
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 489
   at Npgsql.NpgsqlDataReader.NextResult() in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 332
   at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1218
   at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1042
   at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1025
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
58P01: could not stat file "/share/extension/postgis-- ''.sql": No such file or directory

You seem to have a badly-scaffolded migration from a previous version of the provider.. Can you please open the relevant migration file and make sure it looks as follows:
migrationBuilder.AlterDatabase()
    .Annotation("Npgsql:PostgresExtension:postgis", ",,");

There should be exactly two commas in the second string, no spaces or anything.

I ran into this identical issue after version upgrade and am correcting my older migrations.
Is it of any use to edit the related *.Designer.cs files where the incorrect encoding appears?  This appears in all designer files since the first use of the extension.
Also, in my most recent migration, created after the version  upgrade, I see this:
migrationBuilder.AlterDatabase()
   ...
   .Annotation("Npgsql:PostgresExtension:uuid-ossp", ",,")
   .OldAnnotation("Npgsql:PostgresExtension:uuid-ossp", "'uuid-ossp', '', ''");

Please confirm that I should remove both lines there (for completeness)?
Thanks.


fix: check first the type of the input_shape before get the shape. Al…

I think found some errors when do verify functions:

The if-else statements when checking the model_name broken at the end, so it will always return error when you use model_name parameter
When I tried to use FbDeepFace model, turns out the input shape of the input_layer is a list ex: [ (None, 192, 192, 3) ] . So the code breaks when using the DeepFace.

thank you for your contribution

When I build a model and print its first layer's input shape, then it returns: (None, 224, 224, 3) but you got [(None, 224, 224, 3)]. That's why, I need to fix the code as illustrated below. Your modification throws exception in my environment. I would like to inform you.
input_shape = custom_model.layers[0].input_shape

if type(input_shape) == list: # [(None, 224, 224, 3)]
	input_shape = input_shape[0][1:3]
else: # (None, 224, 224, 3)
	input_shape = input_shape[1:3]


I would like to sum up multiple metrics (the same metric from multiple servers) and save to another metric. I would like to keep the original metrics from multiple servers and the sum alongside them.
I read the document of the original carbon and found it is supported in aggregation-rules.conf.
So I wish a support of aggregation-rules.conf in go-carbon too!
If you are busy, I will try to write a pull request for that.

Hi,
Try one of the external aggregator:
https://github.com/grobian/carbon-c-relay
https://github.com/github/brubeck
https://github.com/etsy/statsd
https://github.com/bitly/statsdaemon
I do not have plan to realize aggregation inside carbon.

@lomik Thanks for your suggestion.
I will look into those aggregators.

I forgot about https://github.com/armon/statsite

Not planned. Use external aggregator

how to solve this problem，at last

@superman1qaz Use carbon-c-relay, carbon-relay-ng or statsd


fix: support string and Buffer bodies in Response constructor. Fixes #38.

Thanks, if this includes #72 and required less change to existing code, I may pick this PR instead.

this is now supported in v1.4.0 :)


#483 Use correct endpoint for moving Folders and Versioned Folders

Fixes #483 so that Versioned Folders can now be moved after they have been finalised.
Depends on PR MauroDataMapper/mdm-resources#52

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Fix warnings

Removes unused dependencies in src/client, as well as somewhat redundant comments
Include #[allow(dead_code] attribute for private helper function mrid_as_string()

FINALLY!


Deployed configurations/templates do not automatically appear on cluster peers

Is your feature request related to a problem? Please describe.
Yes, when I deploy an application via FAST on a cluster member, I do not automatically see the application in FAST on the cluster peer. I have to restart restnoded to view synced information.
Describe the solution you'd like
FAST on the standby device should periodically refresh or refresh by triggered action so that full visibility and control is fully synced between peers.
Describe alternatives you've considered
restart sys service restnoded as nec'y
Additional context
None.

Thanks for your feedback. We are tracking this internally as MYSTIQUE-411

This enhancement was included with Release 1.10.


Event docs on the Database listener lacks any info about the list of types

I see in the main docs that I can listen to '**', otherwise, I can't figure out what's available.

here's an example https://textileio.github.io/js-threads/classes/_textile_threads_database.database.html#on
actually, clicking on the event type takes you to nowhere

Ah yes, the docs got removed from the main repo, and now only appears to exist here: https://docs.textile.io/threads/#listen. We should maybe just add a link on the readme to the events that https://github.com/EventEmitter2/EventEmitter2 supports? I don't think our tsdocs setup supports linking to external deps...

We could also maybe show some of these ones somewhere: https://github.com/textileio/js-threads/blob/master/packages/database/src/db.spec.ts#L204?

Adding some doc strings to the database class. But additional details should be added to docs.textile.io.

I think this has been addressed to some degree via doc strings and https://github.com/textileio/docs/blob/master/docs/threads/index.md#listen, right @andrewxhill?

Please reopen if needed.


Bug: V4 - Notes with embedded notes in them don't show any Breadcrumbs views at the top of the note (Page View)

Describe the bug
Notes with embeds don't show "Page View" at the top of the note in Obsidian's Reading View (but they are shown in Editing View).
To Reproduce
Steps to reproduce the behavior:

Make a note that embeds another note ![[random note here]]
Add things that would normally make Breadcrumbs' Page View at the top

Expected behavior
Page View should show.
Desktop:

OS: Windows 11
Version: 4.0.23-beta

+1 recreated on my device
so weird that it's JUST the pages with embeds

Fixed as of 4.0.45-beta. Great work!


Question on Gpu Glyph Compiler

I found out your implementation of Gpu Glyph Compiler very interesting. What king of algorithm did you use here? Is it your kind of personal approach?

The algorithm I used for the GPU glyph font and compiler are not mine. The algorithm is from Will Dobbie's GPU text rendering article which goes into detail on how it works. Another good code resource based off of Will's algorithm is GlLabel.

2D was the primary goal of the framework, mainly because that is all I used for my personal games. But I have been thinking adding 3D support and such as more of a long term thing after 2D is tightened up quit a bit. It is definitely a possibility.
Also feel free to use the discussions Q&A for any other questions and such and I will gladly answer!


Walkthrough/tour of the app?

https://github.com/JohnCoene/cicerone
We discussed that if we do do this, easiest thing to do would be to have a button somewhere where a user could turn it on, rather than having to track user state (e..g., only show for new users, go away after a certain amount of time, etc. ) as we don't have that infra set up
cc @seankross @codeebeaker

Really love this idea! The GUI update would be a good opportunity to add this in, putting as v1.2 for now, but very open to pushing it to v1.3 if we feel that's too quick.

Would love to get @codebeaker's take on this as well.


Test build pipeline with clean build

Pull Request Template
Description
Testing the build pipeline with clean build.

:shipit:

It seems have fixed itself.


[Bug]: AttributeError: 'NoneType' object has no attribute 'llm'

Bug Description
When I change from using as_query_engine to as_chat_engine using the new method with no Service Context I get he following.
AttributeError: 'NoneType' object has no attribute 'llm'
Version
0.10
Steps to Reproduce
This code works fine
query_engine = index.as_query_engine(streaming=True)
response = query_engine.query("What did the author do growing up?")
This code results in the error
query_engine = index.as_chat_engine()
response = query_engine.chat("What did the author do growing up?")
Relevant Logs/Tracbacks
Traceback (most recent call last):
  File "/home/runner/LllamaIndex/main.py", line 23, in <module>
    query_engine = index.as_chat_engine()
  File "/home/runner/LllamaIndex/.pythonlibs/lib/python3.10/site-packages/llama_index/core/indices/base.py", line 423, in as_chat_engine
    llm = service_context.llm
AttributeError: 'NoneType' object has no attribute 'llm'

It should by default set a mode if not passed though

@chowgi this should be fixed, I will be releasing a new version shortly

        # get LLM
        # service_context = cast(ServiceContext, kwargs["service_context"])
        # llm = service_context.llm

Commenting out those two lines of code worked for me.

This is fixed in v0.10.3 of llama-index (and llama-index-core)
pip install -U llama-index llama-index-core

This is fixed in v0.10.3 of llama-index (and llama-index-core)
pip install -U llama-index llama-index-core

Thanks!

Still have the same issue


[arm64] Current status on rpi4

[ ] The app takes up only 2/3 of the display.

[ ] Building native tpk fails with the "file format not recognized" error.
$ flutter-tizen run
...
  Building target: Debug/runner
  Invoking: C/C++ Linker
"/home/swift/tizen-studio/tools/smart-build-interface/../llvm-10/bin/clang++" -o ./Debug/runner @./Debug/target_objs.file   -Llib
-L"/home/swift/Git/flutter/dummy/arm64_native/tizen/lib" -Wl,--no-undefined  -Wl,-E -target arm-tizen-linux-gnueabi -gcc-toolchain
"/home/swift/tizen-studio/tools/smart-build-interface/../arm-linux-gnueabi-gcc-9.2/" -ccc-gcc-name arm-linux-gnueabi-g++ -march=armv7-a -mfloat-abi=softfp
-mfpu=vfpv3-d16 -mtune=cortex-a8 -Wl,-z,relro,--as-needed  -Xlinker --as-needed -pie -lpthread
--sysroot="/home/swift/tizen-studio/tools/smart-build-interface/../../platforms/tizen-5.5/wearable/rootstraps/wearable-5.5-device.core" -Xlinker
--version-script="./.exportMap" -L/home/swift/tizen-studio/platforms/tizen-5.5/wearable/rootstraps/wearable-5.5-device.core/usr/lib @./Debug/platform_libs.file
-Xlinker -rpath='$ORIGIN/../lib' -Werror-implicit-function-declaration -lflutter_tizen -L/home/swift/Git/flutter/dummy/arm64_native/tizen/lib
-I/home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/include
-I/home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/public -I/home/swift/Git/flutter/flutter-tizen/embedding/cpp/include -DCOMMON_PROFILE
-Wl,-unresolved-symbols=ignore-in-shared-libs
lib/libflutter_tizen.so: file not recognized: file format not recognized
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [/home/swift/tizen-studio/tools/ide/resources/native/Build/makefile.mk:135: Debug/runner] Error 1
make[1]: Leaving directory '/home/swift/Git/flutter/dummy/arm64_native/tizen'
make: *** [/home/swift/tizen-studio/tools/ide/resources/native/Build/makefile:27: app_build] Error 2
Total time: 00:00:04.719
``

[x] Set up continuous integration for arm64 engine release.

The second issue could have been resolved by adding the Tizen 6.0 aarch64 rootstrap (#84), but still there's another issue:
...
  Building file: /home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/core_implementations.cc
  Output Path ./Release
  Invoking: C++ Compiler
  Building directory: Release//home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper
"/home/swift/tizen-studio/tools/smart-build-interface/../llvm-10/bin/clang++" -c
"/home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/core_implementations.cc" -o
"Release//home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/core_implementations.o" -DTIZEN_DEPRECATION
-DDEPRECATION_WARNING  -DTIZEN_DEPRECATION -DDEPRECATION_WARNING  -Iinc -Iflutter -Isrc  -I"pch" -O3 -Wall -c -fmessage-length=0 -std=c++11 -target
aarch64-tizen-linux-gnu -gcc-toolchain "/home/swift/tizen-studio/tools/smart-build-interface/../aarch64-linux-gnu-gcc-9.2/" -ccc-gcc-name aarch64-linux-gnu-g++
-march=armv8-a+fp+simd+crc+crypto -Wno-gnu -fstack-protector-strong -Wno-unused-command-line-argument -fdebug-default-version=3 -std=c++17 -fPIE
--sysroot="/home/swift/tizen-studio/tools/smart-build-interface/../../platforms/tizen-6.0/wearable/rootstraps/wearable-6.0-device.core"
-Werror-implicit-function-declaration  -lflutter_tizen -L/home/swift/Git/flutter/dummy/arm64_native/tizen/lib
-I/home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/include
-I/home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/public -I/home/swift/Git/flutter/flutter-tizen/embedding/cpp/include -DCOMMON_PROFILE
-Wl,-unresolved-symbols=ignore-in-shared-libs<EMAIL_ADDRESS>In file included from /home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/core_implementations.cc:21:
In file included from /home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/include/flutter/engine_method_result.h:8:
/home/swift/tizen-studio/tools/smart-build-interface/../aarch64-linux-gnu-gcc-9.2/lib/gcc/aarch64-tizen-linux-gnu/9.2.0/../../../../aarch64-tizen-linux-gnu/inc
lude/c++/9.2.0/memory:121:25: error: cast from pointer to smaller type 'uintptr_t' (aka 'unsigned int') loses information
  const auto __intptr = reinterpret_cast<uintptr_t>(__ptr);
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[1]: *** [/home/swift/tizen-studio/tools/ide/resources/native/Build/makefile.mk:97:
Release//home/swift/Git/flutter/flutter-tizen/bin/cache/artifacts/engine/common/client_wrapper/core_implementations.o] Error 1
make[1]: Leaving directory '/home/swift/Git/flutter/dummy/arm64_native/tizen'
make: *** [/home/swift/tizen-studio/tools/ide/resources/native/Build/makefile:27: app_build] Error 2
Total time: 00:00:01.746

Maybe the Tizen CLI builder doesn't fully support the aarch64 architecture yet.

Regarding the first problem, we can obtain the real screen size using ecore_wl2_display_screen_size_get (ecore_wl2) and ecore_evas_screen_geometry_get (Evas GL). The embedder API and implementation will be changed soon based on this.


Change default behavior of .zprintrc/:search-config?

Hey there!
I feel like the current workflow for using a given project's .zprintrc doesn't work well when dealing with multiple open source projects and contributors.
I'm trying to use zprint in a community project and finding it hard to get everyone on board with setting up $HOME/.zprintrc (that says {:search-config? true}). I know a solution is to move the options into a (z/set-options! ...) call, but that then requires either always requiring that namespace everywhere zprint is used or creating some wrapper around zprint and then only using our wrapper (which then loads the options) or setting the options at the top of every file where zprint is used (and then keeping all of those in sync somehow). Another solution I just thought of is to move the file into resources/ and then read it with (clojure.edn/read-string (slurp (io/resource ".zprintrc"))) and then use that in my set-options! call, but that likewise feels like quite the complex set of steps for something intended to be "simple".
The solution folks at my job found (before I joined) is to copy the entirety of our .zprintrc to the user's home directory in our Dockerfile lol: COPY .zprint.edn /home/$USER/.zprint.edn.
Given all of that, I would like it if zprint used :search-config? for the opposite purpose: if :search-config? is false, only use $HOME/.zprintrc; otherwise, use the project's .zprintrc. This would more closely align zprint with other similar formatting tools, such as prettier/black/rustfmt/etc. It would also allow for contributors to open source projects to correctly format the project's code without having to touch files outside of the project directory.

Thanks for asking, I appreciate the opportunity to try to figure out a solution for you.
I believe I understand what you would like to have changed, but I don't entirely understand the way that you are using zprint.  Most people use zprint either from the pre-built binaries, the uberjar, or lein-zprint.  But you mentioned (set-options! ...), which doesn't fit that usage model.  It would help me a lot if I had some additional overall context for how you are using zprint in your environment.  In other words, I'd like to understand your workflow in more detail.
That said, I have two things to offer regarding your current proposal:

The {:search-config? true} capability came as an addition some years after zprint was first released.  Since it didn't exist initially, I wasn't willing to make a behavior change that would affect people already using zprint in a way that they might not expect.  That remains true today, though I have no idea how many people would actually be affected by such a change.  I agree that it would have been better if zprint had first been released with {:search-config? true} as the default behavior.

If you are using the uberjar, or the pre-built binaries (or lein-zprint, though the approach would be different) for your formatting, you can get the `{:search-config? true}' behavior by specifying it on the command line:

./zprintm-1.2.4 '{:search-config? true}' <helloworld.clj

This is equivalent to having {:search-config? true} in your ~/.zprintrc.
That may or may not help you, but I can imagine an alias or shell script that could hide the {:search-config? true} from people and still let them have their own options maps on the command line.
As I recall, I fixed this to work in late 2019 or early 2021, so if you are using some zprint from before 1.0.0, this certainly won't work. I think I've fixed some minor problems with it since then as well, so you really want to be using a current version of zprint.
All that said, I would be very interested in learning more about your particular workflow so that I can perhaps offer some solution to the problem you are encountering which helps and which doesn't change the current default behavior.
Thanks for bringing this up!

I kind of mushed together multiple scenarios, so let me rephrase.
At my job we use zprint as a cli tool "as intended", so this issue doesn't come up a lot. We include in the "New Hire" docs instructions to add the "search-config" stub to the dev's HOME directory, and do some docker magic to make sure the same file is available for CI. This is very slightly annoying but overall doesn't affect anything.
In an open source project I maintain, we occasionally process csvs into individual edn files. We have roughly 2500 edn of varying size. We use zprint as a library to correctly format the edn files at the time of creation using zprint-str. For a couple years I was the only person who contributed so I never noticed that if someone else contributed and they don't have the "search-config" stub in their HOME directory, when they run the "consumer csv" command, it outputs edn that doesn't conform to the zprintrc file in the root of the repo. This is more annoying lol, as it requires modifying a contributor's HOME directory for a project they might only contribute once to.

So, for your open source project, I have two thoughts:

If there is a single entry point (or maybe one or two), you can call (set-options! ...) with whatever configuration you want zprint to have early on in the code, and then every subsequent call to zprint will have that configuration.  Then you might not need the .zprintrc in the project directory.  Even more interesting in this application (I would think), if your first call to zprint is this: (set-options! {:configured? true}), then zprint will not look at any external files.  Then if your second  call to (set-options! ...) has the configuration you want, nobody else's personal zprint configuration will affect what your use of the zprint library will see as configuration, and all of the calls to zprint-str will use that configuration. (Actually, I think that you might be able to put :configured? true in with your options in the first call, and it will still work, but I don't remember for sure and I don't have time to test it just now.  I know that two back-to-back calls will work!)
If there isn't a single code path at entry where you can call (set-options! ...), then you could define a map with the configuration you want zprint to have.  Then in all of your calls to zprint, you just put the name of that (def ...) as the third parameter of the call to zprint.  Again, you don't have to have a project .zprintrc if you do this.

It seems like one of these approaches would solve your problem, and the first one (if you can do it), would also isolate the zprint format from anyone's personal zprint configuration, which would seem like a good thing in general.
I hope that this helps!

Thanks for the reply and ideas.
The first one doesn't work quite as well because there are multiple Enter points. Sometimes we generate the edn files from a single csv, sometimes we use another namespace that can process some json files, sometimes we use the existing edn to build new edn, lol. It's a mess honestly, but so far it works well.
What this means is that I can't trust that a given namespace will call set-options! unless, like you suggest in your second idea, I dedicate a namespace to zprint config and pull that in in every namespace where zprint is used.
And to follow up on that, if I use such a namespace, I cut myself off from being able to seamlessly use the same configuration at the command line as well as in the code. I like to sanity check the edn files by running zprint from the command line sometimes (after manually editing the files or pulling in someone else's changes), as we don't have CI set up yet. If we did set it up, we'd deal with this same issue.
All that sounds doom and gloom but it's overall pretty small annoyance lol. Would just be nice to have this change (or something similar) to unify everything.
Thanks so much for the in-depth back and forth.

One more thought.  If you use leiningen, you can put :search-config? true is the :zprint key in your project.clj.  Then if you were to somehow create commands that were invoked with or through lein ..., then I think you might get what you want.  Maybe.


Updated to support new ToB Available cert path

Try old paths second, as a fallback.  This also makes more explicit
some return values to try to prevent SIM PIN lockouts from the extra
read attempts.

#hedwig restart
OK, my code doesn't work with private organization members.

Hedwig :owl: : starting a job.
ID 4e0956ce-868e-446a-9af6-999fd5d5b09b

Hedwig said YES.
Get log at https://hedwig-tob-berlin.eu.ngrok.io/jobs/4e0956ce-868e-446a-9af6-999fd5d5b09b/log
Restart by posting #hedwig restart

Cool, merging.


Page refresh loses state

Would be great if at least namespace selection was carried on between page reloads.

localStorage.setItem('namespace',data.value) to set Namespace selection
https://github.com/diashenrique/iris-message-viewer/commit/845a63a32bdcf7d6ef3d2d5c2099622be2df2cb0


Cyberconnect Starter Kit

Hi, Scaffold-eth Team,
This is Bruce from the CyberConnect team (https://cyberconnect.me/). We are a Web3 social graph protocol.   We integrated our CyberConnect SDK to scaffold-eth with getting users' identity, connections, and follow/unfollow a certain address features to help developers better to develop Web3 social applications on CyberConnect. Please kindly review the code. We will be really happy and appreciated it if you can add this CyberConnect starter kit to the scaffold-eth system. Feel free to let me know if you have any questions or concerns by sending me an email (brucew@cyberconnect.me).
Best regards,
Bruce & CyberConnect Team

we would want to create a new branch for this. I can set up the branch and you could pr to it?

PR to here: https://github.com/scaffold-eth/scaffold-eth/tree/cyberconnect-starter-kit


Image prompts only work with SDXL base model?

I just updated to latest version from 2 days ago 0.5.9-Alpha (did a clean install just in case) and discovered the ability to drag and drop images onto prompt area in order to use them as image prompts, but this seems to only work with Stable Diffusion XL 1.0 Base model, and with any other model I tried I get an error:
10:50:55.687 [Error] Internal error processing T2I request: System.IO.InvalidDataException: Model type must be stable-diffusion-xl-v1-base for ReVision (currently is stable-diffusion-xl-v0_9-base). Set ReVision Strength to 0 if you just want IP-Adapter.
   at StableSwarmUI.Builtin_ComfyUIBackend.WorkflowGenerator.<>c.<.cctor>b__9_9(WorkflowGenerator g) in C:\Users\Mario\Documents\GitHub\StableSwarmUI2\StableSwarmUI\src\BuiltinExtensions\ComfyUIBackend\WorkflowGenerator.cs:line 333
   at StableSwarmUI.Builtin_ComfyUIBackend.WorkflowGenerator.Generate() in C:\Users\Mario\Documents\GitHub\StableSwarmUI2\StableSwarmUI\src\BuiltinExtensions\ComfyUIBackend\WorkflowGenerator.cs:line 952
   at StableSwarmUI.Builtin_ComfyUIBackend.ComfyUIAPIAbstractBackend.CreateWorkflow(T2IParamInput user_input, Func`2 initImageFixer, String ModelFolderFormat, HashSet`1 features) in C:\Users\Mario\Documents\GitHub\StableSwarmUI2\StableSwarmUI\src\BuiltinExtensions\ComfyUIBackend\ComfyUIAPIAbstractBackend.cs:line 535
   at StableSwarmUI.Builtin_ComfyUIBackend.ComfyUIAPIAbstractBackend.GenerateLive(T2IParamInput user_input, String batchId, Action`1 takeOutput)
   at StableSwarmUI.Text2Image.T2IEngine.CreateImageTask(T2IParamInput user_input, String batchId, GenClaim claim, Action`1 output, Action`1 setError, Boolean isWS, Single backendTimeoutMin, Action`2 saveImages, Boolean canCallTools) in C:\Users\Mario\Documents\GitHub\StableSwarmUI2\StableSwarmUI\src\Text2Image\T2IEngine.cs:line 287

By default Image Prompt uses ReVision, which is indeed an XL-Specific feature.
You can also install https://github.com/laksjdjf/IPAdapter-ComfyUI to your comfy backend, at which point it will include an IP-Adapter option -- this has SDv1 support. (As I said in your other issue, I hope in the future to automate away common utilities like this so you don't have to manually install, but for now yeah)
You can also follow this issue: #176 regarding reference-only, which will likely be added into swarm in the near future and is also SDv1 compatible.

To clarify, I wasn't as surprised to see this not work with SDv1, as I was surprised to see it not work with any other SDXL models that I have, but only the official SDXL model. Since fine-tuned community SDXL models tend to be better quality than the base model, I tend to never really use the base model anymore, resulting in never being able to use this feature. But I see that the ComfyUI_IPAdapter_plus supports SDXL, so I assume adding this to my backend will enable the use of image prompts on community SDXL models as well.
Thank you for detailed explanation and the solution!

Oh, huh? That's odd. It should work on an SDXL model.


DCR: add optional speak & inputHint params to ITurnContext.sendActivity()

This is to better match the signature of the old reply() method and to maintain parity with the JS sdk.
https://github.com/Microsoft/botbuilder-dotnet/blob/master/libraries/Microsoft.Bot.Builder.Core/ITurnContext.cs#L32

Thanks @garypretty  :)

Here's my current implementation for reference:
    public sendActivity(activityOrText: string|Partial<Activity>, speak?: string, inputHint?: string): Promise<ResourceResponse> {
        let a: Partial<Activity>;
        if (typeof activityOrText === 'string') {
            a = { text: activityOrText };
            if (speak) { a.speak = speak }
            if (inputHint) { a.inputHint = inputHint }
        } else {
            a = activityOrText;
        }
        return this.sendActivities([a]).then((responses) => responses[0]);
    }

@Stevenic PR #363 raised as promised.

@garypretty  Thanks Gary! Merged.


Arte collection feed using collection id

Hi,
today I tried to create a feed for the arte french collection Blow-up. It seems that the collection id/page is : RC-014095. So I tried to find the right parameters to replace category.code at this line, giving an url like:
https://api.arte.tv/api/opa/v3/videos?sort=-lastModified&language=fr&collectionId=RC-014095

Someone can help me ? I have tried the following parameter names without success :

collection
collectionId
collection.code

The parameter name is collections.collectionId
It would be nice if this use case could be added to RSS-Bridge by default !

Hi,
I modify my own version of RSS-Bridge in order to make collection accessible using collection Id :smiley:
You can try it here : http://rss-bridge.cheredeprince.net/
I would be happy to make this contribution available for all RSS-Bridge users.


add template for new issues

this template will pop up when user enters a new issue...not sure now to test it, but its definitely harmless

Yep, that sounds like a good idea! Let's give it a try and see how it goes.

@watashiSHUN you can go ahead and rebase/squash/merge this in.


Needs a link describing how to test and use the custom container

Great article and description!  But it is incomplete. The last words of the article are "Azure Databricks ignores the Docker CMD and ENTRYPOINT primitives."
Needs a discussion or description link addressing more why and how workarounds:

How to use it and test if the custom databricks container works correctly?
An explanation why CMD and ENTRYPOINT primitives are ignored.
What is the work-around for CMD and ENTRYPOINT ?

Thanks

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 98eb0b83-1816-1010-23cd-fb85c4827063
Version Independent ID: 59f33c51-5f16-1427-3bae-01fcaa8814e7
Content: Customize containers with Databricks Container Services - Azure Databricks
Content Source: databricks/clusters/custom-containers.md
Service: azure-databricks
GitHub Login: @mssaperla
Microsoft Alias: saperla

@aaelony-aeg
Thanks for your feedback! We will investigate and update as appropriate.

@aaelony-aeg
I've delegated this to @mssaperla, a content author, to review and share their valuable insights.

Thanks for providing feedback that helps improve our documentation. We've created an internal work item (DOC-9223) to address your feedback. The timeline for resolution varies based on resourcing.
#please-close


Stop deleting unsuccessful jobs on retried deployment

I don't think it captures early error detection in the Kubernetes infrastructure plugin. Example in kind, with Kubernetes infrastructure plugin and python jobtype plugin:
racetrack deploy sample/python-class
Now there's a working adder job.
Then edit racetrack/sample/python-class/job.yaml to
...
resources:
  cpu_min: 50M
...

and run racetrack deploy sample/python-class --force. This predictably fails with
[2024-07-11 13:33:31] INFO  deployment in progress: starting Job server...
[2024-07-11 13:33:33] ERROR deployment error: verifying deployed job: Early errors detected in job-adder-v-0-0-2. Rollout status: Waiting for deployment "job-adder-v-0-0-2" rollout to finish: 1 old replicas are pending termination...
. Kubernetes events: {'apiVersion': 'v1', 'count': 1, 'eventTime': None, 'firstTimestamp': '2024-07-11T11:33:31Z', 'involvedObject': {'apiVersion': 'v1', 'kind': 'Pod', 'name': 'job-adder-v-0-0-2-5b98d5574-grf75', 'namespace': 'racetrack', 'resourceVersion': '3476', 'uid': '58218ddb-afe4-4dbc-8962-926545b82135'}, 'kind': 'Event', 'lastTimestamp': '2024-07-11T11:33:31Z', 'message': '0/1 nodes are available: 1 Insufficient cpu. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.', 'metadata': {'creationTimestamp': '2024-07-11T11:33:31Z', 'name': 'job-adder-v-0-0-2-5b98d5574-grf75.17e1255c78bfde1e', 'namespace': 'racetrack', 'resourceVersion': '3478', 'uid': '526c11a0-f929-43fe-ade8-f95d66c140f6'}, 'reason': 'FailedScheduling', 'reportingComponent': 'default-scheduler', 'reportingInstance': '', 'source': {'component': 'default-scheduler'}, 'type': 'Warning'}
Job logs:
[2024-07-11 11:31:33] INFO  Running ASGI server on http://<IP_ADDRESS>:7000
[2024-07-11 11:31:33] DEBUG Activated Job's venv: /src/job-venv/lib/python3.11/site-packages
[2024-07-11 11:31:33] INFO  loaded job class: AdderModel
[2024-07-11 11:31:33] INFO  Server is ready
[2024-07-11 11:31:33] INFO  uvicorn.error: Started server process [1]
[2024-07-11 11:31:33] INFO  uvicorn.error: Waiting for application startup.
[2024-07-11 11:31:33] INFO  uvicorn.error: Application startup complete.
[2024-07-11 11:31:33] INFO  uvicorn.error: Uvicorn running on http://<IP_ADDRESS>:7000 (Press CTRL+C to quit)

But now the adder job is gone.
Similarly, changing the manifest of a deployed job to cpu_min: 50M using the "Edit manifest"-button causes the previous job to disappear.
However, the early error detection in the Kubernetes infrastructure plugin is part of the KubernetesMonitor, so I am not sure if we actually want to capture that in lifecycle.

I don't think it captures early error detection in the Kubernetes infrastructure plugin. Example in kind, with Kubernetes infrastructure plugin and python jobtype plugin:
racetrack deploy sample/python-class Now there's a working adder job.
Then edit racetrack/sample/python-class/job.yaml to
...
resources:
  cpu_min: 50M
...

and run racetrack deploy sample/python-class --force. This predictably fails with
[2024-07-11 13:33:31] INFO  deployment in progress: starting Job server...
[2024-07-11 13:33:33] ERROR deployment error: verifying deployed job: Early errors detected in job-adder-v-0-0-2. Rollout status: Waiting for deployment "job-adder-v-0-0-2" rollout to finish: 1 old replicas are pending termination...
. Kubernetes events: {'apiVersion': 'v1', 'count': 1, 'eventTime': None, 'firstTimestamp': '2024-07-11T11:33:31Z', 'involvedObject': {'apiVersion': 'v1', 'kind': 'Pod', 'name': 'job-adder-v-0-0-2-5b98d5574-grf75', 'namespace': 'racetrack', 'resourceVersion': '3476', 'uid': '58218ddb-afe4-4dbc-8962-926545b82135'}, 'kind': 'Event', 'lastTimestamp': '2024-07-11T11:33:31Z', 'message': '0/1 nodes are available: 1 Insufficient cpu. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.', 'metadata': {'creationTimestamp': '2024-07-11T11:33:31Z', 'name': 'job-adder-v-0-0-2-5b98d5574-grf75.17e1255c78bfde1e', 'namespace': 'racetrack', 'resourceVersion': '3478', 'uid': '526c11a0-f929-43fe-ade8-f95d66c140f6'}, 'reason': 'FailedScheduling', 'reportingComponent': 'default-scheduler', 'reportingInstance': '', 'source': {'component': 'default-scheduler'}, 'type': 'Warning'}
Job logs:
[2024-07-11 11:31:33] INFO  Running ASGI server on http://<IP_ADDRESS>:7000
[2024-07-11 11:31:33] DEBUG Activated Job's venv: /src/job-venv/lib/python3.11/site-packages
[2024-07-11 11:31:33] INFO  loaded job class: AdderModel
[2024-07-11 11:31:33] INFO  Server is ready
[2024-07-11 11:31:33] INFO  uvicorn.error: Started server process [1]
[2024-07-11 11:31:33] INFO  uvicorn.error: Waiting for application startup.
[2024-07-11 11:31:33] INFO  uvicorn.error: Application startup complete.
[2024-07-11 11:31:33] INFO  uvicorn.error: Uvicorn running on http://<IP_ADDRESS>:7000 (Press CTRL+C to quit)

But now the adder job is gone.
Similarly, changing the manifest of a deployed job to cpu_min: 50M using the "Edit manifest"-button causes the previous job to disappear.
However, the early error detection in the Kubernetes infrastructure plugin is part of the KubernetesMonitor, so I am not sure if we actually want to capture that in lifecycle.

I don't know if we can do any better in this case. That's the price you pay for using --force flag. It's implemented in kubernetes that the resources are overwritten first to check if they're running fine later on. We can't invert this order.
Nevertheless, this change is a step forward, because it's better to end up with the faulty job with an ERROR status. Formerly, your job would be deleted at all.

Yup, I agree


Apple Music Sample

I've been trying to get IBM JWT to work with Apple music api. Swift-JWT creates an invalid signature. Do you have sample code that actually auths with apple music?

...It was my code...


UML-1858 UML-1735 - CMK for SNS Encryption

Purpose
Briefly describe the purpose of the change, and/or link to the JIRA ticket for context
Fixes UML-1858 UML-1735
Approach

create a Customer Managed Key for pagerduty SNS

Learning
https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-receive-sns-for-alarm-trigger/
Checklist

[ ] I have performed a self-review of my own code
[ ] I have added relevant logging with appropriate levels to my code
[ ] I have updated documentation (Confluence/GitHub wiki/tech debt doc) where relevant
[ ] I have added tests to prove my work
[ ] I have added welsh translation tags and updated translation files
[ ] I have run an accessibility tool on any pages I have made changes to and fixed any issues found
[ ] The product team have tested these changes

New encryption is working for demo

And working on our pr environment


Removing objects in Dataset Review doesn't update Series Mapping

Greetings,
I had to exclude some objects in the Dataset Review and I noticed that the BIDS review in the end I got
1: [ERR] 'IntendedFor' field needs to point to an existing file. (code: 37 - INTENDED_FOR)
I think it would be cool if after the "Datasets Review" Series Mapping would be refreshed?

Weirdly enough even when manually deleting the "exlucded files" from the Intended for field the BIDS validator still shows the same error.

Apologies @andreifoldes for not responding to this, must have fallen through the cracks.
Over the past year we've updated how ezBIDS handles dynamic processes (e.g., user edits/modifications) on the individual pages. Issues like the one you've described here should now be correctly handled.
Feel free to re-open if you continue encountering this. I'm unable to reproduce, so I'll assume things are now corrected.


Clear debounce timeout on unmount

I'm not sure how to explain this, but here it goes:
We were using react-form and had a fieldInstance.debounce in the field's validate function.
When you were removing the field while the debounce is running and the validation failed, the error would be added to the now non existing element.
This PR fixes this issue by canceling the debounce when the component that calls useField unmounts.
I prepared a small code sandbox to highlight the issue: https://codesandbox.io/s/beautiful-resonance-iri1u
To reproduce the issue, click the remove button right after the page is loaded.
It will show you that the form cannot be submitted.
If you blur the input first and then click the remove button, it works.
What is going on under the hood is that there is a validation bound to the input field. When you click the remove button without blurring the input element first, the validation starts and the element is removed from the form.
After the element is removed, the validation fails. The error message is set to the non existing form field. And the form is not submittable.
This is fixed if the validation is cancelled when the element is removed.
The implementation that I did does exactly that for the case of a debounced synchronous validation.
If validation is async out of other reasons (e.g. it sends the value to a server), then the bug described above would likely me still present.
I think that fixing this would need quite some refactoring in the core of the useForm hook. But I do not dare changing this as it is very likely I break stuff.

Closing this PR for now, as we're working on a substantial rework of the codebase that's expected to undergo more rapid changes as I work on stabilizing things.
If you'd like to get involved in the rework, join our Discord and reach out in the #form channel
Rest assured, we'll make sure that debounce functionality has proper cleanup and testing to validate the functionality :)


Fix SaveJsonValue for strings when using non-default allocators

When using a non-default allocator, the lack of a type-parameterized SaveJsonValue for const * causes it to select the bool specialization instead.
The reason that the commented out method was ambiguous before is that const * and const T (&t)[N], T = char are effectively the same.
Avoid this issue by explicitly disabling that template when T=char so that it uses the const char* specialization.

thanks


Workshops Page

What's your idea?
A workshop page for each team to share their workshops from each "series" (semester or other time frame)

[x] Design Doc https://acmcsuf.com/workshops-design
[ ] New Path
[ ] Implement Backend
[ ] Implement Layout

Updated Design Doc

Added Possible Operations


posting jobs for new stations can create duplicates

There isn't any logic that handles duplicate stations. It would be nice if the codes detected whether or not a record exists and, if it does not, then the record would be created. If it does exist, it would be updated.

Changing station ID to be the primary key for the station model did it.


Updates to README

Fixes some typos and also adds a new section 6.4 to test the flow interactively.

AI Studio now supports custom connections with multiple key-value pairs. Switched from using ml.azure.com to ai.azure.com to create that connection.

Ready to merge, @cassiebreviu


Documentation points to 10.4.1

The conditional loading example in the documentation points specifically to 10.4.1.
I only figured out there was a newer version when I encountered the IntersectionObserver issue in Chrome which is resolved in 10.4.2.
Is there a way to point to a less precise version number? Like "newest"?
Great work on this, it was a life saver! Thanks.

Hi there.
You’re welcome :)
No, unfortunately there’s no way to always point to the latest version, and I kinda would not advise to do so, especially in production, because you wouldn’t have a stable environment.
Will update the version in the readme, though. Thanks

Done :) Thanks


fix R crash problem.

fix #771 .

@guolinke it does not crash anymore and it can even run after an error during training / building dataset when in the past we needed lgb.unloader:
library(lightgbm)
data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
data(agaricus.test, package = "lightgbm")
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label = test$label)
params <- list(objective = "regression", metric = "l2")
valids <- list(test = dtest)

# Workaround...
dtrain$construct()
dtest$construct()

# NO MORE CRASH
model <- lgb.train(params,
                   dtrain,
                   100,
                   valids,
                   min_data = 1,
                   learning_rate = 1,
                   early_stopping_rounds = 10,
                   aaaaaaaaaa = 1)

# Can run correctly without lgb.unloader
model <- lgb.train(params,
                   dtrain,
                   100,
                   valids,
                   min_data = 1,
                   learning_rate = 1,
                   early_stopping_rounds = 10)


[DNM] restart reproducer for turbulence pgen

Self-contained reproducer for restart issue and the hang-after-performance-metrics issue.
Build and run with ./reproducer.sh.

Expected output from running ./reproducer.sh:
expected_output.txt

Expected output when using Parthenon 24.08 submodule:
expected_output_parthenon24.08.txt


Add an async version of WeakEventSource.

I may have been a bit hasty when I merged this PR...
Some of the tests fail, which I didn't realize until today. The CI build wasn't actually running the tests (it did call dotnet run, but the test project didn't have <IsTestProject>true</IsTestProject> so it didn't do anything).

Can_Subscribe_While_Another_Thread_Is_Invoking fails on netcoreapp1.0 and netcoreapp2.0 (works on net461)
Subscribers_Can_Be_Garbage_Collected fails in Debug configuration (but it also fails for the sync version on netcoreapp1.0/2.0). That's probably due to the difference in optimizations between Debug and Release.

The second one doesn't really worry me, since it works fine in Release, but I'll have to look into the first one...

OK, I think the implementation is fine. The problem was actually in the tests themselves. I forced optimizations in the test project, and partly rewrote Can_Subscribe_While_Another_Thread_Is_Invoking.


Feature/jedi ops um

Description
This adds the tools used to build a prototype docker container for ops-um-jedi CI.
The -dev Dockerfile is just a docker version of @yaswant 's singularity recipe file of the same name.  It installs the public components of the stack.  The -ci container starts from there and adds on shumlib, faux, trans, and atlas.
Issue(s) addressed
Link the issues to be closed with this PR

partially-fixes #https://github.com/JCSDA-internal/um-jedi/issues/270

If this does not close an existing issue, then be sure to add a Pipeline, Label, Estimate, Assignees, and Epic
Acceptance Criteria (Definition of Done)
jedi-ops-um builds with the container and all tests pass (a singularity container was created from the docker container to facilitate testing)
Dependencies
None
Impact
None

thanks for this, @mmiesch.
One question - is docker secret stored as plain text or encrypted?

I currently have it as plain text.


Set Default TimeZoneId claim when a new user registers

It looks like when register a new user we don't set a default TimeZoneId claim. Since the claim only gets updated if the user then changes it in their My Account page (only updated if the value actually changed from the model originally rendered) it means quite often a user doesn't get a claim for this.
We should set a default for new users since we don't offer this on the registration form.

I see claims are set in the Register POST action here and there is a TimeZoneId claim type

What should it be set to?
Once this is set, where else in the app should this claim should be used?

If you could give me a broad idea of what's involved to resolve this issue I will see if I can look at it in the next week of so.

@NRKirby Sorry for the delay.
I've just tried to replicate this and not been able to. I'm therefore going to close this out for now.


App rejected for use of NSSpeechRecognitionUsageDescription

Hello,
Since we started using face liveness, our builds are rejected due to not including the NSSpeechRecognitionUsageDescription string.
It looks like Amplify Liveness has a dependency on Amplify which in turns, uses the Speech library ( Amplify => AmplifyPlugins > CoreMLPredictionsPlugin )
Is there a way to better restrict which part of your libraries are included so that we don't need to add an unnecessary permission ?

@ntnmrndn Thanks for submitting your question.  Unfortunately, that is a dependency that we can't remove and the current workaround is to add the usage description.  Alternatively, you could fork Amplify Swift and remove CoreMLPredictionsPlugin if that simplifies your development.

Closing issue, please re-open if there are any additional issues or questions.


"Authenticatoin Failed" while sending emails

RainLoop version, browser, OS:
1.14.0, CentOS
Expected behavior and actual behavior:
It is not possible to send and receive emails.
Steps to reproduce the problem:
Click on Send email and the error appears.
Logs or screenshots:
I've trying to send and receive emails through rainloop, but to no avail.
Whenever I try to send an email the following error is shown "Authentication Failed".
Upon checking the log file I could not figure out what is wrong,
The domain configuration file (xxx.com.ini) is shown below:
xxx.com.ini
imap_host = "xx.xx.xx.xxx" imap_port = 143 imap_secure = "None" smtp_host = "xx.xx.xx.xxx" smtp_port = 25 smtp_secure = "None" smtp_auth = On
I also have attached the complete log generated when sending an email, and the following lines seem be the most relevant ones:
[21:40:02.883][cd39d9d2] INFO[ERROR]: exception 'MailSo\Smtp\Exceptions\LoginBadMethodException' with message 'MailSo-Smtp-Exceptions-LoginBadMethodException (SmtpClient.php ~ 309)' in /usr/local/webuzo/enduser/webuzo/rainloop/rainloop/v/1.12.1/app/libraries/MailSo/Smtp/SmtpClient.php:309 Next exception 'RainLoop\Exceptions\ClientException' with message 'AuthError[102]' in /usr/local/webuzo/enduser/webuzo/rainloop/rainloop/v/1.12.1/app/libraries/RainLoop/Actions.php:6331 [21:40:02.883][cd39d9d2] AJAX[DATA]: {"Action":"SendMessage","Result":false,"ErrorCode":102,"ErrorMessage":"","ErrorMessageAdditional":"","Time":2707}
But I am not sure how to go about it. Any ideas what is wrong?
rainloop.log
Best Regards,
Victor

Hi @vtolenti89
Access you admin panel of Rainloop or edit xxx.com.ini
imap_host = "mail.yourdomain.com" imap_port = 143 imap_secure = "None" smtp_host = "mail.yourdomain.com" smtp_port = 587 or 465 smtp_secure = "None" smtp_auth = On
RECOMMENDED FOR IMAP PROTOCOL
imap_host = "mail.yourdomain.com" imap_port = 993 imap_secure = "ssl" smtp_host = "mail.yourdomain.com" smtp_port = 465  smtp_secure = "ssl" smtp_auth = On
I recommend performing the procedure directly from the application panel:
youdomain.com/?admin
DEFAULT CREDENTIALS
User: admin
Pass: 12345
Hope this helps! Good luck!

I debugged the code and found the error.
My mail server includes the domain in the user ID (eg admin@example.com).
However, rainloop automatically deleted the domain part when logging in.
Because of this, the identification information became wrong.
Accurate login information
user<EMAIL_ADDRESS>pass: password
Login information attempted by rainloop
user: admin
pass: password
I fixed the error by modifying file(rainloop/v*/app/libraries/RainLoop/Model/Account.php).


Wrong tax value

Lunar version: 0.7.2
Laravel Version: 10
PHP Version: 8.2

There is an problem with tax value - for e.g i have product which cost 12.00 PLN (6.00 PLN after discount)
stored_inclusive_of_tax = true
tax percentage - 23%
and i'm getting tax value: 112 when it should be 138
I see that in SystemTaxDriver there is:
$totalTaxPercentage = $taxAmounts->sum('percentage') / 100; // E.g. 0.2 for 20%
$priceExTax = round($subTotal / (1 + $totalTaxPercentage));

but second line should be:
$priceExTax = round($subTotal - ($subTotal * $totalTaxPercentage));

$priceExTax = round($subTotal / (1 + $totalTaxPercentage));
The calculation of the amount without tax is definitely correct, the cause of the error must be found somewhere else.

If you have 600 inclusive of tax and the rate is 23%, then to remove the tax you would do
600 / 1.23 = 487.80
I don't see how you get to 462?

These are equivalent when increasing by a percentage
x * 1.25 == x + (x * .25)

however, the following are not equal when decreasing by a percentage
x / 1.25 != x - (x * .25)

here's why
x / 1.25 =  x * 1/1.25  = x * 0.8

and on the other side
x - (x*.25) = x * (1 - 0.25) = x * 0.75

depending on which calculation you use there will be a difference of
p * p * x  / (p + 1)


Word usage

"running the Windows OS" -> "running on Windows"

@andresnava : Thanks for your contribution to the Azure documentation! The author, @SaloniSonpal, has been notified to review your proposed change.

#sign-off


Move non-relevant code from Marine repo into FluenceJS

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


[Improvement]: Reduce runtime type checker overhead

Description
We have identified the fallowing optimization from nBallerina to be ported to jBallerina

Caching type check results
Introducing simple type tags

1 should improve performance in cases such as foreach loops over lists where we repeated do the type check for the same type pair (since list iterator is implemented using java interop)
Under 2 each type/value in runtime will have a pair of bit sets (most likely implemented directly as long), all representing each basic type it cover entirely and some representing each basic type it cover partially. We should be able to use these to efficiently prune away easy type checks.
Describe your problem(s)
No response
Describe your solution(s)
No response
Related area
-> Runtime
Related issue(s) (optional)
No response
Suggested label(s) (optional)
No response
Suggested assignee(s) (optional)
No response

With #42111 we are now caching common repeated type calculations. Since we are reworking the runtime type checker under #40511 we'll revisit this after that change


Unify docs with webtorrent-www

The WebTorrent API docs live in two places right now:

README.md in this repo
server/views/docs.jade in webtorrent-www

Let's unify these so we don't need to keep them manually in sync.

There's no way to load from external to HTML. What we can do is load the README.md, remove the non-api parts and present it.

What might be possible is the opposite: include webtorrent README.md (or a API.md subset extracted from it) into the jade file, since it's possible to include markdown in jade http://jade-lang.com/reference/includes/

I'm working on fixing this right now.

This is done now! Docs now live in docs/.


Using si.networkStats () to return operastate is always up, no down

Describe the bug
Using si.networkStats () to return operastate is always up, no down
To Reproduce
        setInterval(function() {
          si.networkStats().then(data => {
            console.log("networkStats  ", data[0].operstate);
          });
        }, 1000);

Current Output

Expected behavior
Environment (please complete the following information):
macOS 10.14.4
Additional context

Hi @huang-ju ... I do not know, how you made this working within the browser (Google Chrome I guess) ... so when I try to run this in node this works absolutely fine (testet with macOS 10.13 up to macOS 10.15.2). Please first try to run this in node, with altering e.g. activating 7 deactivating WIFI connection. If this also does not work, please provide a little more information on what you have done ...

Hi @huang-ju ... I do not know, how you made this working within the browser (Google Chrome I guess) ... so when I try to run this in node.js this works absolutely fine (tested just a moment ago with macOS 10.13 up to macOS 10.15.2). Please first try to run this in node.js, with altering e.g. activating & deactivating WIFI connection. If this also does not work, please provide a little more information on what you have done ...

Had similar issue.  operstate field It always returns "up" whether I upload or download a file.
MacOx：10.14.6
NodeJs: v12.14.0
By the way, "rx_sec" and "tx_sec" are seem to be my current download and upload transfer bytes. What does the operstate field mean?
I want to know how to get my current download and upload transfer speed in code ？
// npm i<EMAIL_ADDRESS>-S
const si = require('systeminformation');

var format = (text) => {
  var bytes = Number(text)
  if (!bytes) return '0 B'
  var k = 1024
  var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
  var i = Math.floor(Math.log(bytes) / Math.log(k))
  return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]
}
setInterval(function() {
  si.networkStats().then(data => {
    var resp = data.map((item) => {
      return {
        iface: item.iface,
        operstate: item.operstate,
        rx_sec: format(item.rx_sec),
        tx_sec: format(item.tx_sec),
      }
    })
    console.log(resp);
  })
}, 1000)

@huang-ju @THROFHR

operstate indicates if a network interface is up or down (e.g. when you deactivate your WIFI, operstate  for this interface should go from up to down). See also documentation https://systeminformation.io/network.html
rx_sec and tx_sec are the - sc you stated  the current transfer speeds per bytes / second ... see also documentation.

So I do not really see an issue here ... maybe I misunderstood your questions. Please do not hesitate to add some more information here related to the issue.

@sebhildebrandt Okay thank you.
Sorry, I got it wrong with the meaning of "operstate"

closing it for now.


Add a "Beginner" or "Newbie" label to issues

In an effort to attract many unexperienced programmers into open source projects, many have been adopting the approach of labeling the issues as "Beginner Friendly" or "Newbie" when appropriated so newcomers can jump into open source dev without much hassle.
More on this:
http://contributor-covenant.org/
https://opensource.com/life/16/1/6-beginner-open-source

@arimourao We have the labels help-wanted and effort easy which serve the similar purpose.
@Microsoft/vscode Thoughts on including labels for beginner ? Something that is easy effort need not necessarily be the right fit for beginners.

I think we should just rename effort easy to something clearer like beginner or newbie. Thoughts @waderyan?

For beginner, I'd say it's better to start by writing extensions instead of trying to contribute to the editor.

@octref the label would mean beginner in the context of vscode contributions. It's hard to know which issues labeled help wanted are good issues for your first PR without something like this.

I'm in favor. When this was initially brought up I liked good first bug from React the best. There was some push back and then we landed on effort easy.

@waderyan good first bug indeed seems great. Something that is quite simple, maybe just a refactor and them people that feels intimidated by the size and complexity of vscode can successfully make a PR and slowly dwelve into deeper problems.

👍  On just renaming effort easy to beginner, like electron.

Lots of :+1:s so I renamed it to beginner which is also my favorite. https://github.com/Microsoft/vscode/labels/beginner


Add a column to rules.csv to know the date of update ?

https://github.com/caresteouvert/Covid_enseignes/blob/master/rules.csv
this would make it possible to know whether this has been checked recently or not

As default , you can use git blame.
https://github.com/caresteouvert/Covid_enseignes/blame/master/rules.csv


Fix Trace Cache Iteration Crash

Before contributing, please read our contributing guidelines and code of conduct.
Overview
Describe the changes present in the pull request
Related Github Issue
Include a link to the related GitHub issue, if applicable
Testing
The agent includes a suite of tests which should be used to
verify your changes don't break existing functionality. These tests will run with
Github Actions when a pull request is made. More details on running the tests locally can be found
here,
For most contributions it is strongly recommended to add additional tests which
exercise your changes.

@hmstepanek

If the list casting didn't fix this, I do not believe a copy will fix it either.

The issue with a list is that it's not casting, it's iterating on the dict.items into a list, then iterating the list. The crash has less area to happen but can still happen if the change is made during the short time when the dict.items is iterated over by the list constructor (instead of the longer running for loop).
A shallow copy doesn't iterate as far as I'm aware, this is a patch that's been used in other places I've seen to guard against iteration issues.
That being said, I'm not opposed to using locking but I wonder if that causes potential performance issues. It's certainly harder to maintain. I think the simpler solution might be more appropriate considering this is only affecting event loop wait time and debug logic, as opposed to potential impacts to any time that the trace cache is accessed.

Superseded by #704


[BEAM-10206] Add key for fields in proto wrapper structs

Proto construction in stage.go assigned values to struct fields without explicit keys, leading to go vet warnings. This adds the correct key to the struct literal assignment.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

R: @lostluck @youngoli
CC: @riteshghorse


adding schemas for bound points

Adds 3 schemas for bound spatial points: boolean tag; boolean tag with valid reference id; string tag with valid reference id. Related to Vortex myelin annotations

Can you rebase this against master don’t pasts tests? @bpdanskin


[BugFix] optimize mvs' related metas processing

What type of PR is this：

[x] BugFix
[ ] Feature
[ ] Enhancement
[ ] Refactor
[ ] UT
[ ] Doc
[ ] Tool

Which issues of this PR fixes ：

Fixes #16575
Problem Summary(Required) ：

optimize mvs' related metas processing
Checklist:

[ ] I have added test cases for my bug fix or my new feature
[ ] This pr will affect users' behaviors
[ ] This pr needs user documentation (for new or modified features or behaviors)

[ ] I have added documentation for my new feature or new function

Bugfix cherry-pick branch check:

[x] I have checked the version labels which the pr will be auto backported to target branch

[x] 2.5
[ ] 2.4
[ ] 2.3
[ ] 2.2

[FE PR Coverage Check]
:disappointed: fail : 0 / 31 (00.00%)
file detail

path
covered_line
new_line
coverage
not_covered_line_detail

:large_blue_circle:
com/starrocks/server/GlobalStateMgr.java
0
31
00.00%
[1363, 1364, 1365, 1366, 1374, 1375, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1392, 1393, 1394, 1395, 1396, 1398, 1399, 1400, 1401, 1402, 1404, 1405, 1406]

run starrocks_admit_test

@Mergifyio backport branch-2.5


Changes to Luhn tests

We recently rewrote the test suite for the Luhn exercise. Since this track implements Luhn, please take a look at the new canonical_data.json file and see if your track should update its implementation or tests.
Details on the test changes and the motivation can be found in the PR.
Tracking of these changes is being done at the tracking issue.

Closed with #274 being merged.


Fetch libraries from unpkg.com and cdnjs.com

Fetches external libraries from CDN instead of embedding the code in this repository.
(OpenLayers 2 is not available via npm/unpkg, see https://www.npmjs.com/package/openlayers?activeTab=versions)

If you wanted to serve everything from the same CDN, jsDelivr has OpenLayers 2 as well as all npm packages (and GitHub repos).

Thanks for pointing me to jsDelivr (haven't known that CDN).

Any specific reason why you are using /lib/OpenLayers.js instead of /OpenLayers.js?

<EMAIL_ADDRESS>https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/lib/OpenLayers.js
loads individual source files via script tag injection, for development
https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/OpenLayers.js
built single-file, minified bundle, only in release build (attachment), not on jsDelivr


Support for onDisconnect() in firebase_database

This is a feature request to add onDisconnect() to the firebase_database plugin.

I needed this for android today so I quickly implemented: https://github.com/pauldemarco/plugins
(Tests and iOS not included)

@pauldemarco
I've just picked your code and updated to the current master branch. Also added ios support. https://github.com/rmarau/plugins/

@rmarau @pauldemarco  any update on this

https://github.com/flutter/plugins/pull/653 closes this issue.

@pauldemarco
This issue has been moved to https://github.com/FirebaseExtended/flutterfire/issues/977. Any further collaboration will be done there.


set up bots to test the analyzer and analysis server using the CFE

Set up window/linux/mac bots to run the analyzer and analysis server unit and integration tests using the CFE.

This would be similar to the analyzer-use-fasta-parser-linux bot.

done


"allowJs" compiler option rejected

I'm using the latest version of typescript, but atom-typescript claims that certain compiler options in the tsconfig.json file are invalid.
--allowJs
--project

for example.
Is there any way to work around this?

Also seeing this issue with allowJs.

Same problem here.
I compile with tsc in the shell anyway, but atom-typescript stops doing error checking and autocompletion, which should not happen in any case IMO.

I'm running the latest typescript version as of today, 1.9.0-dev.20160324, and the compiler supports these options. Does atom-typescript bundle its own version of typescript? If so, can it be configured to point to a different version on the system?

@splodingsocks  - In the atom-typescript settings, I have configured the path to the "typescriptServices.js" in my global install of typescript. It still reports that the tsconfig.json file is invalid.

@sparseinference  bummer. Thanks for the follow-up!


fix: windows/deployment/windows-autopilot/enrollment-status.md

Remove link locale

@greg-lindsay This PR that addresses a minor typo is ready for review. Thanks.

@greg-lindsay Any updates with this PR? Thanks.

Looks like it got fixed in fa80fbf517ec0f75016cb3c21ea0885149a860a5