Parsing fails: no files to parse

Describe the bug
When opening a project, parsing fails with the message "Parsing all files via makefile Makefile.t3m failed: No files to parse. Aborting operation". This happens with existing projects that can run on TADS 3 workbench, but also with a fresh project generated with vscode-tads3tools.
To Reproduce
Steps to reproduce the behavior:

Start VS Code
Open project folder

Expected behavior
Parsing should work, symbols should appear etc.
Screenshots
Not applicable
Desktop (please complete the following information):

OS: Windows 10
Browser Chrome
Version VS Code 1.59.1
vscode-tads3tools Released on
22.8.2021, 20:11:36
Last updated
27.8.2021, 20:02:36

Additional context
I corrected all paths in the settings to their windows counterparts, but the problem persists.

Hi! Thanks for the bug report!
I created a game with the tads3 workbench and then opened the same folder in vscode-tads3tools. Game was parsed and the outliner showed the result. So I need some additional info.
Could you please check the logs from the language server by opening up View/Output and select “Tads3 Language Server” in the selector.
I’m suspecting an issue with folder privileges and/or file path, so at least it would be useful to know the path of the project? Have you tried creating a project in your user folder or anywhere else?
Otherwise it can be good to know that if the game can’t compile the first time around the parsing wont proceed either (but you should in that case see some diagnostics telling you why) So please verify you can also build the project.

One additional thought. Did you really use the “open folder” functionality or instead opened a single file within the folder?

Thank you for the prompt response! Here are the logs from the language
server. Only thing I noticed somehow is the line where it prints "adv3Lite"
while I use "adv3" (I'm new to TADS, so I don't know much about
the difference).
If that helps, I've uploaded the zipped project (it's not large) to
https://drive.google.com/file/d/1ow6r71yCW-kAEX2FyIG0tNUfVYh9X6qo/view?usp=sharing
Thanks a lot
Jost
[Info  - 07:57:58] Trying to locate a default makefile
[Info  - 07:57:58] Found a makefile:
d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\HagdornMystery.t3m
[Info  - 07:57:58] Setting up t3 image monitor
[Info  - 07:57:58] Diagnosing
[Info  - 07:57:58] Diagnosing went by with no errors
[Info  - 07:57:58] Preprocess and parse all documents
Done analyzing makefile
adv3Lite
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools"
exists
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools.cache\adv3"
exists
0 number of preprocessed lines mapped in 0 ms
Counting row lines done in 0 ms
Postprocessing row lines done in 0 ms
No files to parse. Aborting operation
[Info  - 07:58:04] Last chosen editor changed to:
file:///d%3A/Benutzerverzeichnisse/jost/Dokumente/TADS/HagdornMystery/HagdornMystery.t
[Info  - 07:58:12] Last chosen editor changed to: output:tasks
[Info  - 07:58:16] Last chosen editor changed to:
file:///d%3A/Benutzerverzeichnisse/jost/Dokumente/TADS/HagdornMystery/HagdornMystery.t
[Info  - 07:58:20] Last chosen editor changed to:
output:extension-output-toerob.vscode-tads3tools-%231
Am Fr., 3. Sept. 2021 um 07:36 Uhr schrieb Tomas Öberg <
@.***>:

Hi! Thanks for the bug report!
I created a game with the tads3 workbench and then opened the same folder
in vscode-tads3tools. Game was parsed and the outliner showed the result.
So I need some additional info.
Could you please check the logs from the language server by opening up
View/Output and select “Tads3 Language Server” in the selector.
I’m suspecting an issue with folder privileges and/or file path, so at
least it would be useful to know the path of the project? Have you tried
creating a project in your user folder or anywhere else?
Otherwise it can be good to know that if the game can’t compile the first
time around the parsing wont proceed either (but you should in that case
see some diagnostics telling you why) So please verify you can also build
the project.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-912269832,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGLUPPUMKFZEUUXTJYLUABNF5ANCNFSM5DK35B4Q
.

Yes, I used "open folder"
Am Fr., 3. Sept. 2021 um 08:01 Uhr schrieb Tomas Öberg <
@.***>:

One additional thought. Did you really use the “open folder” functionality
or instead opened a single file within the folder?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-912279851,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGMLTBJW6XDN2OXERULUABQCLANCNFSM5DK35B4Q
.

I see, that explains it. My algorithm for deciding which type of project it seems to need some tweaking. Many thanks for the files. I’ll take a look during weekend and fix it.

Great, thanks a lot!
Tomas Öberg @.***> schrieb am Fr., 3. Sept. 2021, 09:45:

I see, that explains it. My algorithm for deciding which type of project
it seems to need some tweaking. Many thanks for the files. I’ll take a look
during weekend and fix it.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-912331321,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGP6KDOPIZIDIE4OEMTUAB4J3ANCNFSM5DK35B4Q
.

I did a few different changes. (All related to the differencies between windows vs unix/linux file path conventions.) Your project parses fine now on my machine, if it still doesn't on your machine, try to clear the cache first (via the command to do so) and then either restart vscode or run the command to set the makefile (if there's only one you won't get to choose). That should trigger a reparse of all library files. (Might take a minute or so.)
I'll keep testing around for more bugs until I do a proper release this weekend (I have a few other things that I might possibly want to include as well until then).  But if you like you can try and see if this (preview) vsix-package works better until then. If you do that, remember to uninstall the first extension first before installing this. And please let me know if it either works better or worse.
https://drive.google.com/file/d/1KINbK3jVx5f9SRjMXrHX_BPMUg4fW62s/view?usp=sharing
(https://code.visualstudio.com/docs/editor/extension-marketplace#_install-from-a-vsix)

Thanks! I tried and it doesn't work yet, unfortunately. Same error message,
here's the logs, it now correctly recognizes the library:
[Info  - 18:42:59] Trying to locate a default makefile
[Info  - 18:42:59] Found a makefile:
d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\HagdornMystery.t3m
[Info  - 18:42:59] Setting up t3 image monitor
[Info  - 18:42:59] Diagnosing
[Info  - 18:42:59] Diagnosing went by with no errors
[Info  - 18:42:59] Preprocess and parse all documents
Done analyzing makefile
Project using standard adv3 library
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools"
exists
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools.cache\adv3"
exists
0 number of preprocessed lines mapped in 0 ms
Counting row lines done in 0 ms
Postprocessing row lines done in 0 ms
No files to parse. Aborting operation
Am Fr., 3. Sept. 2021 um 22:27 Uhr schrieb Tomas Öberg <
@.***>:

I did a few different changes. (All related to the differencies between
windows vs unix/linux file path conventions.) Your project parses fine now
on my machine, if it still doesn't on your machine, try to clear the
cache first (via the command to do so) and then either restart vscode or
run the command to set the makefile (if there's only one you won't get
to choose). That should trigger a reparse of all library files. (Might take
a minute or so.)
I'll keep testing around for more bugs until I do a proper release this
weekend (I have a few other things that I might possibly want to include as
well until then). But if you like you can try and see if this (preview)
vsix-package works better until then. If you do that, remember to uninstall
the first extension first before installing this. And please let me know if
it either works better or worse.
https://drive.google.com/file/d/1KINbK3jVx5f9SRjMXrHX_BPMUg4fW62s/view?usp=sharing
(
https://code.visualstudio.com/docs/editor/extension-marketplace#_install-from-a-vsix
)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-912792515,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGO33LPNLRIGBNVB33TUAEVU5ANCNFSM5DK35B4Q
.

I should have added: I did clear the cache and tried both setting makefile
as well as restarting VS Code.
Am Sa., 4. Sept. 2021 um 18:44 Uhr schrieb Jost Schenck <
@.***>:

Thanks! I tried and it doesn't work yet, unfortunately. Same error
message, here's the logs, it now correctly recognizes the library:
[Info  - 18:42:59] Trying to locate a default makefile
[Info  - 18:42:59] Found a makefile: d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\HagdornMystery.t3m
[Info  - 18:42:59] Setting up t3 image monitor
[Info  - 18:42:59] Diagnosing
[Info  - 18:42:59] Diagnosing went by with no errors
[Info  - 18:42:59] Preprocess and parse all documents
Done analyzing makefile
Project using standard adv3 library
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools" exists
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools.cache\adv3" exists
0 number of preprocessed lines mapped in 0 ms
Counting row lines done in 0 ms
Postprocessing row lines done in 0 ms
No files to parse. Aborting operation
Am Fr., 3. Sept. 2021 um 22:27 Uhr schrieb Tomas Öberg <
@.***>:

I did a few different changes. (All related to the differencies between
windows vs unix/linux file path conventions.) Your project parses fine now
on my machine, if it still doesn't on your machine, try to clear the
cache first (via the command to do so) and then either restart vscode
or run the command to set the makefile (if there's only one you won't
get to choose). That should trigger a reparse of all library files. (Might
take a minute or so.)
I'll keep testing around for more bugs until I do a proper release this
weekend (I have a few other things that I might possibly want to include as
well until then). But if you like you can try and see if this
(preview) vsix-package works better until then. If you do that, remember to
uninstall the first extension first before installing this. And please let
me know if it either works better or worse.
https://drive.google.com/file/d/1KINbK3jVx5f9SRjMXrHX_BPMUg4fW62s/view?usp=sharing
(
https://code.visualstudio.com/docs/editor/extension-marketplace#_install-from-a-vsix
)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-912792515,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGO33LPNLRIGBNVB33TUAEVU5ANCNFSM5DK35B4Q
.

That’s unfortunate. I should mention I had to change the files linked earlier since there was a few exits that weren’t defined and caused compilation to fail. “Hallway” for instance. But maybe this wasnt a complete set of files, just a portion of the game?
other than that I wonder if you have set up global environment variables so the std libraries can be found, e.g
%TADS_HOME% - your tads3 folder
%TADS_HOME%\bin
%TADS_HOME%\include
I’m not entirely sure right now (and not at the computer), but I believe tads3 workbench have settings for this and doesn’t  depend on those global environment variables, but the vscode extension either needs that to be setup to get relative directories like adv3/adv3 to work, or use the -FI and/or -FL flag to setup the include/library folders with absolute paths. Hope that help. I’ll investigate further.

The easiest to check this is just to enter the game folder and run “t3make -f HagdornMystery.t3m” on the command line. If it can compile there the extension should work too.

I very much appreciate your help, thank you! Maybe I found something.
First of all: I had sent all existing files -- I had just started this and
TADS would just give a warning but still compile, so I didn't think about
that. I now set the environment variables (before I had configured absolute
paths in the extension settings and thought that was enough) and restarted
vs code, “t3make -f HagdornMystery.t3m” does compile correctly. The error
persists with the same output.
However, after looking over the extension source code (the amateur way, I'm
not experienced in vs code extension and not even in
javascript/typescript), I turned on the "Parse only the workspace files"
setting to get the following debugging output:
Only parses files with base directory:
\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\hagdornmystery.t3m
On windows, however, this should begin with a drive letter, so in this case
it should read D:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\hagdornmystery.t3m
I'm pretty much sure this is the problem.
Am Sa., 4. Sept. 2021 um 20:50 Uhr schrieb Tomas Öberg <
@.***>:

The easiest to check this is just to enter the game folder and run “t3make
-f HagdornMystery.t3m” on the command line. If it can compile there the
extension should work too.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913021237,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGJ3PGPS3QWCPASPC6LUAJS6NANCNFSM5DK35B4Q
.

And I appreciate your help! This is really valuable feedback and exactly what I need to make the extension better. I had similar issues before when trying to adapt the extension for windows, the way file paths got rendered vs on linux/mac. I had mistakingly used URI.parse instead of URI.file here, same as then. I just don't get why it works here for me. I even put the project on an exactly similar path on my d: drive, and still it parsed through. But never mind that. I compiled another VSIX if you like to try. This one sets the base-directory correctly.
https://drive.google.com/file/d/1oW6AbnqYq_velKZNOt1eFj3pRMhPbu1b/view?usp=sharing

Getting closer, but still doesn't find anything...
[Info  - 00:02:13] Trying to locate a default makefile
[Info  - 00:02:13] Found a makefile:
d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\hagdornmystery.t3m
[Info  - 00:02:13] Setting up t3 image monitor
[Info  - 00:02:13] Diagnosing
[Info  - 00:02:13] Diagnosing went by with no errors
[Info  - 00:02:13] Preprocess and parse all documents
Done analyzing makefile
Project using standard adv3 library
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools"
exists
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools.cache\adv3"
exists
0 number of preprocessed lines mapped in 0 ms
Counting row lines done in 0 ms
Postprocessing row lines done in 0 ms
Settin up base directory for project:
d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery
Only parses files with base directory:
d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery

No files to parse. Aborting operation
Am Sa., 4. Sept. 2021 um 23:59 Uhr schrieb Tomas Öberg <
@.***>:

And I appreciate your help! This is really valuable feedback and exactly
what I need to make the extension better. I had similar issues before when
trying to adapt the extension for windows, the way file paths got rendered
vs on linux/mac. I had mistakingly used URI.parse instead of URI.file here,
same as then. I just don't get why it works here for me. I even put the
project on an exactly similar path on my d: drive, and still it parsed
through. But never mind that. I compiled another VSIX if you like to try.
This one sets the base-directory correctly.
https://drive.google.com/file/d/1oW6AbnqYq_velKZNOt1eFj3pRMhPbu1b/view?usp=sharing
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913046341,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGNED236KBNIJ5HXVJDUAKJDLANCNFSM5DK35B4Q
.

I compiled the current github version to experiment a little bit and it
seems not just about the base directory, but the preprocessedFilesCacheMap
isn't populated with any paths in the first place.
I've never developed a VS Code extension and I have no idea how to properly
debug these to understand what happens :)
The jest tests at least all pass here.
Am So., 5. Sept. 2021 um 00:04 Uhr schrieb Jost Schenck <
@.***>:

