Wrong precedence pattern #4535

Closed
opened 2023-05-18 21:30:22 +00:00 by AliasAlreadyTaken · 25 comments

Following #4418 more examples of potentially wrong precedences:

$  grep . -n -ri -E -e 'not [^(][^ ]+ ==' --exclude='*.py'

./Minetest-WorldEditAdditions/worldeditadditions_commands/commands/meta/for.lua:57:		if not parts[1] == "" then
./aerotest/entity.lua:112:		if (meal > self.hunger) and aerotest.hunter then --and not self.action == "range" then
./beds/api.lua:119:					not node.param2 == node2.param2 then
./cannons/functions.lua:179:	if not node or not type(node) == "table" then
./personal_log/init.lua:353:	if not itemstack:get_name():sub(1,ccompass_prefix_length) == ccompass_prefix then
./water_life/api.lua:248:		if not entity or not entity.name == "__builtin:item" then
./water_life/crafts.lua:117:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:143:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:168:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:198:						if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:226:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:251:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:275:				if not pointed_thing.type == "node" then return itemstack end
./yl_commons/chatcommands/bailiff_votes.lua:85:            if not param or not type(param) == "string" or param == "" then
./yl_commons/chatcommands/bailiff_votes.lua:91:            if not sa_param or not type(sa_param) == "table" or not sa_param[2] then
./yl_commons/chatcommands/bailiff_votes.lua:101:            if not dialog or not type(dialog) == "string" then
./yl_commons/chatcommands/bailiff_votes.lua:107:            if not options_d2 or not type(options_d2) == "string" then
./yl_commons/chatcommands/bailiff_votes.lua:113:            if not option_single or not type(option_single) == "string" then
./yl_commons/features/interpolate_planting.lua:153:    if offset.y ~= 0 and not xor(offset.x == 0, offset.z == 0) then
./yl_commons/items/entitytools.lua:25:        if not pointed_thing or not pointed_thing.type or not pointed_thing.type == "object" or not pointed_thing.ref
./yl_commons/items/xp.lua:15:    if not type(name) == "string" or not type(xp) == "number" then
./yl_commons/tools/sherlock_magnifier.lua:85:    if not p_name or not type(p_name) == "string" or not rb[p_name] then
./yl_commons/util/stopwords.lua:2:    if not s or not type(s) == "string" then
./yl_events/tribe_miocene.lua:362:    if not nodedef or not nodedef.name or not nodedef.name == "air" then
./yl_events/tribe_miocene.lua:392:    if not nodedef or not nodedef.name or not nodedef.name == "air" then
./yl_exhibition/chatcommands.lua:37:            if not dialog or not type(dialog) == "table" then
./yl_exhibition/chatcommands.lua:43:            if not option or not type(option) == "string" then
./yl_faq/internal.lua:65:        if not faq_entry or not type(faq_entry) == "table" then
./yl_faq/internal.lua:105:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:111:    if not sa_param or not type(sa_param) == "table" or not sa_param[4] then
./yl_faq/internal.lua:208:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:261:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:296:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:331:    if not name or not minetest.player_exists(name) or not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:379:    if not fl or not type(fl) == "table" or #fl > yl_faq.max_list then
./yl_faq/internal.lua:383:    if not fl or not type(fl) == "table" or not fl[1] then
./yl_faq/internal.lua:399:    if not param or not type(param) == "string" or param == "" then
Following #4418 more examples of potentially wrong precedences: ``` $ grep . -n -ri -E -e 'not [^(][^ ]+ ==' --exclude='*.py' ./Minetest-WorldEditAdditions/worldeditadditions_commands/commands/meta/for.lua:57: if not parts[1] == "" then ./aerotest/entity.lua:112: if (meal > self.hunger) and aerotest.hunter then --and not self.action == "range" then ./beds/api.lua:119: not node.param2 == node2.param2 then ./cannons/functions.lua:179: if not node or not type(node) == "table" then ./personal_log/init.lua:353: if not itemstack:get_name():sub(1,ccompass_prefix_length) == ccompass_prefix then ./water_life/api.lua:248: if not entity or not entity.name == "__builtin:item" then ./water_life/crafts.lua:117: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:143: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:168: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:198: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:226: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:251: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:275: if not pointed_thing.type == "node" then return itemstack end ./yl_commons/chatcommands/bailiff_votes.lua:85: if not param or not type(param) == "string" or param == "" then ./yl_commons/chatcommands/bailiff_votes.lua:91: if not sa_param or not type(sa_param) == "table" or not sa_param[2] then ./yl_commons/chatcommands/bailiff_votes.lua:101: if not dialog or not type(dialog) == "string" then ./yl_commons/chatcommands/bailiff_votes.lua:107: if not options_d2 or not type(options_d2) == "string" then ./yl_commons/chatcommands/bailiff_votes.lua:113: if not option_single or not type(option_single) == "string" then ./yl_commons/features/interpolate_planting.lua:153: if offset.y ~= 0 and not xor(offset.x == 0, offset.z == 0) then ./yl_commons/items/entitytools.lua:25: if not pointed_thing or not pointed_thing.type or not pointed_thing.type == "object" or not pointed_thing.ref ./yl_commons/items/xp.lua:15: if not type(name) == "string" or not type(xp) == "number" then ./yl_commons/tools/sherlock_magnifier.lua:85: if not p_name or not type(p_name) == "string" or not rb[p_name] then ./yl_commons/util/stopwords.lua:2: if not s or not type(s) == "string" then ./yl_events/tribe_miocene.lua:362: if not nodedef or not nodedef.name or not nodedef.name == "air" then ./yl_events/tribe_miocene.lua:392: if not nodedef or not nodedef.name or not nodedef.name == "air" then ./yl_exhibition/chatcommands.lua:37: if not dialog or not type(dialog) == "table" then ./yl_exhibition/chatcommands.lua:43: if not option or not type(option) == "string" then ./yl_faq/internal.lua:65: if not faq_entry or not type(faq_entry) == "table" then ./yl_faq/internal.lua:105: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:111: if not sa_param or not type(sa_param) == "table" or not sa_param[4] then ./yl_faq/internal.lua:208: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:261: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:296: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:331: if not name or not minetest.player_exists(name) or not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:379: if not fl or not type(fl) == "table" or #fl > yl_faq.max_list then ./yl_faq/internal.lua:383: if not fl or not type(fl) == "table" or not fl[1] then ./yl_faq/internal.lua:399: if not param or not type(param) == "string" or param == "" then ```
AliasAlreadyTaken added the
1. kind/bug
2. prio/interesting
labels 2023-05-18 21:32:41 +00:00
Member