Getting closer, but still doesn't find anything...
[Info  - 00:02:13] Trying to locate a default makefile
[Info  - 00:02:13] Found a makefile: d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\hagdornmystery.t3m
[Info  - 00:02:13] Setting up t3 image monitor
[Info  - 00:02:13] Diagnosing
[Info  - 00:02:13] Diagnosing went by with no errors
[Info  - 00:02:13] Preprocess and parse all documents
Done analyzing makefile
Project using standard adv3 library
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools" exists
Ensuring "c:\Users\Windows\AppData\Roaming\Code\User\globalStorage\toerob.vscode-tads3tools.cache\adv3" exists
0 number of preprocessed lines mapped in 0 ms
Counting row lines done in 0 ms
Postprocessing row lines done in 0 ms
Settin up base directory for project: d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery
Only parses files with base directory: d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery

No files to parse. Aborting operation
Am Sa., 4. Sept. 2021 um 23:59 Uhr schrieb Tomas Öberg <
@.***>:

And I appreciate your help! This is really valuable feedback and exactly
what I need to make the extension better. I had similar issues before when
trying to adapt the extension for windows, the way file paths got rendered
vs on linux/mac. I had mistakingly used URI.parse instead of URI.file here,
same as then. I just don't get why it works here for me. I even put the
project on an exactly similar path on my d: drive, and still it parsed
through. But never mind that. I compiled another VSIX if you like to try.
This one sets the base-directory correctly.
https://drive.google.com/file/d/1oW6AbnqYq_velKZNOt1eFj3pRMhPbu1b/view?usp=sharing
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913046341,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGNED236KBNIJ5HXVJDUAKJDLANCNFSM5DK35B4Q
.

Seems to be failing with the preprocessing,
I'm wondering what happens if you run the command:
t3make -P -q -f "d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\HagdornMystery.t3m"
in a command line terminal (for instance in vscode) exactly as it is written?
If it works you should see a seemingly endless stream of preprocessed text running by (that you can abort with ctrl-c)
If it fails with some error message it might be that t3make cannot be reached globally, in that case either add a global enviroment path for your install directory of tads3,  e.g: "C:\Program Files\TADS3" or change the setting tads3.compiler.path in the extension settings in vscode to the absolute path, e.g: "C:\Program Files\TADS3\t3make.exe"

I did this and it looks fine to me, just endless preprocessor output.
Am So., 5. Sept. 2021 um 00:43 Uhr schrieb Tomas Öberg <
@.***>:

Seems to be failing with the preprocessing,
I'm wondering what happens if you run the command:
t3make -P -q -f
"d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\HagdornMystery.t3m"
in a command line terminal (for instance in vscode) exactly as it is
written?
If it works you should see a seemingly endless stream of preprocessed text
running by (that you can abort with ctrl-c)
If it fails with some error message it might be that t3make cannot be
reached globally, in that case either add a global enviroment path for your
install directory of tads3, e.g: "C:\Program Files\TADS3" or change the
setting tads3.compiler.path in the extension settings in vscode to the
absolute path, e.g: "C:\Program Files\TADS3\t3make.exe"
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913050051,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGMXJWJHRYOVQXZSDVLUAKOIHANCNFSM5DK35B4Q
.

Hm, I'll continue tomorrow. Would be interesting to see if you can fetch a few "#line " from that output, I wonder if it somehow can't parse that line how the path might in that case look different on your system. Some debugging around on line 55, 56 might reveal what goes wrong.

Here's the output:
https://drive.google.com/file/d/1OWPPojdkgGLAHLpRrV7qS4HF9o9u0K-u/view?usp=sharing
Seeing some '\n' I wondered whether this might be some unix vs windows line
feed problem, but a result.split(/\r?\n/)  instead of /\n/ didn't help.
Am So., 5. Sept. 2021 um 00:50 Uhr schrieb Jost Schenck <
@.***>:

I did this and it looks fine to me, just endless preprocessor output.
Am So., 5. Sept. 2021 um 00:43 Uhr schrieb Tomas Öberg <
@.***>:

Seems to be failing with the preprocessing,
I'm wondering what happens if you run the command:
t3make -P -q -f
"d:\Benutzerverzeichnisse\jost\Dokumente\TADS\HagdornMystery\HagdornMystery.t3m"
in a command line terminal (for instance in vscode) exactly as it is
written?
If it works you should see a seemingly endless stream of preprocessed
text running by (that you can abort with ctrl-c)
If it fails with some error message it might be that t3make cannot be
reached globally, in that case either add a global enviroment path for your
install directory of tads3, e.g: "C:\Program Files\TADS3" or change the
setting tads3.compiler.path in the extension settings in vscode to the
absolute path, e.g: "C:\Program Files\TADS3\t3make.exe"
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913050051,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGMXJWJHRYOVQXZSDVLUAKOIHANCNFSM5DK35B4Q
.

I'm embarrassed. I obviously didn't know that in VS code settings a path
should be enclosed in quotes, when there are spaces in there (which there
always are in windows "Program (x86)" directory). Adding quotes there let
the rest pass.
Symbol outline doesn't show up after parsing, but that'll be another
problem. I am sorry to have wasted so much of your time ...
Am So., 5. Sept. 2021 um 00:58 Uhr schrieb Tomas Öberg <
@.***>:

Hm, I'll continue tomorrow. Would be interesting to see if you can fetch a
few "#line " from that output, I wonder if it somehow can't parse that line
how the path might in that case look different on your system. Some
debugging around on line 55, 56 might reveal what goes wrong.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913051498,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGNAMDS555KJKOTAIY3UAKQC7ANCNFSM5DK35B4Q
.

Which path. “t3make”? No problems at all, we have found several bugs thanks to this conversation! And the extension should adapt to its users, not the other way around. I’m thinking it might be good to add a few control checks here and there to validate paths and that t3make can be found etc...

I’m going to change this row:
const commandLine = ${t3makeCompilerPath} -P -q -f "${chosenMakefilePath}";
To:
const commandLine = ”${t3makeCompilerPath}” -P -q -f "${chosenMakefilePath}";
Users shouldn’t need to bother with broken paths :)

Perfect. Thanks a lot for offering such a tool for free and being that
engaged with it :)
Am So., 5. Sept. 2021 um 07:50 Uhr schrieb Tomas Öberg <
@.***>:

I’m going to change this row:
const commandLine = ${t3makeCompilerPath} -P -q -f "${chosenMakefilePath}"
;
To:
const commandLine = ”${t3makeCompilerPath}” -P -q -f
"${chosenMakefilePath}";
Users shouldn’t need to bother with broken paths :)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913091320,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGI6NATMDTYSJC6GZWLUAMAK7ANCNFSM5DK35B4Q
.

 What can I say :) I truly care for tads3 and I wish to lower the treshold for newcomers, in order for them to see how great the system is. I think it truly deserves that!
No progress with the outliner though? I like suggest a clear cache and restart if you haven't already tried that.

Interestingly, the visual editor worked for a while (and looked cool!), but
now only finds the starting room anymore; when trying to parse again, I get
the message that it cannot reparse now, since a full project parsing is
already in progress Try again later.
[Info  - 11:48:43] Refresh map view
[Info  - 11:48:43] Updating webview with new symbols
Found symbol: hallway
[Info  - 11:48:50] Diagnosing
[Info  - 11:48:50] Diagnosing went by with no errors
[Info  - 11:48:50] Skipping parsing since long processing is in action
Found symbol: hagdornMuhrenkamp
[Info  - 11:49:14] Diagnosing
[Info  - 11:49:14] Diagnosing went by with no errors
[Info  - 11:49:14] Skipping parsing since long processing is in action
[Error - 11:49:19] Cannot connect rooms: frontOfHouse with undefined
via west/east
Found symbol: hagdornAdolfstrasse
[Info  - 11:49:35] Diagnosing
[Info  - 11:49:35] Diagnosing went by with no errors
[Info  - 11:49:35] Skipping parsing since long processing is in action
[Error - 11:49:39] Cannot connect rooms: frontOfHouse with undefined
via east/west
[Info  - 11:49:48] Last chosen editor changed to:
file:///d%3A/Benutzerverzeichnisse/jost/Dokumente/TADS/HagdornMystery/HagdornMystery.t
[Info  - 11:49:56] Refresh map view
[Info  - 11:49:56] Updating webview with new symbols
[Info  - 11:49:56] Updating webview with new symbols
[Info  - 11:49:57] Updating webview with new symbols
[Info  - 11:49:58] Updating webview with new symbols
[Info  - 11:49:58] Updating webview with new symbols
[Info  - 11:50:09] Last chosen editor changed to:
output:extension-output-toerob.vscode-tads3tools-%231
[Info  - 11:51:27] Last chosen editor changed to:
file:///d%3A/Benutzerverzeichnisse/jost/Dokumente/TADS/HagdornMystery/HagdornMystery.t
[Info  - 11:51:35] Diagnosing
[Info  - 11:52:39] Last chosen editor changed to:
output:extension-output-toerob.vscode-tads3tools-%231
Am So., 5. Sept. 2021 um 11:41 Uhr schrieb Jost Schenck <
@.***>:

I did clear the cache and restart several times. The outline only shows
the message "Loading document symbols for 'hagdornmystery.t'".
Am So., 5.  What can I say :) I truly care for tads3 and I wish to
lower the treshold for newcomers, in order for them to see how great the
system is. I think it truly deserves that!
No progress with the outliner though? I like suggest a clear cache and
restart if you haven't already tried that.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913100427,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGM7IUII4OJWMA4RICTUAMLNRANCNFSM5DK35B4Q
.

Alright .I had to change the following exits in the code you sent to make it compile, since the source code was missing hallway, kitchen, backhouseKitchen and passage.  (Not sure if I'm sitting on stale data though.)
passageway: Room
    //west = hallway
;

courtyard: OutdoorRoom
    //north = kitchen
    //south = backhouseKitchen
    //southeast = passage
;

But if those are missing I think you should see diagnostics about that in View/Problems

Yes, I also fixed this, when the parser complained. But the symbols still
aren't visi le
Tomas Öberg @.***> schrieb am So., 5. Sept. 2021, 13:10:

Alright .I had to change the following exits in the code you sent to make
it compile, since the source code was missing hallway, kitchen,
backhouseKitchen and passage. (Not sure if I'm sitting on stale data
though.)
passageway: Room
//west = hallway
;
courtyard: OutdoorRoom
//north = kitchen
//south = backhouseKitchen
//southeast = passage
;
But if those are missing I think you should see diagnostics about that in
View/Problems
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913132948,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGLHSKIPISHAOGZXS4LUANF3ZANCNFSM5DK35B4Q
.

If the longprocessing is still active and not letting you reparse on save it can either be the cause of two cases:

The longprocessing is not yet done (but then you should see the progress at the bottom of the window)

Some error case that I didn't cover for has happened that leaves the longprocessing flag not to be reset as it should. (If the connection between the client/server happens for instance)

In the latter case, be on the lookout for any error dialogs or messages prior to getting the long processing errors. (Suggestion would be to restart the editor if that happens and try parsing it again)
I have a lot of changes done in the branch "next", if you run the extension in debug mode be sure to use that branch.  Otherwise this is the compiled version (same link as before): https://drive.google.com/file/d/1oW6AbnqYq_velKZNOt1eFj3pRMhPbu1b/view?usp=sharing
I hope for progress. Otherwise I suggest we arrange a short meeting later today and try to sort it out with a screenshare if you like to do that. I believe that might be most efficient.

There's no progress shown and there are no errors -- in fact I see endless
"Adding  for " lines in the language server output.
I switched to current next branch, cleared cache and all that, map works
again now. I notice that added connection sometimes get misplaced in code,
but it shows up.
The outline structure still doesn't show up.
If arranging a meeting is okay with you, I'd be happy about this. My 12
year old daughter is getting excited about TADS, too, and we have high
hopes for a modern IDE :)
I'm pretty much free all day today.
Am So., 5. Sept. 2021 um 13:41 Uhr schrieb Tomas Öberg <
@.***>:

If the longprocessing is still active and not letting you reparse on save
it can either be the cause of two cases:

The longprocessing is not yet done (but then you should see the
progress at the bottom of the window)
Some error case that I didn't cover for has happened that leaves the
longprocessing flag not to be reset as it should. (If the connection
between the client/server happens for instance)
In the latter case, be on the lookout for any error dialogs or messages
prior to getting the long processing errors. (Suggestion would be to
restart the editor if that happens and try parsing it again)
I have a lot of changes done in the branch "next", if you run the
extension in debug mode be sure to use that branch. Otherwise this is the
compiled version (same link as before):
https://drive.google.com/file/d/1oW6AbnqYq_velKZNOt1eFj3pRMhPbu1b/view?usp=sharing
I hope for progress. Otherwise I suggest we arrange a short meeting later
today and try to sort it out with a screenshare if you like to do that. I
believe that might be most efficient.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913137534,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGPEFHVMXDZQX3ETDL3UANJOFANCNFSM5DK35B4Q
.

Sounds good, my email is<EMAIL_ADDRESS>

I did clear the cache and restart several times. The outline only shows the
message "Loading document symbols for 'hagdornmystery.t'".
Am So., 5.  What can I say :) I truly care for tads3 and I wish to
lower the treshold for newcomers, in order for them to see how great the
system is. I think it truly deserves that!
No progress with the outliner though? I like suggest a clear cache and
restart if you haven't already tried that.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/toerob/vscode-tads3tools/issues/3#issuecomment-913100427,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC4BBGM7IUII4OJWMA4RICTUAMLNRANCNFSM5DK35B4Q
.

Yes. I forgot one Map, the preprocessedCacheMap needs be case insensititive too


Polish the README and CHANGELOG files (second batch)

API change check
API changes are not detected in this pull request.


Unable to connect to cloudless Gen 2 Vacuum

I'm having trouble connecting to my Gen 2 Xiaomi vacuum which is not connected to the xiaomi cloud.
I've followed this guide to set it up.
This library gets a timeout and returns Could not connect to device, token might be wrong
However, using the same token everything works well using the python mirobo utility found here.
miio version is the latest git master.
robot version is v11_001228

By looking at the miio log on the vaccum itself, I found out that calls by this library cause the following messages:
[20180623 11:03:52] [INFO] handle_mobile_msg
[20180623 11:03:52] [DEBUG]  msg: {"method":"miIO.info","params":[],"id":1}, strlen: 41, len: 41
[20180623 11:03:52] [INFO] Got miIO.info.
[20180623 11:03:52] [WARNING] miIO.info fail

But only on the first try after a reboot.

Also, since the mirobo utility doesn't seem to keep track of the request id in a permanent storage, I guess that the last ID is somewhere inside the handshake?
Incrementing the request ID by 100 on each failed request as seen in network.js#L519 is a terrible "solution" to the repeated msg error.

I was wrong. Apparently, python-mirobo does save the last msg id in some temporary file.

Okay so the miIO.info command is only available on devices which are or were at some point connected to the cloud.
This results in the library not being able to work with said vacuum since it cannot detect that it is a vacuum.
I'd suggest providing a possibility to manually specify the device type.


Broken link

When I click on the example > Simple on this page: https://registry.terraform.io/modules/particuleio/kapsule/scaleway/latest
I get a broken link: https://registry.terraform.io/modules/particuleio/kapsule/scaleway/latest/examples/simple
This is a submodule used internally by / / . Using this submodule on its own is not recommended.

Submodules without a README or README.md are considered to be internal-only by the Terraform Registry. If this submodule should not be considered internal, add a readme which describes what this submodule is for and how it should be used.

For more information about the expected structure of modules in the Registry, see the Standard Module Structure in the Terraform Registry documentation .

Hi thanks for the info, will fix the link

The example just does not have a variable.tf, it is a pretty simple example. I added a README with terraform-docs, please feel free to open a PR and add a more complete example.


[DF-445] add test sms and email providers to /settings

Add "test" sms and email providers to the /dashboard/settings provider selectors. These are already implemented on the backend and should only require frontend changes.
From SyncLinear.com | DF-445