yikes, most of this is bad stuff. there's a couple of examples which aren't errors, nearly all of them from "i18n.py", where it's a discouraged pattern and not a logic error.

yikes, most of this is bad stuff. there's a couple of examples which aren't errors, nearly all of them from "i18n.py", where it's a discouraged pattern and not a logic error.
Member

I've synced the mods and did a new grep. List above is now updated.

I've synced the mods and did a new grep. List above is now updated.
Member
  • ./yl_commons/features/interpolate_planting.lua:153: if offset.y ~= 0 and not xor(offset.x == 0, offset.z == 0) then

    there's a logic error here, but it's that and should be or (also, not xor is equality, so that can be simplified). fixed in c4e4c89178

* `./yl_commons/features/interpolate_planting.lua:153: if offset.y ~= 0 and not xor(offset.x == 0, offset.z == 0) then` there's a logic error here, but it's that `and` should be `or` (also, `not xor` is equality, so that can be simplified). fixed in https://gitea.your-land.de/your-land/yl_commons/commit/c4e4c89178175bd15c0095b54f7370cb1c174082
flux added the
3. source/mod upstream
4. step/at work
4. step/blocked
labels 2023-05-19 17:30:13 +00:00
Member
upstream PR against MTG https://github.com/minetest/minetest_game/pull/3032
Member

fix for our beds fork: 0acbc17e30

fix for our beds fork: https://gitea.your-land.de/your-land/beds/commit/0acbc17e30e56ab3315d51506df62d4134f68d18
flux added the
4. step/partially fixed
label 2023-05-19 17:44:29 +00:00
Member

upstream issue for worldedit additions https://github.com/sbrl/Minetest-WorldEditAdditions/issues/93

no PR cuz i'm not sure what the correct code is.

upstream issue for worldedit additions https://github.com/sbrl/Minetest-WorldEditAdditions/issues/93 no PR cuz i'm not sure what the correct code is.
Member

aerotest: false positive (the bad code is in a comment...)

canons: upstream PR https://bitbucket.org/fluxionary/minetest-cannons/pull-requests/1

aerotest: false positive (the bad code is in a comment...) canons: upstream PR https://bitbucket.org/fluxionary/minetest-cannons/pull-requests/1
Member
PR for personal_log: https://github.com/minetest-mods/personal_log/pull/8
Member
water_life PR: https://github.com/berengma/water_life/pull/92
Member

think that's all the upstream issues. @AliasAlreadyTaken, do you want to take care of fixing the things in your code?