Depends on: https://github.com/dittofeed/dittofeed/issues/650

/bounty $15


peerDependency for AzureClient is wrong

The peerDependency for "fluid-framework": "^0.58.0". This should be ^0.59.0

This is yet another issue that should have been resolved way back when we filed #7913. I'm going to make sure this gets fixed once and for all.


Bug: env variables are not reading correctly

📜 Description

In pre-deploy/post deploy & pre-ci and post-ci  if we write any export command like -:
export product_name=devtron

it's not passing correctly in CI_CD_EVENT environment  variable .
Basically the issue was with  = this equals symbol .
NOTE
Their is no issue with the script .It runs perfectly .But the issue is with the env variables in which we put all the data .
If some one reading the env then their is a issue  because the
env  > .all_env
then their is a issue  because the CI_CD_EVENT variable having invalid data .or non ending value
👟 Reproduction steps
just try this step in pre/post cd of any pipeline and you will see the CI_CD_EVENT variable have a non-ending string value or inavlid value.
Try to print all the env variables .
env
👍 Expected behavior
it should be worked fine .
👎 Actual Behavior
not working .Due to this when i read env variables and doing some thing then not able to do
☸ Kubernetes version
1.25
Cloud provider

aws
🌍 Browser
Chrome
🧱 Your Environment
No response
✅ Proposed Solution
No response
👀 Have you spent some time to check if this issue has been raised before?

[X] I checked and didn't find any similar issue

🏢 Have you read the Code of Conduct?

[X] I have read the Code of Conduct

AB#4818

RCA: this was happening due to logic of getting env variable key-value pair. we used to split whole string from arg by "=" separator and use the first two indexes as our key and value. In cases where value contained "=", the value was getting split and was being partially set. It was reported when one user's script in pre-cd started breaking since before the scripts were run as raw scripts and now they are being run with plugin support mechanism.


Fix lock/unlock error in Google Assistant with HA cloud

I just signed up for the Home Assistant Cloud trial and linked it with Google Home, and GH automatically recognized the lock/unlock action and allowed me to use it through a voice command. The command works and the car locks/unlocks, but google always says "something went wrong" after doing it.
Super low priority, but just wanted to put it out there.

@Kevr0n228 google actions require a response time of under 5 seconds; the car doesn't finish that fast so google says something went wrong because it stops waiting at 5 seconds, but the car will continue processing the request which is why is succeeds

Thanks for the info! I didn't know that.

Quick ways around this for your @Kevr0n228.   Create a "help" input boolean named what you want to tell google.  Create an automation that when this switch turns on it calls the service you would like and turns the switch back off.    This will also work on remote start / start climate.    You have to expose input_booleans to google but works great once that is done.   Google can't tell you if something went wrong though as a note, not that it can today.

Very helpful discussion, as an improvement point, you can set another automation to announce to google speaker or send a notification to your mobile phone when car is actually locked or could not lock in 5 minutes, so you are eventually aware.

@Kevr0n228
another solution I use for climate is to make a synthetic switch for google home to seamlessly interact with, I don't think I've seen my input boolean's in GA, though I use the community version instead of HA's official one.  it's important to use script.turn_on instead of invoking the script directly so it doesn't wait for completion.
configuration.yaml
switch: !include_dir_list switch

switch/car_climate.yaml
platform: template
switches:
  car_climate:
    friendly_name: Car Climate
    value_template: "{{ is_state('binary_sensor.niro_ev_air_conditioner','on') }}"
    turn_on:
      service: script.turn_on
      target:
        entity_id: script.car_climate
    turn_off:
      service: kia_uvo.stop_climate

turn on script
car_climate:
  alias: Car Climate
  sequence:
  - choose:
    - conditions:
      - condition: device
        device_id: 10dfc81975715f86cc3eb4f48fb3a519
        domain: lock
        entity_id: lock.niro_ev_door_lock
        type: is_unlocked
      sequence:
      - service: lock.lock
        target:
          entity_id: lock.niro_ev_door_lock
    default: []
  - service: kia_uvo.start_climate
    data:
      Duration: 10
      Temperature: 76
      Heating: true
  mode: single

One of my main objectives with this integration was to fix the app doesn't auto lock the doors in order to turn on the climate, it just leaves you to lock them manually so the climate takes a long time to get on through the app having to wait for each of those commands to finish and picking the temperature settings every time.

This is likely the way I'll go about it. I already have scripts to start
and stop climate and was using a GH routine to call it a la: "hey google,
heat up the car" for which google will run the command "turn on start kona
climate" which triggers my script start_kona_climate. Yours is a more
robust solution and includes the locking (which I completely forgot
about!). Thanks for the ideas!
On Wed., Nov. 17, 2021, 06:46 Brendan Dahl, @.***>
wrote:

@Kevr0n228 https://github.com/Kevr0n228
another solution I use for climate is to make a synthetic switch for
google home to seamlessly interact with, I don't think I've seen my input
boolean's in GA, though I use the community version instead of HA's
official one. it's important to use script.turn_on instead of invoking the
script directly so it doesn't wait for completion.
configuration.yaml
switch: !include_dir_list switch
switch/car_climate.yaml
platform: template
switches:
car_climate:
friendly_name: Car Climate
value_template: "{{ is_state('binary_sensor.niro_ev_air_conditioner','on') }}"
turn_on:
service: script.turn_on
target:
entity_id: script.car_climate
turn_off:
service: kia_uvo.stop_climate
turn on script
car_climate:
alias: Car Climate
sequence:

choose:

conditions:

condition: device
device_id: 10dfc81975715f86cc3eb4f48fb3a519
domain: lock
entity_id: lock.niro_ev_door_lock
type: is_unlocked
sequence:
service: lock.lock
target:
entity_id: lock.niro_ev_door_lock
default: []

service: kia_uvo.start_climate
data:
Duration: 10
Temperature: 76
Heating: true
mode: single

One of my main objectives with this integration was to fix the app doesn't
auto lock the doors in order to turn on the climate, it just leaves you to
lock them manually so the climate takes a long time to get on through the
app having to wait for each of those commands to finish and picking the
temperature settings every time.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/fuatakgun/kia_uvo/issues/148#issuecomment-971501737,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACP3WYVFOFBBMIDTOR7SJWDUMOIZTANCNFSM5IFWNHQA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.


Incorrect slashes on url

 It seems to be not putting in the first / between the co.uk and discount

2020-01-02
https://www.domain.co.ukdiscounts
When I add a slash on the baseUrl
baseUrl: 'https://www.domain.co.uk/'
it fixes that issue but now I get double slashes
            `</url><url><loc>https://www.domain.co.uk//services/cleaning/index</loc>`

``
module.exports = sitemap({

  baseUrl: 'https://www.domain.co.uk/',
  ignoredPaths: ['admin'],
  pagesDirectory: __dirname + "\\pages",
  targetDirectory : 'public/',
  nextConfigPath: __dirname + "\\next.config.js",
  ignoredExtensions: [
        'png',
        'jpg'
  ],
  pagesConfig: {
    '/login': {
      priority: '0.5',
      changefreq: 'daily'
    }
  }
});

``
is my config, any help is appreciated on this.

Hi, first what version are you using?

Hi, first what version are you using?

"nextjs-sitemap-generator": "^0.4.2",

I'm currently working in a new version with this issue and more fixed.
Be patient.
Thanks.

I'm currently working in a new version with this issue and more fixed.
Be patient.
Thanks.

Thanks, appreciate it.

Hi, I located the issue and was introduced in #28
At the end of this weekend I'm going to release a new version with tests to avoid this kind of error.

Hi, I located the issue and was introduced in #28
At the end of this weekend I'm going to release a new version with tests to avoid this kind of error.

Awesome, thanks for your time on this.

Hi, release v0.5.0 is out. Check it
Thanks for be patient

Still having issues but it may just be my implementation of it,
I have a pretty basic nextjs app with normal pages, this is my next.config.js file
const withCSS = require('@zeit/next-css')

module.exports = withCSS({
  cssLoaderOptions: {
    url: false
  }
})

const sitemap = require('nextjs-sitemap-generator');

module.exports = sitemap({

  baseUrl: 'https://www.suffolkdaiily.co.uk',
  ignoredPaths: ['admin'],
  pagesDirectory: __dirname + "\\pages",
  targetDirectory : 'public/',
  nextConfigPath: __dirname + "\\next.config.js",
  ignoredExtensions: [
        'png',
        'jpg'
  ],
  pagesConfig: {
    '/login': {
      priority: '0.5',
      changefreq: 'daily'
    }
  }
});

my build fails and it just gets spammed with stylesheet stuff (only when the sitemap stuff is in)

Are you placed this
module.exports = sitemap({

  baseUrl: 'https://www.suffolkdaiily.co.uk',
  ignoredPaths: ['admin'],
  pagesDirectory: __dirname + "\\pages",
  targetDirectory : 'public/',
  nextConfigPath: __dirname + "\\next.config.js",
  ignoredExtensions: [
        'png',
        'jpg'
  ],
  pagesConfig: {
    '/login': {
      priority: '0.5',
      changefreq: 'daily'
    }
  }
});

inside of next.config.js?

yeah, my next.config.js file is
const withCSS = require('@zeit/next-css')
const sitemap = require('nextjs-sitemap-generator');

module.exports = withCSS({
  cssLoaderOptions: {
    url: false
  }
})

module.exports = sitemap({

  baseUrl: 'https://www.suffolkdaiily.co.uk',
  ignoredPaths: ['admin'],
  pagesDirectory: __dirname + "\\pages",
  targetDirectory : 'public/',
  nextConfigPath: __dirname + "\\next.config.js",
  ignoredExtensions: [
        'png',
        'jpg'
  ],
  pagesConfig: {
    '/login': {
      priority: '0.5',
      changefreq: 'daily'
    }
  }
});

Assuming that you have a js file that loads the nextjs server, then the sitemap function have to go there. You don't need to export it to nowhere.
The docs says:
It is meant to be used in server.js so that when the server is initialized it will only run once. If you place it in any of the request handler of the node server performance may be affected.

As you showed above module.exports with withCss function is being replaced with sitemap function. You are using module.export to export a default value and the last value is the final value to be exported.
But the main thing is the sitemap function is intended to be in the file where nextjs server starts to load.

You could do something like this:
Note: I'm working on a static website
// package.json
"scripts": {
    "dev": "next -p 8001",
    "prebuild": "node generateSiteMap",
    "build": "next build",
    "preexport": "npm run build",
    "export": "next export",
    "prestart": "npm run export",
    "start": "serve out"
  },

Where generateSiteMap looks like this:
const sitemap = require("nextjs-sitemap-generator");

sitemap({
  baseUrl: "https://festivalcampgrounds.com",
  pagesDirectory: `${__dirname}\\pages`,
  targetDirectory: "public/",
  nextConfigPath: `${__dirname}\\next.config.js`,
  ignoredExtensions: ["png", "jpg"]
});

You could do something like this:
Note: I'm working on a static website with Next9
// package.json
"scripts": {
    "dev": "next -p 8001",
    "prebuild": "node generateSiteMap",
    "build": "next build",
    "preexport": "npm run build",
    "export": "next export",
    "prestart": "npm run export",
    "start": "serve out"
  },

Where generateSiteMap looks like this:
const sitemap = require("nextjs-sitemap-generator");

sitemap({
  baseUrl: "https://example.com",
  pagesDirectory: `${__dirname}\\pages`,
  targetDirectory: "public/",
  nextConfigPath: `${__dirname}\\next.config.js`,
  ignoredExtensions: ["png", "jpg"]
});

Beautiful solution, much appreciated.
Thanks again @IlusionDev for the help on this.

You could do something like this:
Note: I'm working on a static website with Next9
// package.json
"scripts": {
    "dev": "next -p 8001",
    "prebuild": "node generateSiteMap",
    "build": "next build",
    "preexport": "npm run build",
    "export": "next export",
    "prestart": "npm run export",
    "start": "serve out"
  },

Where generateSiteMap looks like this:
const sitemap = require("nextjs-sitemap-generator");

sitemap({
  baseUrl: "https://example.com",
  pagesDirectory: `${__dirname}\\pages`,
  targetDirectory: "public/",
  nextConfigPath: `${__dirname}\\next.config.js`,
  ignoredExtensions: ["png", "jpg"]
});

That seems to be generating bad links,
https://suffolkdaily.net/services/cleaning/index
/index shouldn't really be a thing.
Great solution thanks!
Thanks again @IlusionDev for this great project.


spelling: whitespace

Sorry, apparently my bookmark wasn't on the right commit.

Thanks. Merged as 3265e11


Guard controller

Deploy guarding pods with a PDB which will make sure a node does not drain a node until at most one replica of an operand is unavailable. Each guarding pod checks readyz status of an operand on the same node.
The guard controller repeatedly checks available master nodes and for each one renders an unmanaged guard pod. Each guard pod is responsible for checking if corresponding operand (operand pod running on the same node as the guard pod) is ready (though checking the /readyz endpoint). The guard uses an http probe to check readiness of its operand. At the same time a pdb with minAvailable set to len(masters)-1 is rendered. Each time the number of master nodes changes, the minAvailable field is updated accordingly.
Outstanding facts:

guard pod has its nodename set directly (in case the KS is down)
the Guard controller can delete pods (in case image/probe host changes)
the Guard controller requires create/delete condition checkers (in case the number of master nodes is scaled to 1 to remove the PDB)

Resource deletion picked from https://github.com/openshift/library-go/pull/1095.
Applied and tested in:

https://github.com/openshift/cluster-kube-scheduler-operator/pull/373
https://github.com/openshift/cluster-kube-controller-manager-operator/pull/568

move Allow resource deletion based on a certain condition  to its own commit so I can merge it

/retest

nothing I'll block on
/approve

/retest

Something changed meantime
pkg/operator/staticpod/controller/guard/guard_controller_test.go:379:7: unknown field 'Handler' in struct literal of type "k8s.io/api/core/v1".Probe
FAIL	github.com/openshift/library-go/pkg/operator/staticpod/controller/guard [build failed]

Handler renamed to ProbeHandler


Update the permission selector component to allow specifying scope for permissions

Overview
To more easily enable implementation of record level security, it should be possible to scope permissions.
Accordingly, the permission selector component should be updated to allow the user to specify the scope associated with the specified permissions.
Scoping for a permission should be specified through a JS expression e.g. ‘data.id’.
Acceptance criteria
In addition to the current behavior the updated component should support the following additional behavior:

A configurator, should be able to click a tag representing a required permission.
Clicking a tag should display a pop-up window, allowing the user to specify a scoping expression in JS. The pop-up should have a hint/placeholder ‘Expression to scope permission…’.
On closing the pop-up if an expression has been provided, a new filter icon should be displayed next to the permission name on the tag illustrating that the permission is scoped.
Hovering over the tag shoot display the scoping expression ‘Scoped by: {{scoping expression}}’
If the user Delete the scoping expression, the icon should disappear.
Update the behavior on permission, checking by form components to take into account the new scoping behavior:

Visibility of menu items configured with scoped permissions should respect scoping
Accessability of forms configured with scoped permissions should respect scoping
Visibility of form components configured with scoped permissions should respect scoping

Hi @ihouvet @hlayisanimazuze
The system already has the ability to get complex permission bindings using scripts.
This ability is available for components, as well as the main menu.

For example, the following script will require permission member:edit if membershipStatus === 3 (Cancelled)
This is the same as setting scope membershipStatus === 3 for permission member:edit

I believe that overloading a component with additional capabilities will only make it more difficult to understand. While a current implementation allows to implement permission logic of any complexity using JS
There is also a requirement to set the scope for forms that have permissions.
There is a difficulty here, since the check for permissions to access the form is performed on the server side.
That is, if there are no permissions, the request to get the form will return a 401 or 403 result.
This means that to process the scope using the script, we must first get the form (since the permission and the script are part of the form) and process the permissions script on the client side.
Thus, if we still get the form, then we can implement complex logic for checking permissions using components permissions (use the root container with assigned permissions via script)
In addition, we can configure Hidden and Edit mode properties of components using a JS, in which we can also check permissions


multiple change:playback events being gnerated?

I'm not sure if the issue is with google-music-electron or google-music.js, but It appears as if multiple(3 in my case) events are being generated when I pause or unpause.

This is due to us using a MutationObserver on Google Music's webpage. Occasionally, we see a paused state before the next playing state so we choose to be more liberal than conservative with our events. Is this causing any issues for you?

Instead of #11, I decided to try implementing a simple Mpris based Last fm scrobbler. I could work around the issue by filtering duplicate events. But I think, some DEs which provide mpris based notifications might end up sending multiple notifications for each event.

Ah right, the scrobbler. As a workaround for now, you can use _.debounce:
http://underscorejs.org/#debounce
However, you are right. We should probably solve this in a larger scale to prevent frustration for DE notifications. Ideas for now:

Add debouncing to google-music.js
Refine tuning on playback mutation observer

I might be missing something but why are we listening to change:playback for a scrobbler? Wouldn't we want song info instead (i.e. change:song)?

Alright, I looked into this and added a proper fix as well as removed inaccurate "pause" events. The patch has been released in<EMAIL_ADDRESS>


Feature Request: Only send NEW posts

Since RSS can contain arbitrary time data for each post, I would love to have a toggle to only allow new posts. Best example would be https://lowendtalk.com/categories/offers/feed.rss - each time a comment in the corresponding threads is made, the thread gets pushed to the top of the feed. But I want only the thread creation posted. (LowEndBox knows that this isn't ideal for everyone...) I assume this is not the only feed with this behavior.

Thanks for sharing! Do you often reset the feedcord service?
I ask this because let's say for two of the posts in the rss feed you have:

A post on February 1st
A post on January 28th

A new comment is made on the January 28th post today, pushing it to the top. Then let's say we run the feedcord service right after.
This will make it a little wonky at first - any new comments on posts with a publish date newer than the 28th will be pushed and notified.. this is the issue you're facing I assume.
However, it will eventually work itself out when the first brand new post gets read while FeedCord is running.
Once we have that newest post's date cached, it should work as intended only showing when a newer dated post is made.
If you happen to reset the FeedCord service though, you lose that newest publishing date and that wonky cycle starts over again if an old post is at the top.
Not sure if I can update to handle this, as I built this with no persistent storage/cache except the small internal hastable holding the dates during runtime to keep lightweight.. I could possibly have a flag that will process all items in the feed rather than just the first item at the top? Have to think on it though..
If I'm missing something let me know - thanks!

This will be closed for now until further information is provided


Question about adjoint

There is a problem when I run the following example:
import warp as wp
wp.init()

@wp.kernel
def test(x: wp.array(dtype=float), y: wp.array(dtype=wp.vec3)):
    tid = wp.tid()
    y[tid].x = x[tid] * 2.
    y[tid].y = x[tid] * 3.
    y[tid].z = x[tid] * 4.

# initialize
x = wp.array([1., 1., 1.], dtype=float, requires_grad=True)
y = wp.array([wp.vec3(0.,0.,0.),wp.vec3(0.,0.,0.),wp.vec3(0.,0.,0.)], dtype=wp.vec3, requires_grad=True)

# set initial gradient
y.grad = wp.array([wp.vec3(1.,1.,1.),wp.vec3(1.,1.,1.),wp.vec3(1.,1.,1.)], dtype=wp.vec3)

wp.launch(
    kernel=test,
    dim=3,
    inputs=[x, y],
    adjoint=True,
    adj_inputs=[None, None]
)

print(x.grad)

In above code, I write a simple test kernel to map an wp.array with float data type to an wp.array with wp.vec3 data type. The reason I test this kernel is that I want to test whether Warp can be used to compute some high-dimensional tensor derivative (in this example, $d\mathbf{y}/d\mathbf{x}$, where $\mathbf{y}\in\mathbb{R}^{3\times3}$ and $\mathbf{x}\in\mathbb{R}^3$). However, the output just gives:
[0. 0. 0.]