think that's all the upstream issues. @AliasAlreadyTaken, do you want to take care of fixing the things in your code?
flux removed the
4. step/at work
label 2023-05-19 18:43:28 +00:00
Author
Owner

think that's all the upstream issues. @AliasAlreadyTaken, do you want to take care of fixing the things in your code?

Yesh, I'll do that :D

If there are more bad patterns, please do tell.

We should maybe use a luacheck more often and not greenlight a mod or code that doesn't pass it.

> think that's all the upstream issues. @AliasAlreadyTaken, do you want to take care of fixing the things in your code? Yesh, I'll do that :D If there are more bad patterns, please do tell. We should maybe use a luacheck more often and not greenlight a mod or code that doesn't pass it.
Member

We should maybe use a luacheck more often and not greenlight a mod or code that doesn't pass it.

i'm "religiously" using luacheck, stylua, and pre-commit to do basic linting on all my mods at this point. these things aren't a guarantee against bugs, but until we've got better minetest automated testing (i'm working on that too), they're the best option we've got.

> We should maybe use a luacheck more often and not greenlight a mod or code that doesn't pass it. i'm "religiously" using luacheck, stylua, and pre-commit to do basic linting on all my mods at this point. these things aren't a guarantee against bugs, but until we've got better minetest automated testing (i'm working on that too), they're the best option we've got.
Author
Owner

Can you maybe write a short guide for the noobs like me how you use them?

Coz if a religion is gud, I'll gladly join.

Can you maybe write a short guide for the noobs like me how you use them? Coz if a religion is gud, I'll gladly join.
Member

Can you maybe write a short guide for the noobs like me how you use them?

Coz if a religion is gud, I'll gladly join.

i wrote a brief guide: https://gitea.your-land.de/your-land/bugtracker/wiki/luacheck%2C-stylua%2C-pre-commit

> Can you maybe write a short guide for the noobs like me how you use them? > > Coz if a religion is gud, I'll gladly join. i wrote a brief guide: https://gitea.your-land.de/your-land/bugtracker/wiki/luacheck%2C-stylua%2C-pre-commit
AliasAlreadyTaken added this to the 1.1.120 milestone 2023-05-20 18:20:54 +00:00
AliasAlreadyTaken added this to the Alias@work project 2023-05-20 18:20:58 +00:00
Member

PR for personal_log: https://github.com/minetest-mods/personal_log/pull/8

this was merged

> PR for personal_log: https://github.com/minetest-mods/personal_log/pull/8 this was merged
Member

upstream issue for worldedit additions https://github.com/sbrl/Minetest-WorldEditAdditions/issues/93

no PR cuz i'm not sure what the correct code is.

supposedly fixed

> upstream issue for worldedit additions https://github.com/sbrl/Minetest-WorldEditAdditions/issues/93 > > no PR cuz i'm not sure what the correct code is. supposedly fixed
Author
Owner
./yl_commons/chatcommands/bailiff_votes.lua:85:            if not param or not type(param) == "string" or param == "" then
./yl_commons/chatcommands/bailiff_votes.lua:91:            if not sa_param or not type(sa_param) == "table" or not sa_param[2] then
./yl_commons/chatcommands/bailiff_votes.lua:101:            if not dialog or not type(dialog) == "string" then
./yl_commons/chatcommands/bailiff_votes.lua:107:            if not options_d2 or not type(options_d2) == "string" then
./yl_commons/chatcommands/bailiff_votes.lua:113:            if not option_single or not type(option_single) == "string" then

Fixed in 72b6d1c92e

./yl_commons/items/entitytools.lua:25:        if not pointed_thing or not pointed_thing.type or not pointed_thing.type == "object" or not pointed_thing.ref

Fixed in 73d65894aa

./yl_commons/items/xp.lua:15:    if not type(name) == "string" or not type(xp) == "number" then

Fixed in eca833c82e

./yl_commons/tools/sherlock_magnifier.lua:85:    if not p_name or not type(p_name) == "string" or not rb[p_name] then

Fixed in eccf499970

./yl_commons/util/stopwords.lua:2:    if not s or not type(s) == "string" then

Fixed in 15a7a67c46

./yl_events/tribe_miocene.lua:362:    if not nodedef or not nodedef.name or not nodedef.name == "air" then
./yl_events/tribe_miocene.lua:392:    if not nodedef or not nodedef.name or not nodedef.name == "air" then

Fixed in 15a7a67c46

./yl_exhibition/chatcommands.lua:37:            if not dialog or not type(dialog) == "table" then
./yl_exhibition/chatcommands.lua:43:            if not option or not type(option) == "string" then

Fixed in 1431e8dc07

./yl_faq/internal.lua:65:        if not faq_entry or not type(faq_entry) == "table" then
./yl_faq/internal.lua:105:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:111:    if not sa_param or not type(sa_param) == "table" or not sa_param[4] then
./yl_faq/internal.lua:208:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:261:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:296:    if not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:331:    if not name or not minetest.player_exists(name) or not param or not type(param) == "string" or param == "" then
./yl_faq/internal.lua:379:    if not fl or not type(fl) == "table" or #fl > yl_faq.max_list then
./yl_faq/internal.lua:383:    if not fl or not type(fl) == "table" or not fl[1] then
./yl_faq/internal.lua:399:    if not param or not type(param) == "string" or param == "" then

Fixed in bb6c79c05e

``` ./yl_commons/chatcommands/bailiff_votes.lua:85: if not param or not type(param) == "string" or param == "" then ./yl_commons/chatcommands/bailiff_votes.lua:91: if not sa_param or not type(sa_param) == "table" or not sa_param[2] then ./yl_commons/chatcommands/bailiff_votes.lua:101: if not dialog or not type(dialog) == "string" then ./yl_commons/chatcommands/bailiff_votes.lua:107: if not options_d2 or not type(options_d2) == "string" then ./yl_commons/chatcommands/bailiff_votes.lua:113: if not option_single or not type(option_single) == "string" then ``` Fixed in https://gitea.your-land.de/your-land/yl_commons/commit/72b6d1c92e590047fb39ee07b092b95ca5680972 ``` ./yl_commons/items/entitytools.lua:25: if not pointed_thing or not pointed_thing.type or not pointed_thing.type == "object" or not pointed_thing.ref ``` Fixed in https://gitea.your-land.de/your-land/yl_commons/commit/73d65894aabedf5167f0e0504923340fa9521e03 ``` ./yl_commons/items/xp.lua:15: if not type(name) == "string" or not type(xp) == "number" then ``` Fixed in https://gitea.your-land.de/your-land/yl_commons/commit/eca833c82efced34945763b2fc444a5b3a7b0fcd ``` ./yl_commons/tools/sherlock_magnifier.lua:85: if not p_name or not type(p_name) == "string" or not rb[p_name] then ``` Fixed in https://gitea.your-land.de/your-land/yl_commons/commit/eccf499970da93bcdc6c7b57cd42071e88e63c4b ``` ./yl_commons/util/stopwords.lua:2: if not s or not type(s) == "string" then ``` Fixed in https://gitea.your-land.de/your-land/yl_commons/commit/15a7a67c4604edf4668b44651750ea7a74d922be ``` ./yl_events/tribe_miocene.lua:362: if not nodedef or not nodedef.name or not nodedef.name == "air" then ./yl_events/tribe_miocene.lua:392: if not nodedef or not nodedef.name or not nodedef.name == "air" then ``` Fixed in https://gitea.your-land.de/your-land/yl_commons/commit/15a7a67c4604edf4668b44651750ea7a74d922be ``` ./yl_exhibition/chatcommands.lua:37: if not dialog or not type(dialog) == "table" then ./yl_exhibition/chatcommands.lua:43: if not option or not type(option) == "string" then ``` Fixed in https://gitea.your-land.de/your-land/yl_exhibition/commit/1431e8dc077e111270c9569ab07ea17cef6a4ba0 ``` ./yl_faq/internal.lua:65: if not faq_entry or not type(faq_entry) == "table" then ./yl_faq/internal.lua:105: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:111: if not sa_param or not type(sa_param) == "table" or not sa_param[4] then ./yl_faq/internal.lua:208: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:261: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:296: if not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:331: if not name or not minetest.player_exists(name) or not param or not type(param) == "string" or param == "" then ./yl_faq/internal.lua:379: if not fl or not type(fl) == "table" or #fl > yl_faq.max_list then ./yl_faq/internal.lua:383: if not fl or not type(fl) == "table" or not fl[1] then ./yl_faq/internal.lua:399: if not param or not type(param) == "string" or param == "" then ``` Fixed in https://gitea.your-land.de/your-land/yl_faq/commit/bb6c79c05e4fa101fa5d29c0edd072ac7cc890b7
Author
Owner

@whosit Want to do us the honour and run it again?

@whosit Want to do us the honour and run it again?
Member
$  grep . -n -ri -E -e 'not [^(][^ ]+ ==' --exclude='*.py'                                          [20:54:52 Сб 03 июн 2023]
./Minetest-WorldEditAdditions/worldeditadditions_commands/commands/meta/for.lua:57:		if not parts[1] == "" then
./aerotest/entity.lua:112:		if (meal > self.hunger) and aerotest.hunter then --and not self.action == "range" then
./cannons/functions.lua:179:	if not node or not type(node) == "table" then
./personal_log/init.lua:353:	if not itemstack:get_name():sub(1,ccompass_prefix_length) == ccompass_prefix then
./water_life/api.lua:248:		if not entity or not entity.name == "__builtin:item" then
./water_life/crafts.lua:117:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:143:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:168:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:198:						if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:226:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:251:				if not pointed_thing.type == "node" then return itemstack end
./water_life/crafts.lua:275:				if not pointed_thing.type == "node" then return itemstack end

  • worldedit upstream does not have that line anymore
  • aerotest is false positive
  • cannons is fixed upstream (I get 404 on flux's link) (sorry, got confused)
  • personal_log merged flux's PR
  • water_life is fixed upstream
```lua $ grep . -n -ri -E -e 'not [^(][^ ]+ ==' --exclude='*.py' [20:54:52 Сб 03 июн 2023] ./Minetest-WorldEditAdditions/worldeditadditions_commands/commands/meta/for.lua:57: if not parts[1] == "" then ./aerotest/entity.lua:112: if (meal > self.hunger) and aerotest.hunter then --and not self.action == "range" then ./cannons/functions.lua:179: if not node or not type(node) == "table" then ./personal_log/init.lua:353: if not itemstack:get_name():sub(1,ccompass_prefix_length) == ccompass_prefix then ./water_life/api.lua:248: if not entity or not entity.name == "__builtin:item" then ./water_life/crafts.lua:117: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:143: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:168: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:198: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:226: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:251: if not pointed_thing.type == "node" then return itemstack end ./water_life/crafts.lua:275: if not pointed_thing.type == "node" then return itemstack end ``` - worldedit upstream does not have that line anymore - aerotest is false positive - ~~cannons is fixed upstream (I get 404 on flux's link)~~ (sorry, got confused) - personal_log merged flux's PR - water_life is fixed upstream
Member
  • cannons is fixed upstream (I get 404 on flux's link)

is it? apparently (1) my repo was private (2) i opened a PR against my own repo, not upstream. bitbucket confuses me.

new PR for cannons: https://bitbucket.org/kingarthursteam/cannons/pull-requests/1

> - cannons is fixed upstream (I get 404 on flux's link) is it? apparently (1) my repo was private (2) i opened a PR against my own repo, not upstream. bitbucket confuses me. new PR for cannons: https://bitbucket.org/kingarthursteam/cannons/pull-requests/1
AliasAlreadyTaken removed this from the Alias@work project 2023-07-21 15:28:40 +00:00
Author
Owner

Means, except cannons (which we most likely need to adopt) everything is fixed?

Means, except cannons (which we most likely need to adopt) everything is fixed?
Author
Owner

QA: After a brief look at a lot of code: yay! Most of the fixes will be delivered with 1.1.120, but let's hold off on closing it until the last one is done as well.

QA: After a brief look at a lot of code: yay! Most of the fixes will be delivered with 1.1.120, but let's hold off on closing it until the last one is done as well.
AliasAlreadyTaken removed this from the 1.1.120 milestone 2023-08-28 09:23:13 +00:00
Author
Owner

The upstream maintainer of cannons didn't show any reaction for more than 6 month, we'll most likely have to adopt the mod. In a fit of rage I fixed the issue in the cannons mod directly in the way suggested in the PR, so we can finally close this.

Since we already QA'ed all the other occurrences, this QA is successful if cannons can still be placed, fired and especially dug in various forms.

The upstream maintainer of cannons didn't show any reaction for more than 6 month, we'll most likely have to adopt the mod. In a fit of rage I fixed the issue in the cannons mod directly in the way suggested in the PR, so we can finally close this. Since we already QA'ed all the other occurrences, this QA is successful if cannons can still be placed, fired and especially dug in various forms.
AliasAlreadyTaken added the
4. step/ready to QA test
label 2023-12-08 07:35:55 +00:00
AliasAlreadyTaken added this to the 1.1.122 milestone 2023-12-08 07:35:58 +00:00
Author
Owner

QA

Cannons and the digging part were tested by Parrish and found OK

QA Cannons and the digging part were tested by Parrish and found OK
AliasAlreadyTaken added
ugh/QA OK
and removed
4. step/blocked
4. step/partially fixed
labels 2023-12-09 02:11:56 +00:00
flux added
5. result/fixed
and removed
4. step/ready to QA test
labels 2023-12-17 23:11:46 +00:00
Member

assuming all this is live

assuming all this is live
flux closed this issue 2023-12-17 23:12:32 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: your-land/bugtracker#4535
No description provided.