I assume the grad should at least be non-zero, but it wasn't... So does Warp kernel's adjoint support high-dimentional derivative like this?

Thanks for your post @supertan0204 . We have an autograd bug associated with complex types like vec3s that we're currently working on. Should be fixed in our next release, and that should resolve this issue.

Thanks for your reply @daedalus5, just a simple follow-up question: what would x.grad ideally be?

In the example you provided, it should be [9., 9., 9.] . The adjoint for each element in x is the sum adj_x[i] = 2.0 * adj_y[i].x + 3.0 * adj_y[i].y + 4.0 * adj_y[i].z


Password complexity rules

This PR adds the following password complexity rules:

Minimum length: 12 characters
Force password change: 30 days
Remember password history: last 12 passwords
Require an upper case character
Require a lower case character
Require a number
Require a special character
Cannot be same as username

These are all of the out-of-the-box password rules.  I think these will be sufficient, however, if we find we need something more, Keycloak also allows custom regex as well.

👎 to expiration of any kind
Feel free to using the following to support you in discussing this with our security team:

https://www.ftc.gov/news-events/blogs/techftc/2016/03/time-rethink-mandatory-password-changes
https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/
https://www.ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
http://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf

I'd second Scott's thoughts on nixing expiry with security's blessing. Thanks for chiming in @Scotchester

I've updated the password rules to more closely reflect CFPB standards.  This does bump it up to 90 days, which should be good enough for most of our users to not have to reset their password during a given filing period.
@Scotchester and @wpears, I agree that these rules don't necessarily reflect the latest thinking in password management.  I've discussed it a bit with our security folks, and I'm happy to discuss it further with them, but for now I think we should proceed with meeting CFPB's standard password requirements.


mdbook-i18n-helpers: init 0.1.0

Description of changes
https://github.com/google/mdbook-i18n-helpers/releases/tag/0.1.0

https://crates.io/crates/mdbook-i18n-helpers
Found it mentioned in https://github.com/rust-lang/mdBook/issues/5
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[x] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 232486 run on x86_64-linux 1

1 package built:

mdbook-i18n-helpers

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/2245


xor-distance error ("Inputs should have the same length")

I ran example-s.js in multiserver-dht on branch hyperswarm, with node v10.1.0, and got the error:
./multiserver-dht/node_modules/xor-distance/index.js:4
  if (a.length !== b.length) throw new Error('Inputs should have the same length')
                                   ^

Error: Inputs should have the same length
    at dist (./multiserver-dht/node_modules/xor-distance/index.js:4:36)
    at QueryTable.addUnverified (./multiserver-dht/node_modules/dht-rpc/lib/query-table.js:15:21)
    at QueryStream._onresponse (./multiserver-dht/node_modules/dht-rpc/lib/query-stream.js:80:20)
    at IO._finish (./multiserver-dht/node_modules/dht-rpc/lib/io.js:131:9)
    at IO._onmessage (./multiserver-dht/node_modules/dht-rpc/lib/io.js:103:14)
    at UTP.emit (events.js:182:13)
    at UTP._onmessage (./multiserver-dht/node_modules/@hyperswarm/network/node_modules/utp-native/index.js:191:8)

Are putting in a 32 byte buffer as the topic? That is needed (we should assert this)

Oh, I'll try that. Also the docs should mention the length requirement.


Allow the explicit selection of members

Often, you'll only want to document a subset of methods & attributes. For example: https://raw.githubusercontent.com/DataDog/integrations-core/hack-a-doc/docs/developer/base/api.md
Is that possible currently? If so, we'll switch to this from mkautodoc 😄
cc @pawamoy

It is not currently possible, but definitely planned!
I'll add a roadmap to the readme to give a better idea of what I'm planning for mkdocstrings :)

Thank you, please let me know if I can help or beta test!

You'll soon be able to beta-test @ofek! But first I could even use your input!
I can think of several way to select or unselect members:

exact matches (name)
regular expressions (name)
filtering functions (properties)

I'd like to find an elegant way to address all these possibilities, to have something powerful but not too complex, and easy to configure and reason about.

I suppose regex is most elegant since they can also represent exact matches

I personally need to filter out modules in mkdocstrings itself, so I was also thinking about something like:
::: mkdocstrings.handlers
    selection:
      recurse_on:
        modules: no

Maybe a filter could be a dict?
filters:
  - categoy: module
    select: no
  - property:
      - private
      - special
    select: no
  - category: method
    name: "^__init__$"
    select: yes

Seems verbose, though cc @florimondmanca for feedback

Oh hi 😄
Ofek's link leads to a Markdown file formatted with mkautodoc, so…
How about plainly stealing mkautodoc's :members: directive? No regular expressions, no include/exclude mechanism, no smarts… Just a "manual mode" switch first?
.. Include all members:
::: BankAccount
    :members:

.. Include only a manual selection of members:
::: BankAccount
    :members: number get_balance compute_vat

(mkdocstrings doesn't seem to use standard ReStructuredText, but I guess we can adapt this fairly easily.)
Thoughts? :-)

(Note the non-usage of a YAML array, as it would consume a lot of vertical space…)

I'd argue the opposite: long lines are hard to read and generate noise in code diffs :confused:
I largely prefer
::: datadog_checks.base.stubs.aggregator.AggregatorStub
    selection:
      members:
        - assert_metric
        - assert_metric_has_tag
        - assert_metric_has_tag_prefix
        - assert_service_check
        - assert_event
        - assert_all_metrics_covered
        - assert_no_duplicate_metrics
        - assert_no_duplicate_service_checks
        - assert_no_duplicate_all
        - reset

over
::: datadog_checks.base.stubs.aggregator.AggregatorStub
    selection:
      members: assert_metric assert_metric_has_tag assert_metric_has_tag_prefix assert_service_check assert_event assert_all_metrics_covered assert_no_duplicate_metrics assert_no_duplicate_service_checks assert_no_duplicate_all reset

Besides, since we're using YAML, I'd would prefer we stick to it. Otherwise we start doing implicit split(" ") and it's an open door to more implicit things which then become hard to maintain :confused:
Note that in YAML you can still write arrays on one line:
::: datadog_checks.base.stubs.aggregator.AggregatorStub
    selection:
      members: [assert_metric, assert_metric_has_tag, assert_metric_has_tag_prefix, assert_service_check, assert_event, assert_all_metrics_covered, assert_no_duplicate_metrics, assert_no_duplicate_service_checks, assert_no_duplicate_all, reset]

Anyway, I think it's wise to start simple, with a members option and maybe exclude_members as well.

Sounds good to me @pawamoy!

I'm definitely in favor of a members option, whether it's yaml or not doesn't make too much difference, but I especially want to be able to exclude certain members that maybe I didn't create and are inherited from a module's superclass, for example. (__json_encoder__ from a Pydantic model with custom config, is what I'm dealing with at the moment)

Would the members solution mean that filters would not be available? E.g. would love to filter out private methods (which seem to be included by default in the newest release) without having to manually update the function list often. However not a dealbreaker if not, thank you very much for the great updates!

Here's what I'm thinking doing:

in pytkdocs, implement powerful filtering like in the last code snippet of this comment https://github.com/pawamoy/mkdocstrings/issues/44#issuecomment-602175240
in mkdocstrings, add the filters selection option to reflect pytkdocs filtering, and add a members option as well.

If members is a list of strings, discard global and local filters, translate the list to exact-match filters internally.
If members is yes, use global and local filters to allow fine-grained selection.
If members is no, select nothing.

Example:
# mkdocs.yml

plugins:
  - mkdocstrings:
      # include all members by default
      members: yes
      selection:
        filters:
          # but exclude private members
          - name: "^_[^_]"
            select: no

# Reference file

::: pkg.mod.obj1
    selection:
      # explicit selection
      members:
        - member1
        - member2
        - etc

::: pkg.mod.obj2
    selection:
      # no members at all
      members: no

::: pkg.mod.obj3
    selection:
      # global members = yes
      # cancel global filters to include private members as well
      filters: []

I think it covers most use-cases?
TODO (if it sounds good):

[ ] implement this filtering in pytkdocs
[ ] allow setting global selection and rendering options directly inside mkdocstrings' config (not just under mkdocstrings: handlers: <default_handler>: selection)
[ ] add filters and members option to the Python collector, with respective handling
[ ] set a default global filter to exclude private members in the Python collector options (to replicate what was previously done :sweat_smile:)?

Sounds good to me! 👍

It turned out to be much, much more complex than I thought. So I kept things simple and I made progress: pytkdocs itself will accept members and filters options. members can be True, False, or a list of names to select. If it's a list of names, we don't apply filters on the top object's members. We still apply filters recursively, on all selected members and their children. Filters are regular expressions, and can (re)select or unselect (when starting with !) objects, so their order matters.
It's not as powerful as I wanted it to be, but who cares if the use-cases are covered :slightly_smiling_face:
Also changes were minimal :+1:

Yay! Can we try it yet?

You can now :slightly_smiling_face:  I just released version 0.10.0. And I forgot to implement the second point of the checklist above :confused: Will do in the next one!

Nice, thanks!!! Found a few things:
https://github.com/pawamoy/mkdocstrings/issues/64
https://github.com/pawamoy/mkdocstrings/issues/65


Use Hamcrest assertions instead of JUnit in  dbclient/mongodb - backport 2.x (#1749)

Part of #1749
I've already signed OCA. It's an automation problem.
Original PR

/oca-checked

/trigger

/trigger


Sharding-JDBC supports connectionStrictly mode and MemoryStrictly mode

Fixes #422.
Changes proposed in this pull request:

Add ConnectionStrictlyExecutorEngine
Add MemoryQueryResult
Add MemoryStrictlyExecutorEngine
Add StreamQueryResult
Modify ExecutorEngine
Modify ShardingPreparedStatement and ShardingStatement
Passthrough CONNECTION_MODE in SJ

Codecov Report

Merging #1112 into dev will decrease coverage by 0.45%.
The diff coverage is 43.68%.

@@            Coverage Diff             @@
##              dev    #1112      +/-   ##
==========================================
- Coverage   58.69%   58.24%   -0.46%
==========================================
  Files         638      641       +3
  Lines       12588    12697     +109
  Branches     2033     2055      +22
==========================================
+ Hits         7389     7395       +6
- Misses       4731     4827      +96
- Partials      468      475       +7

Impacted Files
Coverage Δ

...e/core/executor/type/memory/StreamQueryResult.java
81.48% <ø> (ø)

...core/transaction/event/WeakXaTransactionEvent.java
0% <ø> (ø)
:arrow_up:

.../core/jdbc/core/datasource/ShardingDataSource.java
8.92% <0%> (-0.51%)
:arrow_down:

...e/connection/ConnectionStrictlyExecutorEngine.java
0% <0%> (ø)

...re/executor/type/connection/MemoryQueryResult.java
0% <0%> (ø)

...o/shardingsphere/core/executor/ExecutorEngine.java
92.06% <100%> (-1.92%)
:arrow_down:

...utor/type/memory/MemoryStrictlyExecutorEngine.java
100% <100%> (ø)

...dbc/core/transaction/WeakXaTransactionManager.java
68.75% <100%> (ø)
:arrow_up:

...e/core/jdbc/adapter/AbstractConnectionAdapter.java
94.54% <100%> (-0.2%)
:arrow_down:

...shardingsphere/core/jdbc/core/ShardingContext.java
88.88% <100%> (+0.65%)
:arrow_up:

... and 9 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f120583...4905b88. Read the comment docs.


Decentralized distributed Supercomputing AI

We should also integrate an option for distributed computing, like folding@home, dedicating a certain percentage of cpu/gpu power for a decentralized service, as decentralized supercomputing would significantly aid with computationally intensive AI tasks and or building language models.

yes, with webgpu we can train llm with many many chrome on small computers,maybe need p2p and tranning tasks manager?

I like the idea of a swarm LLM ;-).


Add an experimental reason to catch Donald Trump usernames

We get a lot of trolls named after Trump.  The latest of these has posted several answers we have not caught without !!/report.
I added an experimental reason to catch users matching don(ald)?(\W*j)?\W*trump.  There are 37 tps, 2 fps, and 3 naas in Metasmoke.  On the entire network, there are 38 users named Donald Trump or a variant, but only nine of these have non-deleted posts.
I added the reason to the end of findspam, with the name "Potentially bad username."  Since the reason contains "username," whitelisting a user will prevent them from being caught by this reason.  I also added this reason to the experimental reason list (although this doesn't cancel its autoflagging weigh, which requires MS console access as far as I can tell.)

Coverage remained the same at 65.71% when pulling da626301b92aa93eb086541195f8e6a5af79789e on NobodyNada:patch-1 into 8170bf0f2f2ac6e1c3d2b641268a9086c8a0d9e6 on Charcoal-SE:master.

quartata has added this to the blacklist, so we can either close this PR to keep it on the blacklist, or we can revert quartata's commits and merge this PR to make it a "pseudo-watchlist."

I guess we can leave this open and see how the blacklist goes, and revert to this method if necessary.

The current solution of blacklisting seems to be working fine; this PR is no longer needed. I'd suggest keeping the branch just in case we decide to downgrade the check in the future.


add 30s time limit for audio and video call

My proposal is to add a simple CountDownTimer to both audio and video body screens.
When the timer is up the _onPressedEnd() is called, but is the user press the accept call button  _onPressedAccept() method cancel the timer and the call continues as usual.

This feature is already requested we'll implement it soon.
https://github.com/nooralibutt/easy_prank_call/issues/12


[RR2] Upgrade net/http to fasthttp

Replace standard net/http module with the fasthttp. With this enhancement, we can reduce memory usage (because of sync.Pool which is used under-the-hood of fasthttp, and etc...) and provide a way more performant solution for the HTTP transport layer (see the benches here: https://github.com/valyala/fasthttp).

ref: #629


Intermittent ENOENT

Bug description
During GHA run it couldn't find diff for one of the pages for some reason
How to reproduce
Intermittent, saw it once so far
Expected behavior
No response
Lost Pixel information

lost-pixel logs from CI
Run<EMAIL_ADDRESS>/usr/bin/docker run --name lostpixellostpixelv382_0c3f5f --label 09[7](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:8)6f5 --workdir /github/workspace --rm -e "COMPOSER_PROCESS_TIMEOUT" -e "COMPOSER_NO_INTERACTION" -e "COMPOSER_NO_AUDIT" -e "INPUT_FINALIZE" -e "INPUT_CACHE_KEY" -e "HOME" -e "GITHUB_JOB" -e "GITHUB_REF" -e "GITHUB_SHA" -e "GITHUB_REPOSITORY" -e "GITHUB_REPOSITORY_OWNER" -e "GITHUB_REPOSITORY_OWNER_ID" -e "GITHUB_RUN_ID" -e "GITHUB_RUN_NUMBER" -e "GITHUB_RETENTION_DAYS" -e "GITHUB_RUN_ATTEMPT" -e "GITHUB_REPOSITORY_ID" -e "GITHUB_ACTOR_ID" -e "GITHUB_ACTOR" -e "GITHUB_TRIGGERING_ACTOR" -e "GITHUB_WORKFLOW" -e "GITHUB_HEAD_REF" -e "GITHUB_BASE_REF" -e "GITHUB_EVENT_NAME" -e "GITHUB_SERVER_URL" -e "GITHUB_API_URL" -e "GITHUB_GRAPHQL_URL" -e "GITHUB_REF_NAME" -e "GITHUB_REF_PROTECTED" -e "GITHUB_REF_TYPE" -e "GITHUB_WORKFLOW_REF" -e "GITHUB_WORKFLOW_SHA" -e "GITHUB_WORKSPACE" -e "GITHUB_ACTION" -e "GITHUB_EVENT_PATH" -e "GITHUB_ACTION_REPOSITORY" -e "GITHUB_ACTION_REF" -e "GITHUB_PATH" -e "GITHUB_ENV" -e "GITHUB_STEP_SUMMARY" -e "GITHUB_STATE" -e "GITHUB_OUTPUT" -e "RUNNER_OS" -e "RUNNER_ARCH" -e "RUNNER_NAME" -e "RUNNER_ENVIRONMENT" -e "RUNNER_TOOL_CACHE" -e "RUNNER_TEMP" -e "RUNNER_WORKSPACE" -e "ACTIONS_RUNTIME_URL" -e "ACTIONS_RUNTIME_TOKEN" -e "ACTIONS_CACHE_URL" -e "ACTIONS_RESULTS_URL" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/maxim.mazurok.com/maxim.mazurok.com":"/github/workspace" lostpixel/lost-pixel:v3.[8](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:9).2
Environment:
WORKSPACE=/github/workspace
CI_BUILD_ID=7328462883
CI_BUILD_NUMBER=61
EVENT_PATH=/github/workflow/event.json
COMMIT_HASH=b378d5db8ca5ba04a4ee[9](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:10)9d8bc4141de877[10](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:11)8f6
COMMIT_SHA=b378d5db8ca5ba04a4ee99d8bc4[14](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:15)1de877108f6
COMMIT_REF_NAME=main
REPOSITORY=Maxim-Mazurok/maxim.mazurok.com

Version: 3.8.2
Loading project config ...
Current working directory: /github/workspace
Looking for config file: /github/workspace/lostpixel.config.(ts|js|cjs|mjs)
✅ Found config file: /github/workspace/lostpixel.config.ts
🚀 Starting Lost Pixel in 'generateOnly' mode
📂 Creating shot folders
📸 Creating shots
Removing 0 files from .lostpixel/current/
Removing 0 files from .lostpixel/difference/
Found 0 pages from external loader

=== [Page Mode] http://[17](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:18)<IP_ADDRESS>:8080 ===

Prepared 8 pages for screenshots
[1/8] Taking screenshot of '/!index ' (/!index)
[2/8] Taking screenshot of '/blog/!index ' (/blog/!index)
[3/8] Taking screenshot of '/blog/socials-calendar ' (/blog/socials-calendar)
[4/8] Taking screenshot of '/blog/typescript-excess-property-checks ' (/blog/typescript-excess-property-checks)
[5/8] Taking screenshot of '/blog/google-ads-custom-conversion-setup ' (/blog/google-ads-custom-conversion-setup)
[1/8] Screenshot of '/!index' taken and saved to '.lostpixel/current/!index.png' in 3.072s (/!index)
[6/8] Taking screenshot of '/blog/ignore-internal-traffic-in-google-analytics ' (/blog/ignore-internal-traffic-in-google-analytics)
[3/8] Screenshot of '/blog/socials-calendar' taken and saved to '.lostpixel/current/blog/socials-calendar.png' in 3.092s (/blog/socials-calendar)
[7/8] Taking screenshot of '/blog/visual-testing-percy-gha-slack ' (/blog/visual-testing-percy-gha-slack)
[5/8] Screenshot of '/blog/google-ads-custom-conversion-setup' taken and saved to '.lostpixel/current/blog/google-ads-custom-conversion-setup.png' in 3.570s (/blog/google-ads-custom-conversion-setup)
[8/8] Taking screenshot of '/blog/meta-pixel-traps-in-app-browsers ' (/blog/meta-pixel-traps-in-app-browsers)
[2/8] Screenshot of '/blog/!index' taken and saved to '.lostpixel/current/blog/!index.png' in 4.341s (/blog/!index)
[4/8] Screenshot of '/blog/typescript-excess-property-checks' taken and saved to '.lostpixel/current/blog/typescript-excess-property-checks.png' in 4.347s (/blog/typescript-excess-property-checks)
[7/8] Screenshot of '/blog/visual-testing-percy-gha-slack' taken and saved to '.lostpixel/current/blog/visual-testing-percy-gha-slack.png' in 4.6[26](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:27)s (/blog/visual-testing-percy-gha-slack)
[6/8] Screenshot of '/blog/ignore-internal-traffic-in-google-analytics' taken and saved to '.lostpixel/current/blog/ignore-internal-traffic-in-google-analytics.png' in 4.689s (/blog/ignore-internal-traffic-in-google-analytics)
[8/8] Screenshot of '/blog/meta-pixel-traps-in-app-browsers' taken and saved to '.lostpixel/current/blog/meta-pixel-traps-in-app-browsers.png' in 5.[34](https://github.com/Maxim-Mazurok/maxim.mazurok.com/actions/runs/7328462883/job/19956775494#step:11:35)7s (/blog/meta-pixel-traps-in-app-browsers)
Screenshots done!
Creating shots took 9.174 seconds
🔍 Checking differences
Comparing 8 screenshots using 'pixelmatch' as compare engine
[1/8] Comparing '/!index' (/!index)
[2/8] Comparing '/blog/!index' (/blog/!index)
[3/8] Comparing '/blog/socials-calendar' (/blog/socials-calendar)
[4/8] Comparing '/blog/typescript-excess-property-checks' (/blog/typescript-excess-property-checks)
[5/8] Comparing '/blog/google-ads-custom-conversion-setup' (/blog/google-ads-custom-conversion-setup)
[6/8] Comparing '/blog/ignore-internal-traffic-in-google-analytics' (/blog/ignore-internal-traffic-in-google-analytics)
[7/8] Comparing '/blog/visual-testing-percy-gha-slack' (/blog/visual-testing-percy-gha-slack)
[8/8] Comparing '/blog/meta-pixel-traps-in-app-browsers' (/blog/meta-pixel-traps-in-app-browsers)
[1/8] No difference found. (/!index)
[2/8] No difference found. (/blog/!index)
[3/8] No difference found. (/blog/socials-calendar)
[4/8] No difference found. (/blog/typescript-excess-property-checks)
[5/8] No difference found. (/blog/google-ads-custom-conversion-setup)
[6/8] No difference found. (/blog/ignore-internal-traffic-in-google-analytics)
[7/8] No difference found. (/blog/visual-testing-percy-gha-slack)
❌ ENOENT: no such file or directory, open '.lostpixel/difference/blog/meta-pixel-traps-in-app-browsers.png'
Sending anonymized telemetry data.

hey @Maxim-Mazurok! thanks for the reporting! This usually happens for reasons not related to lost-pixel execution, when our runner could not open a page, for example, or the page errored by itself. My usual recommendation is to first make sure that the implementation is ok and that nothing breaks when you run your app on CI, and then, by exclusion method, try to figure out what is wrong.
If it gets reproducible though - would be super happy to look into that with you and help with the fix!

Got the same when running locally:
=== [Page Mode] http://localhost:8080/ ===

Prepared 8 pages for screenshots
[1/8] Taking screenshot of '/!index ' (/!index)
[2/8] Taking screenshot of '/blog/!index ' (/blog/!index)
[3/8] Taking screenshot of '/blog/socials-calendar ' (/blog/socials-calendar)
[4/8] Taking screenshot of '/blog/typescript-excess-property-checks ' (/blog/typescript-excess-property-checks)
[5/8] Taking screenshot of '/blog/google-ads-custom-conversion-setup ' (/blog/google-ads-custom-conversion-setup)
[2/8] Screenshot of '/blog/!index' taken and saved to '.lostpixel/current/blog/!index.png' in 2.250s (/blog/!index)
[6/8] Taking screenshot of '/blog/ignore-internal-traffic-in-google-analytics ' (/blog/ignore-internal-traffic-in-google-analytics)
[3/8] Screenshot of '/blog/socials-calendar' taken and saved to '.lostpixel/current/blog/socials-calendar.png' in 2.254s (/blog/socials-calendar)
[7/8] Taking screenshot of '/blog/visual-testing-percy-gha-slack ' (/blog/visual-testing-percy-gha-slack)
[4/8] Screenshot of '/blog/typescript-excess-property-checks' taken and saved to '.lostpixel/current/blog/typescript-excess-property-checks.png' in 2.585s (/blog/typescript-excess-property-checks)
[8/8] Taking screenshot of '/blog/meta-pixel-traps-in-app-browsers ' (/blog/meta-pixel-traps-in-app-browsers)
[1/8] Screenshot of '/!index' taken and saved to '.lostpixel/current/!index.png' in 2.881s (/!index)
[5/8] Screenshot of '/blog/google-ads-custom-conversion-setup' taken and saved to '.lostpixel/current/blog/google-ads-custom-conversion-setup.png' in 2.884s (/blog/google-ads-custom-conversion-setup)
[7/8] Screenshot of '/blog/visual-testing-percy-gha-slack' taken and saved to '.lostpixel/current/blog/visual-testing-percy-gha-slack.png' in 3.012s (/blog/visual-testing-percy-gha-slack)
[6/8] Screenshot of '/blog/ignore-internal-traffic-in-google-analytics' taken and saved to '.lostpixel/current/blog/ignore-internal-traffic-in-google-analytics.png' in 3.020s (/blog/ignore-internal-traffic-in-google-analytics)
[8/8] Screenshot of '/blog/meta-pixel-traps-in-app-browsers' taken and saved to '.lostpixel/current/blog/meta-pixel-traps-in-app-browsers.png' in 3.336s (/blog/meta-pixel-traps-in-app-browsers)
Screenshots done!
Creating shots took 6.138 seconds
🔍 Checking differences
Comparing 8 screenshots using 'pixelmatch' as compare engine
[1/8] Comparing '/!index' (/!index)
[2/8] Comparing '/blog/!index' (/blog/!index)
[3/8] Comparing '/blog/socials-calendar' (/blog/socials-calendar)
[4/8] Comparing '/blog/typescript-excess-property-checks' (/blog/typescript-excess-property-checks)
[5/8] Comparing '/blog/google-ads-custom-conversion-setup' (/blog/google-ads-custom-conversion-setup)
[6/8] Comparing '/blog/ignore-internal-traffic-in-google-analytics' (/blog/ignore-internal-traffic-in-google-analytics)
[7/8] Comparing '/blog/visual-testing-percy-gha-slack' (/blog/visual-testing-percy-gha-slack)
[8/8] Comparing '/blog/meta-pixel-traps-in-app-browsers' (/blog/meta-pixel-traps-in-app-browsers)
[1/8] Difference of 126891 pixels (3.99%) found. Difference image saved to: .lostpixel/difference/!index.png (/!index)
❌ ENOENT: no such file or directory, open '.lostpixel/difference/blog/!index.png'

Just to clarify on the above message - ENOENT: no such file or directory, open means lost-pixel did not make the screenshot of this page, means lost-pixel could not open this page properly in playwright. So first things first we need to make sure that the page you are trying to open exists & you can open it in the browser.

Just to clarify on the above message - ENOENT: no such file or directory, open means lost-pixel did not make the screenshot of this page, means lost-pixel could not open this page properly in playwright. So first things first we need to make sure that the page you are trying to open exists & you can open it in the browser.
if you can repro this locally - awesome, please verify that /!index page is accessible by the browser 🙌

Hmm, interesting, but I don't see errors regarding screenshot taking... And on local I do see the screenshot in current folder. It's the difference folder that is missing a file. I would assume it's some sort of a race

that is interesting indeed! is it always this !index page or?
Is there anything special about the page?
can you run successfully locally at least once, or it fails everytime now?

On local it is the same blog/!index page and I can't get it working at all now, fails every time
On GHA it was another page - ❌ ENOENT: no such file or directory, open '.lostpixel/difference/blog/meta-pixel-traps-in-app-browsers.png'
Nothing special about the pages I think... They all are here: https://maxim.mazurok.com/
I might try remove ! from the name

Looks like it's related to / in the names.
I did this and it works fine now:
import { CustomProjectConfig } from 'lost-pixel';
import { getUrlsFromSitemap } from './src/helpers';
import { readFileSync } from 'fs';

export const config: CustomProjectConfig = {
  pageShots: {
    pages: getUrlsFromSitemap(readFileSync('./sitemap.xml', 'utf-8')).map(
      x => ({
        path: x.pathname,
        name: (x.pathname.endsWith('/') ? `${x.pathname}index` : x.pathname)
          .replace(/\//g, '_')
          .replace(/^_/g, ''),
      })
    ),
    baseUrl: 'http://<IP_ADDRESS>:8080', // this has to be internal IP of the docker container inside of Github Actions
  },
  generateOnly: true,
  failOnDifference: true,
};

hmm, great catch! wanna give a proper fix a spin? :D I think you are already pretty much caught the exact problem so fix might not be that complicated 🤔

Well, the exact problem is that lost-pixel doesn't work great with folders... So we could either a - replace all / in names with _ or something. Or b - make lost-pixel work well with folders.
I think option b is the best, but I don't have bandwidth for now. I am just annoyed that percy is giving me 1px diff every day, so trying out lost-pixel, if it works well for me I might consider adding folders support, but tbh probably not anytime soon as I don't have many pages for now. Anyway, hope this helps, cheers!

yup, some legit good thoughts, thanks Maxim! we are happy to help you with your migration from Percy anytime both for personal & work projects 😉 we have bunch of people migrating & the fact that you could choose individual thresholds on per page level is usually helping a ton already with those 1-2px flakiness


Is it possible to add column in the table dynamically ?

Unfortunately no, this is not currently supported.

For future reference if you, or anyone else, want to implement this (and even better, send a PR) this is a good place to start:

The existing "loop strategy" that creates table rows dynamically - https://github.com/alonrbar/easy-template-x/blob/master/src/plugins/loop/strategy/loopTableStrategy.ts
Word table XML structure overview - http://officeopenxml.com/WPtable.php

@DVGY could you please provide a sample docx and describe the way you want it to be?

@hydra1983 Just jumping in here sorry, but adding to this topic- we are currently using docx-templates & the only real issue we have is the lack of dynamic columns. i.e taking the same iteration as for rows, but, generating columns based on array length (fixed number of rows, in our case).

I am not sure I understand the use case completely, but if there are a limited number of schemas, you can define separate tables and have them in different tag names. Only output the correct one. Works for my use case. Again, may not help but it is an idea