Question: Runners crashing frequently with CrashLoopBackOff?

@MichaelJJ the runner didn't call `git` directly, the `actions/checkout@v2` will call it.
the error seems related to the runner can't start the `actions/checkout@v2` actions.

Can your runner run step? only `actions/checkout@v2` fail or all kinds of steps in the job are failing?

Also, make sure you don't have a really big environment set on the environment or in your job since a huge environment variable block might block creating a new process on the OS.

Runners crashing frequently with CrashLoopBackOff
**Describe the bug**

Suddenly GitHub Runners containers starts to crash with below errors and keeps in CrashLoopBackOff.

And when we update the runner with the latest release it gets fixed but after sometime it starts throwing same error.

mv: inter-device move failed: './externalstmp/node12' to './externals/node12'; unable to remove target: Directory not empty

mv: inter-device move failed: './externalstmp/node12_alpine' to './externals/node12_alpine'; unable to remove target: Directory not empty

## Runner Version and Platform
Kubernetes Cluster 1.20
GitHub Runners version 2.280.3

OS of the machine running the runner? OSX/Windows/Linux/...
Linux

Hi @azizzoaib786,

Are you experiencing this issue again? Please, look at this issue, which might help with your problem. If not, could you please provide how did you set up your runner so we can try to reproduce this behaviour?

I'm going to close out this issue until we hear back from you, please let us know if you are still seeing this issue!

Issue running steps on ephemeral kubernetes agent - No such file or directory
**Describe the bug**
We are using the new self-hosted runner scaling API to create a new kubernetes agent with every new job. When trying to run steps like checkout v2, we receive the error No such file or directory. We can manually run git commands.

## Runner Version and Platform
Version of your runner?

2.284.0 using docker image based on ubuntu:20.04. The image has the runner pre-installed We have a handful of utilities pre-installed and also run the `installdependencies.sh` during image creation.

## What's not working?
Actions steps, like actions/checkout@v2

Action workflow:

jobs:
 test-build:
 runs-on: self-hosted
 steps:
 - name: pull
 uses: actions/checkout@v2

## Job Log Output

##[group]Run actions/checkout@v2
2021-11-04T15:18:27.5101918Z with:
2021-11-04T15:18:27.5102825Z repository: ****
2021-11-04T15:18:27.5104008Z token: ***
2021-11-04T15:18:27.5104359Z ssh-strict: true
2021-11-04T15:18:27.5104777Z persist-credentials: true
2021-11-04T15:18:27.5105183Z clean: true
2021-11-04T15:18:27.5105527Z fetch-depth: 1
2021-11-04T15:18:27.5105854Z lfs: false
2021-11-04T15:18:27.5106199Z submodules: false
2021-11-04T15:18:27.5106549Z ##[endgroup]
2021-11-04T15:18:27.5182071Z ##[error]No such file or directory
2021-11-04T15:18:27.5190763Z ##[debug]System.ComponentModel.Win32Exception (2): No such file or directory
2021-11-04T15:18:27.5192403Z ##[debug] at System.Diagnostics.Process.ForkAndExecProcess(String filename, String[] argv, String[] envp, String cwd, Boolean redirectStdin, Boolean redirectStdout, Boolean redirectStderr, Boolean setCredentials, UInt32 userId, UInt32 groupId, UInt32[] groups, Int32& stdinFd, Int32& stdoutFd, Int32& stderrFd, Boolean usesTerminal, Boolean throwOnNoExec)
2021-11-04T15:18:27.5194067Z ##[debug] at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
2021-11-04T15:18:27.5195191Z ##[debug] at System.Diagnostics.Process.Start()
2021-11-04T15:18:27.5197055Z ##[debug] at GitHub.Runner.Sdk.ProcessInvoker.ExecuteAsync(String workingDirectory, String fileName, String arguments, IDictionary`2 environment, Boolean requireExitCodeZero, Encoding outputEncoding, Boolean killProcessOnCancel, Channel`1 redirectStandardIn, Boolean inheritConsoleHandler, Boolean keepStandardInOpen, Boolean highPriorityProcess, CancellationToken cancellationToken)
2021-11-04T15:18:27.5200247Z ##[debug] at GitHub.Runner.Common.ProcessInvokerWrapper.ExecuteAsync(String workingDirectory, String fileName, String arguments, IDictionary`2 environment, Boolean requireExitCodeZero, Encoding outputEncoding, Boolean killProcessOnCancel, Channel`1 redirectStandardIn, Boolean inheritConsoleHandler, Boolean keepStandardInOpen, Boolean highPriorityProcess, CancellationToken cancellationToken)
2021-11-04T15:18:27.5203334Z ##[debug] at GitHub.Runner.Worker.Handlers.DefaultStepHost.ExecuteAsync(String workingDirectory, String fileName, String arguments, IDictionary`2 environment, Boolean requireExitCodeZero, Encoding outputEncoding, Boolean killProcessOnCancel, Boolean inheritConsoleHandler, CancellationToken cancellationToken)
2021-11-04T15:18:27.5205631Z ##[debug] at GitHub.Runner.Worker.Handlers.NodeScriptActionHandler.RunAsync(ActionRunStage stage)
2021-11-04T15:18:27.5206859Z ##[debug] at GitHub.Runner.Worker.ActionRunner.RunAsync()
2021-11-04T15:18:27.5207933Z ##[debug] at GitHub.Runner.Worker.StepsRunner.RunStepAsync(IStep step, CancellationToken jobCancellationToken)

It doesn't appear to be able to run any step, I've also tried actions/setup-python@v2.

I don't have any env variables set. This is the entire workflow:

name: Run

on:
 workflow_dispatch: {}

jobs:
 Test-Job:
 runs-on: self-hosted
 steps:
 - uses: actions/checkout@v2
``

I've also attached the dockerfile used to create the agent The entrypoint script simply starts the runner on container start.
Dockerfile-runner.txt

&& mv ./externals ./externalstmp \

☝ I assume that's the problem?

Yes, I copied the dockerfile from another project and missed that portion.


Question: test(e2e): parallelize tests to improve CI times?

Yes, this is not useful at all for regular cases. However, the goal here is to log so that we can see the reasons for failure _when it fails_

This is exactly the problem - it is hard to tell when a transaction is successful and when it is not **in a general way**

Off the top of my head, the problems are:
- success is sometimes logged to stdout, other times in stderr
- Some CLI commands log "error" to the output when they are successful so it is non-trivial to do some regex/pattern matching.

I'm open to investigating identifying the tx fails more. However, from my previous attempts, there are quite a few edge cases to work around. I can try looking into this again after v12

test(e2e): parallelize tests to improve CI times
## Background

Since our tests are now independent, we can parallelize them to improve CI times

## Suggested Design

Add `s.T().Parallel()` to the following:
- `TestIBCTokenTransferAndCreatePool`
- `TestSuperfluidVoting`
- `TestAddToExistingLockPostUpgrade`
- `TestAddToExistingLock`
- `TestTWAP`
- `TestExpeditedProposals`

Note:
`TestStateSync` cannot be parallelized

## Acceptance Criteria
- tests are parallelized
- benchmark CI time improvement
- ensure that the following still work locally:
 * `make test-e2e-debug`
 * `make test-e2e-short`

Might not be as simple as adding `s.T().Parallel()` due to the need for synchronizing some shared variables.

I also am suspicious that this is where the big speedup will come from, vs block time changes

Its a bit hard to see right now due to #2653 , but my recollection from before was that the time from traces looked to mostly be in waiting for blocks to occur.

tests/e2e: revert logging all tx results
## Background

Not sure when it was added, but the e2e test suite is now logging all tx results. This should be reverted, as it massively crowds out the logs, and makes it hard to get relevant info at a glance. (Perhaps at most logging a tx hash by default, so you can quer)

If this is helpful for a particular debugging flow right now, we can add ways to improve that same debugging flows. (e.g. display results for last 3 txs)

I think this has significantly improved the debugging experience. If these are not present, it is close to impossible to tell what exactly happened in the failing container / why did a certain CLI command fail.

In the long term, we should instead pipe logs from each container to a file and preserve them as artifacts after running the CI job. This would remove the need for the extra logging. However, in the meantime, I think having more logs is better than having none

This is the log from the first TX I saw in the logs: URL

Its about 400 lines. Not sure which part of this is helpful for debugging in the normal case, beyond `txhash, stdout, stderr`. We can get the remainder of events & log from querying the txhash, but I don't see how this helps the standard case


Question: Step-by-step guide to enable shortcuts in Ubuntu and other popular Linux distributions?

With this parameter it will run "natively" on Wayland. Without it will run through XWayland. It's a compatibility layer.
On my phone I set this variable globally for all Qt applications.

Step-by-step guide to enable shortcuts in Ubuntu and other popular Linux distributions
Despite the mentions of D-Bus and the need to use system level shortcuts, the process for non-developers like myself is not entirely straightforward. So this may limit the user audience.

I might try to make the PR adding to README.md myself. I just want to know if this makes sense.

Not sure what you mean, but Wayland is the default since Ubuntu 21.04.

I'm using Ubuntu 22.04.3 LTS and ran into an issue: URL I had heard a little about Wayland, but had no idea how it related to keyboard shortcuts.

I believe that a large portion of Linux users have Ubuntu with Wayland, so I want to make it easier for them to use Crow.

Ubuntu usually at 6-8 place by popularity according to URL
While I see the point of step-by-step instruction, it will be different for different DE's. Event Kubuntu and Ubuntu will have different instructions. I would prefer to avoid maintaining it.
I would suggest to blame Wayland for it because it doesn't provide any DE-independent way for global shortcuts.

On Ubuntu 22.04, global shortcuts work in Google Chrome and do not work in gedit, Evince, ...
**Bug description**
Both default Ctrl - Alt - E and a new shortcut I set instead:
- work in Google Chrome,
- don't work in most other applications, e.g. gedit and Evince.

I've read that "Wayland does not support global shortcuts registration, but you can use D-Bus to bind actions in the system settings.", but I can't figure out why it works in Google Chrome.

**Environment**

- OS: Ubuntu 22.04.3 LTS
- Desktop environment: GNOME 42.9
- Crow Translate version: 2.11.0
- Windowing System: Wayland

Most likely you run Crow on XWayland and it works with other XWayland applications, like Google Chrome.

Could you tell how can I check it?

I tried
xlsclients
 as a random internet advice tells. It tells that Google Chrome does run on XWayland, but Crow doesn't:
Screenshot from 2023-12-06 22-22-15

You were right:

pavel@pavel-ux31a:~$ env | grep QT
QT_ACCESSIBILITY=1
QT_IM_MODULE=ibus
pavel@pavel-ux31a:~$ export QT_QPA_PLATFORM=wayland
pavel@pavel-ux31a:~$ env | grep QT
QT_ACCESSIBILITY=1
QT_QPA_PLATFORM=wayland
QT_IM_MODULE=ibus
pavel@pavel-ux31a:~$ crow
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
QSocketNotifier: Can only be used with threads started with QThread

Now the shortcuts don't work in either Chrome or gedit. Crow app itself also works worse, e.g. not all entered text is displayed.

I wish shortcuts worked across all apps, and Crow worked well.

What should I do?

On Wayland there is no API for global shortcuts. Each DE implements global shortcuts in its own specific way and you need to manually register D-Bus commands on shortcuts. But now you should have working selection translation. Try it out.

This is odd. I assume that it could be some GNOME-specific bug. I run the app my phone on Phosh (a DE similar to GNOME, but mobile oriented) and the app work fine.

Thank you for explanation.

I created a Gnome shortcut running dbus-send, disabled global shortcuts in Crow, and now the shortcut works in both Chrome and gedit:
image

The shortcut works both with Crow running with QT_QPA_PLATFORM=wayland and without it. Which option should I use?


Question: UI stops functioning, but doesn't completely block/hang?

This issue has been closed automatically because it needs more information and has not had recent activity. See also our issue reporting guidelines.

Happy Coding!

UI stops functioning, but doesn't completely block/hang
Does this issue occur when all extensions are disabled?: I don't know, as this issue takes a while to happen and VS Code is unusable for me without extensions so I cannot use it long enough to see if the issue reproduces. I guess this is a downside of a minimal core system that favours functionality in plugins and not in the core.

- VS Code Version:
Version: 1.76.1
Commit: 5e805b79fcb6ba4c2d23712967df89a089da575b
Date: 2023-03-08T16:31:31.010Z
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: 10.2.154.26-electron.0
OS: Linux x64 6.1.15-200.fc37.x86_64
Sandboxed: Yes

- OS Version: Fedora 37

Steps to Reproduce:

1. Use VS Code
2. That's all I know at this point

But after a while of using it it will simply stop accepting any input, either in the form of keystrokes or mouse clicks. It is not completely hung/blocked though. There is an "activity" bar at the top of the _Source Control_ pane that is moving from right to left over and over again. The same "activity" bar seems to be happening on the _Commits_ sub-pane.

I can change tabs. But I cannot edit in any of them. The _Source Control_ pane is not showing any files as being edited even though there are some. I can scroll in the _Commits_ subpane. I can click on new files in that subpane's "Compare ..." -> "* files changed" but the editor does not switch to that file.

I do also have the following in the OUTPUT tab:

[Error - 05:31:53] Sending notification cpptools/onIntervalTimer failed.
Error: Cannot call write after a stream was destroyed
 at new NodeError (node:internal/errors:371:5)
 at _write (node:internal/streams/writable:321:11)
 at Socket.Writable.write (node:internal/streams/writable:334:10)
 at /home/brian/.vscode/extensions/ms-vscode.cpptools-1.14.4-linux-x64/dist/main.js:59851:29
 at new Promise ( )
 at WritableStreamWrapper.write (/home/brian/.vscode/extensions/ms-vscode.cpptools-1.14.4-linux-x64/dist/main.js:59841:16)
 at StreamMessageWriter.doWrite (/home/brian/.vscode/extensions/ms-vscode.cpptools-1.14.4-linux-x64/dist/main.js:59053:33)
 at /home/brian/.vscode/extensions/ms-vscode.cpptools-1.14.4-linux-x64/dist/main.js:59044:29
 at runNextTicks (node:internal/process/task_queues:61:5)
 at processImmediate (node:internal/timers:437:9)
[Error - 05:31:53] The language server crashed. Restarting...

About the only thing that ever resolves this is a _Developer: Reload Window_ action. But even then, it only lasts a few minutes, or seconds even and it goes back to be unresponsive.

I am sure there is nowhere near enough info here to diagnose, but I am happy to take guidance on collecting enough info.

I don't follow, can you share a gif?

Does this happen if you disable extensions? eg F1 > Disable All Installed Extensions.

If that resolves it, maybe you can work out which extension is responsible by using the "Start Extension Bisect" command

I don't know how to make those.

I answered that in the original post. VS Code is quite unusable without extensions and given that this doesn't happen immediately, VS Code would not be usable enough for me to wait for it to happen. I would open it and wouldn't be able to do anything useful with it, so the problem likely would never reproduce as it's not doing anything.

But honestly, VS Code is completely unusable for me at the moment so I cannot add anything useful to this issue.

I wonder whether this issue is related to the other one?

I don't really understand what you are seeing in the SCM view though, and that sounds like a good clue. If you are able, we might also get some information from

- F1 > Set Log Level > Trace
- repro the issue and grab the log from the Window output channel

None of that is going to be possible until #177282 (which is a blocking crasher for me and has had no activity at all!) is resolved. That is a complete and outright hang and crash after an OOM.

The window freezes entirely as soon as I select _Source Control_ from the left pane, pops a few WNRs (window not responding) until it finally crashes outright and is terminated. The active plugin on the plugin bar on the left doesn't even show a change that is how quickly the window freezes, so there is no functioning "Window output channel" to grab a log from.

Hey @roblourens, this issue might need further attention.

@brianjmurrell, you can help us out by closing this issue if the problem no longer exists, or adding more information.

Memory use grows until OOM
Does this issue occur when all extensions are disabled?: Yes

- VS Code Version:

Version: 1.76.1
Commit: 5e805b79fcb6ba4c2d23712967df89a089da575b
Date: 2023-03-08T16:31:31.010Z
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: 10.2.154.26-electron.0
OS: Linux x64 6.1.15-200.fc37.x86_64
Sandboxed: Yes

- OS Version: Fedora 37

Steps to Reproduce:

1. `code --disable-extensions`
2. Select _Source Control_ from the left pane
3. Watch memory growth with `top` -- it gobbles up GBs of RAM
4. Dismiss several **The window is not responding** dialogs with _Keep waiting_
5. Finally get a new dialog **The window terminated unexpected (reason: 'crashed', code: 132')** with an option to _Reopen_
6. Click _Reopen_
7. Rinse
8. Repeat

VS Code is now entirely unusable for me.

Native crash dump in zip archive

Apologies, but put into a zip simply to placate GitHub's supported file types.

Any ideas on this? I hate to sound impatient, but this one is a complete blocker for me. VS Code is entirely unusable at this point. Have to go back to the `git` CLI and vim fugititve, which clearly is not a nice and functional as VS Code.

Is it too much to ask to get some help on this one given that VS Code is completely unusable for me on this? This is not just some functionality that isn't working. This is a full-out hang and crash as soon as I select _Source Control_, which I am sure you can understand is vital functionality.

Just to clarify regarding the "freeze-slow-crash-leak" label, there is nothing slow about it. It happens immediately upon selecting _Source Control_ which is what makes this such a blocker for me.

Still no update here? Can somebody **PLEASE** look into this?

Is there not enough information? What else can I provide? I am happy to do the leg work here.

I was able to resolve this by doing a `git gc` in the repo that was causing it.

Having VS Code OOM and crash due to this situation is clearly sub-optimal.

In the past few days, the crash has been extremely severe. If I play Dota2 and turn on VScode, my computer will crash directly after a while

Do you still face the issue with latest versions without having to perform `git gc` as a workaround ? If the issue persists, it would be great if you can share a minimal repro.


Question: Is Indexhibit dead?

It's amazing how much people know about me. The projects fail because it takes time and money. Where were all of you when I was trying to find donations? How many have emailed me begging for free help - not offering to hire me or pay me for working on your personal site? It's totally unfair that I am responsible and underappreciated. Can you afford to work for over a decade for free? I simply can't. When I have time...I have time...this is the reality. I really do not appreciate that my personal email was posted in this thread...

Is Indexhibit dead?
Hi,

I've been contacted by an artist friend about migrating his indexhibit portfolio to wordpress so as to get a responsive version of his website. My first reflex was to go check on indexhibit.org whether there was new updates and possibly someone might have worked on responsive templates for indexhibit, but the front page of indexhibit.org is empty or nearly empty, and the last updates were done last year...

Maybe it's time to announce that the project is not maintained anymore?

An official announcement would allow people to start planning for a migration.

It was a lovely project btw, I loved working with it a few years back!

Best to you and thanks for everything,

maathieu

The author had mention it’s not being maintained due to exhaustion of resource: he was doing it for free anyway, and if you look at the earlier post, you’d understand you should not expect updates and supports.

said earlier post

Then again if you need a responsive site you shouldn’t be looking at indexhibit, it is a platform designed from the time of simpler sites.

Thanks for your answer. I hope the author can update the Readme so that people can see straight away that the project is over :-).

PHP 8 compatibility?
Vaska, I'm raising this here rather than the forum because the forum is not accepting new postings. This is a critical problem and not just a "How do I ..." question.

My hosting service has just upgraded to PHP8 and my indexhibit 2.1.6 site has immediately stopped working. Browser generates this error: `[Domain] is currently unable to handle this request. HTTP ERROR 500 `

Does this require an update to indexhibit code, or is there a setting I can update myself? I'm no expert in php and am flying blind ... also slightly panicked.

Hi 5833tP2,

Did you find any solution to this? I've been spending two days trying to resolve the same issue looking at the Indexhibit forum, but I haven't found any solution and I've made too many attempts at changing so nothing works anymore.

Slightly panicked too :)
Thanks !
Trd

No solution at all, I'm afraid @TandiRD. I got no response to my posting. In depseration, I migrated my site to another platform. I hated having to do it but there was no other option for me. You could try emailing Vaska directly at studio@vaska.com. Sorry I don't have better news.

This has happened to me over time, with various hosts deprecating EOL'ed PHP versions. I think I recall trying to get in touch with the devs directly as well. Tragically I decided to move away from indexhibit as it seems more or less retired by the devs. Unfortunate loss of an elegant and fun tool.

Thank you both @5833tP2 & @kees- for the fast reply! I'll try e-mailing Vaska and if not migrating to another site. That would be a pitty though, Indexhibit is such a good tool. I don't understand how the passage to php 8 could mess it all up. I thought it was an advantage to always have the last version.

The world of updating software architecture is not comparable to the end user experience, where updating to the latest app, the newest operating system, buying the newest phone is all generally safe practice.

Creating a piece of software involves depending on all sorts of _things_ related to computers. Nothing is ever created from scratch. Even the earliest calculating machines relied on stable formal systems: the laws of math, physics.. Think about how when you do something as simple as arithmetic, you're trusting that the rules of combining some numbers to get a new result haven't changed, because that would break your calculations. So back to computer science, the design process is about where you place your trust among a large stack of tools, rules, and systems that you must rely on. One thing, in one time and place, must do exactly what you command it to.

With the countless things needed to develop software in the modern environment, you need to organize collections of them as they exist in specific times and places. These are called your **dependencies**. Dependencies can be languages, libraries, frameworks etc, all the way down to hardware.

In contrast to the essentially stable rules of arithmetic, active software is constantly being updated by developers to work better and do more. Security and user experience are also omnipresent concerns.

The web is all over the place in that regard. Things developed so quickly that certain tools have now been nearly unchanged for decades, while other efforts big and small can be downright ramshackle. When there's no precedent in a space, all something has to do to be widely adopted is work well enough for now. For major software like PHP, cleaning it up later involves rewriting lots of code and patching problems that compromise the security of its dependents. Largely for that reason, versioning is used to sort out what will work in one time and place, and what won't.

All this is just to spell out why deprecation happens. Stuff can't always be backwards compatible. Sometimes the effort to keep up is semantic, but sometimes involves so much refactoring that it plays a significant role in devs retiring fading projects.

Vaska has written about letting go of indexhibit. I do believe its only chance would be if it was picked up (more likely, completely recreated) by new dev(s). I hope this answer isn't pandering, I just wanted to explain it comprehensively because you were curious.

@kees- I appreciate the comprehensive explanations. I was thinking it was something along those lines, but the forum incentivising php update got me confused.

@Indexhibit those are very fair and valid points, food for thought on internet and labor. For what it’s worth: thank you for all your work and time. I understand however that gratitude doesn’t pay the bills and will keep that in mind for the future.


Question: Populate the publication policy link, where missing?

Note that the original discussion in this issue was about overriding the from/to date for existing jobs. However, for unretrieved publications, we don't have a job at all, and want to also set the other overview fields: ocid prefix and license, so for implementing this, we should:

Populate the publication policy link, where missing
Some publication policies are good and have valuable information for the data users. It will be helpful to include the "Publication Policy" field on the dataset site. We can auto-populate the field with the pelican data or manually if the publisher is not publishing the publication policy link in their JSONs correctly.

@sabahfromlondon what do you think?

@yolile Can you share an example with Sabah, in case she hasn't seen a good one before?

I have some examples in Spanish but not so many in English. But maybe the UK one is a good one URL and Zambia URL

In Spanish some examples are:
- URL
- URL
- URL

All of the INAI's publications publish a good publication policy, more examples: URL
 URL
etc

And this is another example from Honduras URL

We'd need to update `update_collection_metadata` to either:

1. Just set a new `publication_policy` field
2. Store the entire response from Pelican, so that we don't need to re-process old collections to get additional metadata

Let's do (2) then. How should we name this new field? `metadata`, `pelican_response`, `pelican_metadata`, other?

For the record, this is a sample snippet of what pelican currently returns:

` json
{
 "url": "The URL where the data can be downloaded isn't presently available.",
 "publisher": "Instituto Duranguense de Acceso a la Información Pública y de Protección de Datos Personales",
 "extensions": [
 ],
 "ocid_prefix": "ocds-ywf11i",
 "data_license": " URL
 "published_to": "2021-11-03 19.51.47",
 "published_from": "2021-08-04 18.06.41",
 "publication_policy": null
}

`

Note that the only fields that we are missing from pelican are `extensions` and `publication_policy`, but I'm not sure if we will add more fields to pelican itself in the future. I'm happy with (2), but I'm not sure if we should remove all the other existing columns (`ocid_prefix`, `date_from`, `date_to`, `license`) and use the new JSON column instead, to be consistent.

And, we want the `publication_policy` to be editable, right? From URL

Should we also put this field (`metadata` or `publication_policy`) in the publication/collection form?

Let's call it `extracted_metadata`.

In #256 we want date_to/date_from to be overridable. So we can keep those. I think OCID prefix will always be correct, so we can remove that one.

Similarly, some publishers don't put a license in the package metadata, but they do include one in their docs, so we can leave `license_custom` to be overridden. (We can rename it to `license` and set `db_column="license_custom"`, so that at least within the code the name of the field is consistent.)

Let's save `extracted_metadata` for what's automatically extracted (read only), and then we can add `publication_policy` for the override. That way, the editable field will render automatically in the Django admin (not sure if there are good packages for editing structured JSON fields). We can display the `extracted_metadata` similar to how the Job `context` is rendered, so that admins can see whether they want to override something.

We can add a method to the model that returns the original metadata with any overrides as a new dict. That way, view code can just call `instance.metadata.license` and render the license, without worrying about whether it is the original value or not.

Hmm actually, I think that maybe we want the publication policy to be overridable too, I can't remember a specific case but I'm pretty sure that there are some cases where a publication policy exists but is not referenced in the package metadata

Oh, true, sorry, I commented before finishing reading 😸 all good then, I will implement URL

Should we implement:

 URL

instead of still using Pelican's metadata? Or should we mark this as blocked until #291 is done?

We can do this without doing #291. Doing this is very easy. Doing #291 is much more work.

Code is done now. I just added a new field, because this was the last thing that Kingfisher Process extracted.

The Publication (Collection) also has a publication policy field now. If empty, it will be populated by the job's publication policy from Kingfisher Process. Otherwise, we can provide a manual value that will never be overridden.

Assigning to @yolile to populate whenever (if desired, we could do `scrapy pluck --package-pointer /publicationPolicy` to see which jobs will get a value next time they run).

I've updated some, but I think it would be easier to wait for the auto-update and then change or add the missings

Make from/to date range overridable in admin
e.g. France has a "5021" typo in its data, and another source (or maybe France again) has a minimum year of "21": URL

Also, some publications don't set the date correctly (they set it to the current/retrieval date), so we will need to override those as well (I think Argentina Vialidad).

I think this field is currently a property of the job (which makes sense). For the override, we would put it on the publication itself (and we'll need to remember to change the end date periodically).

We can also add an admin filter to check for future "to" dates (and/or early "from" dates).

I fixed the impossible dates by limiting Kingfisher Process's metadata endpoint to > Unix epoch and <= today.

This issue could remain open for this reason, but ...

That's too much overhead. So, we can just make a note in the quality issues.

FWIW, Vialidad seems to not have the issue anymore: URL

Hmm well, they are not setting it to the current date but the dates are still incorrect.

Does anyone else have known incorrect dates (between 1970 and today)?

With the updated query in Kingfisher Process their dates will be in a reasonable range (see above commit). Will they have incorrect dates even within that range?

I think your fix will work (the files will still be segmented by all the available years though, right?)

Yeah, the exporter worker reads directly from Kingfisher Process without applying similar conditions/filters.

It also happens in Paraguay Hacienda URL but they are not updating their data anymore anyway so I think we can leave the issue closed


Question: Sentry integration is not working with Strapi 4?

@VictorienTardif I don't know if your issue is already resolved. The Strapi folks fixed this in their `4.11.1` version - please update to at least that version (as you're still on `4.2.3`). Additionally, make sure that all your sentry deps are on the same version. (check in lockfile)

Sentry integration is not working with Strapi 4
## Bug report

### Describe the bug
Strapi is not reporting any errors to the sentry. tried triggering errors by sending invalid graphql request and Rest API call in both cases it's not reporting errors to sentry.

A clear and concise description of what the bug is.

### Steps to reproduce the behavior

1. Enable graphql plugin
2. Install latest sentry plugin (one compatible with sentry 4)
3. Configure sentry plugin in config/plugin.js as shown in step below

javascript
// path: ./config/plugins.js

module.exports = {
 //
 graphql: {
 config: {
 endpoint: "/graphql",
 shadowCRUD: true,
 playgroundAlways: true,
 depthLimit: 7,
 amountLimit: 100,
 apolloServer: {
 tracing: false,
 },
 },
 },
 sentry: {
 enabled: true,
 config: {
 dsn: " URL
 sendMetadata: true,
 },
 },
};

5. Create A collection
6. Add Data
7. Call graphql API / Rest API with invalid parameters
8. It will return error response
9. Error wont be logged in sentry

### Expected behavior

The error should be reported to the sentry and should be visible in the sentry dashboard.

### Screenshots

If applicable, add screenshots to help explain your problem.

### Code snippets

If applicable, add code samples to help explain your problem.

### System

- Node.js version: v16.13.1
- NPM version: 8.1.2
- Strapi version: 4.0.3
- Database: postgres / sqlite
- Operating system: mac / linux

### Additional context

Add any other context about the problem here.

Please share your package.json just so we can have a look at what version of the sentry plugin you have installed. (Also please consider updating your strapi version and it's dependencies to the latest version)

Hey this is what my package.json looks like sorry for delayed reply

{
 "name": "strapi-production",
 "private": true,
 "version": "0.1.0",
 "description": "A Strapi application",
 "scripts": {
 "develop": "strapi develop",
 "start": "strapi start",
 "build": "strapi build",
 "strapi": "strapi"
 },
 "dependencies": {
 "@strapi/plugin-graphql": "^4.0.3",
 "@strapi/plugin-i18n": "4.0.3",
 "@strapi/plugin-sentry": "^4.1.1",
 "@strapi/plugin-users-permissions": "4.0.3",
 "@strapi/strapi": "4.0.3",
 "pg": "^8.7.1",
 "sqlite3": "5.0.2",
 "strapi-middleware-cache": "^2.1.7"
 },
 "author": {
 "name": "A Strapi developer"
 },
 "strapi": {
 "uuid": "d131dec1-ef29-4211-987e-003549bb28cc"
 },
 "engines": {
 "node": ">=12.x.x =6.0.0"
 },
 "license": "MIT"
}

You have a bunch of miss-matched strapi packages and I know for a fact that `strapi-middleware-cache` doesn't work on the v4 as there is a new replacement package for it.

@derrickmehaffy We are not using `strapi-middleware-cache` will be removing that from dependencies. did you mean I should have same versions for `@strapi/plugin-graphql` ,`@strapi/plugin-i18n` ,`@strapi/plugin-sentry` and `@strapi/strapi`

Yes all packages prefixed with `@strapi/` should have the same version.

@strapi/developer-experience / @strapi/expansion I'm not sure the root cause on this and it could be either package so I've set it to both of your projects for now.

Folks, does it have to do anything with URL

Strapi v4 by default adds sentry 6.3.0 to yarn lock file which has some bugs. Can we update sentry version to 6.3.2 as mentioned URL

self._mergeOptions is not a function with Strapi v4
### Environment

self-hosted ( URL

### Version
- Strapi - 4.1.7
- @sentry/node - 6.19.6
- @sentry/tracing - 6.19.6

_No response_

### Steps to Reproduce

Instrument Strapi v4 application with Sentry integration. Followed Performance monitoring setup with Koa from the doc

### Expected Result

Log Strapi erros on Sentry

### Actual Result

Not able to track errors on Sentry instead logs `self._mergeOptions is not a function`

<img width="438" alt="Screenshot 2022-04-18 at 8 48 29 PM" src=" URL

Hi @SujayPrabhu96, thanks for writing in! To effectively investigate your issue we would need a little bit more information. Can you share which versions of Koa, Strapi, and the sentry SDK you are using and how exactly you set up the Sentry SDK (ie, how you configured the `Sentry.init()` call)?

Hi @lforst,
I have updated the versions in the issue. As Strapi is built on top of Koa, it is not installed separately.
Regarding setup I have created custom middleware `sentry` in Strapi to make `Sentry.init()` call.

For reference here is my PR: URL
Configured Sentry using sentry middleware

I'm seeing in the repository you linked that you have old Sentry dependencies in your lockfile: example

The particular version you have, has a bug that was reported in URL and got fixed in URL

Can you try and update those dependencies to at least version 6.3.2 and report back whether that fixed the issue? By the way, I strongly recommend using the same versions across all Sentry SDK dependencies, as having different versions might introduce unknown behaviour.

Strapi version 4.11.1 upgraded to latest Sentry version. This fixed the issue. So, closing this

I'm still having the issue with Strapi 4.2.3 and Sentry 6.19.6 for all Sentry packages :/

Are you sure it is fixed?
Is it a regression @lforst?

Thx

@VictorienTardif could you run `yarn why @sentry/core` and `yarn why @sentry/hub` and reply with the output (`npm ls` will work like `yarn why` if you're using that)

Hello @AbhiPrasad, here it is:

yarn why @sentry/core
yarn why v1.22.17
[1/4] 🤔 Why do we have the module "@sentry/core"...?
[2/4] 🚚 Initialising dependency graph...
[3/4] 🔍 Finding dependency...
[4/4] 🚡 Calculating file sizes...
=> Found "@sentry/core@6.19.6"
info Reasons this module exists
 - "_project_#@strapi#plugin-sentry#@sentry#node" depends on it
 - Hoisted from "_project_#@strapi#plugin-sentry#@sentry#node#@sentry#core"
info Disk size without dependencies: "932KB"
info Disk size with unique dependencies: "5.09MB"
info Disk size with transitive dependencies: "5.09MB"
info Number of shared dependencies: 5
✨ Done in 0.51s.

yarn why @sentry/hub
yarn why v1.22.17
[1/4] 🤔 Why do we have the module "@sentry/hub"...?
[2/4] 🚚 Initialising dependency graph...
[3/4] 🔍 Finding dependency...
[4/4] 🚡 Calculating file sizes...
=> Found "@sentry/hub@6.19.6"
info Reasons this module exists
 - "_project_#@strapi#plugin-sentry#@sentry#node" depends on it
 - Hoisted from "_project_#@strapi#plugin-sentry#@sentry#node#@sentry#hub"
 - Hoisted from "_project_#@strapi#plugin-sentry#@sentry#node#@sentry#core#@sentry#hub"
 - Hoisted from "_project_#@strapi#plugin-sentry#@sentry#node#@sentry#core#@sentry#minimal#@sentry#hub"
info Disk size without dependencies: "564KB"
info Disk size with unique dependencies: "3.99MB"
info Disk size with transitive dependencies: "3.99MB"
info Number of shared dependencies: 3
✨ Done in 0.32s.

@VictorienTardif, could you try upgrading to v7? This may fix the error as per: URL

Hi, I found out that it was a problem with Strapi docker image that installs Strapi globally.
There must be a mismatch with Sentry versions or something.
Installing everything locally and running outside of docker it's working fine.

Thx for your help.

@VictorienTardif, if this is not the case already, I would encourage you to use the official Strapi integration for Sentry. They are not always on the newest version of Sentry, but they do make sure that Sentry works properly.


Question: ReferenceError: "AlternateLinks is not defined" upon new SvelteKit install?

@ambios1 you have to create them yourself. you can use this pattern and adapt it for alternate links URL or create a sitemap with URL a PR that would introduce a `generateAlternateLinks("/path")` would also be appreciated

ReferenceError: "AlternateLinks is not defined" upon new SvelteKit install
ReferenceError: AlternateLinks is not defined
 at eval (/Users/.../node_modules/.pnpm/@inlang+paraglide-sveltekit@0.11.0_@sveltejs+kit@2.5.28_@sveltejs+vite-plugin-svelte@3.1.2_sv_bhgsp6l6qijmxfcyqggxzwsu2m/node_modules/@inlang/paraglide-sveltekit/dist/runtime/ParaglideJS.svelte:108:48)

I stumbled into this error too, after adding svelte-preprocess to a newly initialized site.

Error can't appear in Paraglide JS 2.0 anymore. The SvelteKit adapter is not used anymore URL Re-open if the issue persist in v2

Project: Paraglide JS 2.0 (variants, pluralization, gendering)
### Context

This issue serves as "subscribe here to stay up to date with paraglide js 2.0".

### Changelog

- [X] supports for variants
- [X] builds on the inlang SDK v2 which uses sqlite
- URL

### Tasks/issues

See issues with the "v2.0" label

@juliomuhlbauer added to the project that comes after paraglide js 2.0 (metaframework overhaul) URL

Progress is halted until the message format plugin, which most paraglide users use, is updated to v3 URL While updating the message format to v3, the data model showed inconsistencies, see URL

Number 1 prio is to resolve the data model problems. Work on paralglide 2.0 will continue afterward

From discord URL

**End to end import, CRUD, export achieved**

Milestone achieved. We are now entering the phase of taking the observations from an end to end workflow to fix bugs and do adjustemnts where useful/required

Uploading CleanShot 2024-09-18 at 19.00.29.mp4…

Work on paraglide 2.0 continues. Might have a pre-release by the end of the day!

* the inlang sdk v2 is stable
* the message format plugin supports variants (!)

Logical tests are passing. TypeSafety is still a todo. Hence, no pre-release today and no prerelease until mid October. The team is meeting in Rome for an onsite next week which I a) have to attend and b) I have to prep :)

Update:

The tests are passing now, but a release of Paraglide JS 2.0 is postponed until we have lix 1.0, which powers Paraglide JS. That's likely in January or February.

- PRs for fixed or improvements will be reviewed and accepted
- Read more here URL

 URL

it would be nice to also implement something like that in v2

What's this? 👀 _Hint: Work continues. Paraglide JS 2.0 beta this January_

CleanShot 2025-01-03 at 14 11 15@2x

## Paraglide JS 2.0 Beta has been released

- variant (plural, gendering, a/b test) support 🥳
- test the beta and report issues
- targeting general availability by the end of January

Here are examples to get started URL

 URL

I'm very glad that you added a generic form of pluralization using Intl.PluralRules. Reading the examples and documentation, I have some feedback. Sorry if this turns out already covered by your overview video, I can't watch it because of network error. I notice the plurals need a lot of boilerplate:

{
"some_happy_cat": {
 "declarations": ["input count", "local countPlural = count: plural"],
 "selectors": ["countPlural"],
 "match": {
 "countPlural=one": "There is one cat.",
 "countPlural=other": "There are many cats.",
 },
 }
}

With a note:

Read the `local countPlural = count: plural` syntax as "create a local variable `countPlural` that equals `plural(count)`".

Is there a plan to make Paraglide infer the most typical case of declarations and selectors (the one documented) from a shorthand:

{
"some_happy_cat": {
 "match": {
 "plural(count)=one": "{count} кіт", // -1 кіт, 21 кіт, 31 кіт...
 "plural(count)=few": "{count} коти", // 2 коти, 22 коти...
 "plural(count)=many": "{count} котів", // 0 котів, 5 котів, 11 котів, 25 котів...
 "plural(count)=other": "{count} кота", // 3,5 кота...
 },
 }
}

Otherwise I seem to need a lot of copy-pasting and the translation file will grow vertically way too fast.

@nykula Yes, most inputs are inferred.

The inlang message format plugin is responsible for the syntax. Any other syntax can be used as well (icu1, i18next, etc.). That said, expressing messages with variants is complex. So complex that we are optimizing for tooling rather than handwriting and managing JSON files.

@gooonzick Yes. I will put updating these docs URL on my todo list today

Question about the API. Should Paraglide JS 2.0

1⃣ prefix `locale` suff with "Available"

ts
import { availableLocales, type AvailableLocale, assertAvailableLocale } from "./paraglide/runtime.js"

const locale: AvailableLocale = "en"

if (availableLocales.includes("de")){
 //
}

const x = assertAvailableLocale("fr")

2⃣ or drop the `available` prefix

ts
import { locales, type Locale, assertLocale } from "./paraglide/runtime.js"

const locale: Locale = "en"

if (locales.includes("de")){
 //
}

const x = assertLocale("fr")

Vote with 1⃣ for `available` prefix or 2⃣ for no prefix

## Progress update

**Jan 12 - Jan 17**

✅ paraglide js 2.0 beta

✅ astro adapter beta

❌ sveltekit adapter beta

✅ metaframework adapter overhaul approach

**Focus in Jan 20 - Jan 24**

- sveltekit adapter beta
- metaframework adapter overhaul implementation

**Targets for end of january**

- [on track] GA paraglide js 2.0
- [on track] GA adapters
- [on track] GA metaframework overhaul

 URL

**The adapters have been released as beta. Try them out and give feedback.**

- SvelteKit URL
- NextJS URL (look into the next.config.js && src/app/layout.tsx)
- Astro URL

**Target for next week**

- [ ] configurable strategy (i18n routing, cookies, domain based, something else)
- [ ] per locale splitting URL
- [ ] URL

If everything goes well, have the release candidate for paraglide js 2.0 by next Friday 🔥

This is an error I am encountering when running `npx next dev` in my Next.js project

node:internal/modules/esm/resolve:303
 return new ERR_PACKAGE_PATH_NOT_EXPORTED(
 ^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './plugin' is not defined by "exports" in C:\dev\project\node_modules\@inlang\paraglide-next\package.json imported from C:\dev\project\next.config.js
 at exportsNotFound (node:internal/modules/esm/resolve:303:10)
 at packageExportsResolve (node:internal/modules/esm/resolve:650:9)
 at packageResolve (node:internal/modules/esm/resolve:828:14)
 at moduleResolve (node:internal/modules/esm/resolve:918:18)
 at defaultResolve (node:internal/modules/esm/resolve:1148:11)
 at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:528:12)
 at ModuleLoader.resolve (node:internal/modules/esm/loader:497:25)
 at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:231:38)
 at ModuleWrap. (node:internal/modules/esm/module_job:97:39)
 at link (node:internal/modules/esm/module_job:96:36) {
 code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

Using `"@inlang/paraglide-js": "2.0.0-beta.13"` and `"@inlang/paraglide-next": "1.0.0-beta.2"`. `1.0.0-beta.1` has the same problem, but `0.7.9` works fine

Can you try renaming your next config to .mjs? I encountered several esm related issues with nextjs that went away after renaming the config to mjs

It should but on my machine a `next.config.ts` led to module resolution errors.

If you get a `.ts` config to work, make a PR as long as Paraglide JS does not need to be compiled to CJS. Introducing CJS is too much overhead. With the new node feature to import ESM from CJS, the problem might resolve itself.

Oh right, I have probably forgotten to read release notes or similar. In my next config I had this:

ts
import { paraglide } from "@inlang/paraglide-next/plugin";
// ^ note the ./plugin import, hence the error mentioning "./plugin"

export default paraglide({
 paraglide: {
 project: "./project.inlang",
 outdir: "./paraglide",
 },
 // ...other settings
})

But now I need to change it to

import { withParaglideNext } from "@inlang/paraglide-next";
// ^ removed /plugin, imported the new function

export default withParaglideNext({
 paraglide: {
 project: "./project.inlang",
 outdir: "./paraglide",
 },
 // ...other settings
})

I was also amused to see that there were no other exports from the next adapter package, and seemingly no replacement of ` `, `useRouter`, `middleware` and other stuff inside paraglide-js.

Despite that, it works flawlessly now!!

Acctually, it seems like the default output has changed to `./src/paraglide`, while in my project I used the `./paraglide` path for my output. There is an `--output` option you can run, for example `npx paraglide-js --project my-project.inlang --output ./paraglide`, but I don't see a way to configure the output in the `my-project.inlang/settings.json` file. This means I'll have to run the compiler manually, which is unfortunate

I am trying to upgrade to Paraglide V2 with the nextjs adapter but I am currently getting this issue in my middleware.ts file:

[{
 "resource": "/Users/User/code/next-project/middleware.ts",
 "owner": "typescript",
 "code": "2307",
 "severity": 8,
 "message": "Cannot find module './paraglide/adapter' or its corresponding type declarations.",
 "source": "ts",
 "startLineNumber": 2,
 "startColumn": 28,
 "endLineNumber": 2,
 "endColumn": 49,
 "modelVersionId": 106
}]

I am using the same next config and middleware from this example URL

 "scripts": {
 "dev": "next dev --turbopack",
 "build": "paraglide-js compile --project ./project.inlang --outdir ./paraglide && next build",
 "start": "next start",
 "lint": "next lint",
 "postinstall": "paraglide-js compile --project ./project.inlang --outdir ./paraglide",
 "drizzle": "npx drizzle-kit studio --config drizzle.config.ts"
 },

 "devDependencies": {
 "@inlang/paraglide-js": "^2.0.0-beta.13",
 "@inlang/paraglide-next": "^1.0.0-beta.2",

Any help would be greatly appreciated. Thanks!

Hi.
I just wanted to mention that I am getting an Error while running npm install when using the:
 "@inlang/paraglide-js": "2.0.0-beta.14",
 "@inlang/paraglide-sveltekit": "1.0.0-beta.4",

The Error:
npm error Could not resolve dependency:
npm error peer @inlang/paraglide-js@"^2" from @inlang/paraglide-sveltekit@1.0.0-beta.4

Image

Arghhhhh why are beta releases so broken on NPM? Will fix this today

New batch of beta's released:

- paraglide js 2.0.0-beta.16
- paraglide next 1.0.0-beta.6
- paraglide astro 1.0.0-beta.4
- paraglide sveltekit 1.0.0-beta.5

The new beta's have the #346 API:

diff
strategy: ["pathname", "cookie", "baseLocale"]

Please try it out and give feedback. If you encounter issues, please open separate issues to keep this thread clean with updates on the beta.

**Next steps**

- try top level await approach in #88
- prepare release candidate (docs)

In the paraglide sveltekit beta, it seems that the logic to replace `%lang%` with the current language in the `app.html` template is gone.

This logic : URL

Also I can't find the way to translate pathnames in the paraglide sveltekit beta?

**Progress on customizable localized pathnames #359 **

 URL

API will enable you to match any localized route of your choice. The example below prefixes every path with the locales, even for en. The syntax is uses the web standard URLPattern URL

ts
pathnames: {
 "/:path*": {
 en: "/en/:path",
 de: "/de/:path",
 },
},

This pattern will not prefix the locale for en

ts
pathnames: {
 "/:path*": {
 en: "/:path",
 de: "/de/:path",
 },
},

Or go fully custom

ts
pathnames: {
 "/blog/:id": {
 en: "/english/blog/:id",
 de: "/deutsch/artikel/:id",
 },
},

Gonna go with a bundled version of path-to-regex for #359.

I won't work tomorrow and Thursday on Paraglide 2.0 as I am attending a conference. A release candidate at the end of the week is thereby unlikely but a new beta with the pathname API on Friday is likely.

 URL

### URL based localization (pathname, domain based, multi-tenancy) likely nailed!

I spent over 1 week on coming up with this API, and I think it nails any URL-based use case. Will make a decision tomorrow on whether to use URLPattern or path-to-regexp v8, which depends on URL

- one API to rule any url based needs
- not >10 flags are different APIs that interfere in behavior (!)

**Next steps**

- [ ] determine if path-to-regexp v8 can work with a `baseLocale` setting per pattern to combat ambiguous matches
- [ ] else, try adoption of URLPattern

 URL

#378 is shipped 🛥. This was the last big development effort that was needed.

Next up are simple bugfixes or features and write documentation. GA release by the end of February (2 weeks) is on track.

Image

coming in paraglide js 2.0:

auto-import when writing `m`.

no more manual `import * as m`

Image

That looks fantastic, I'm curious how this works, so far couldn't find anything on how to enable auto-import for `import * as X` 🤔

@zhihengGet you need to use the vite plugin of the adapter for the `adapter.js` file to exist.

but good news: adapters will likely be a thing of the past today. found another abstraction which makes adapters redundant. will report more later today :)

## Implemented `serverMiddleware()`, no more adapters needed

I shipped #388 which exposes `serverMiddleware()` that works in any SSR framework. No more adapters. You read right. No more adapters.

- introduced `serverMiddleware()`
- added examples for frameworks, including SSG examples for applicable (closes #109)

diff
import type { Handle } from '@sveltejs/kit';
+import { serverMiddleware } from '$lib/paraglide/runtime';

export const handle: Handle = ({ event, resolve }) => {
 return serverMiddleware(event.request, () => resolve(event));
};

 URL

Released as beta.19!

that is amazing !!! giving it a try now,

hmm got compile error

in compiled message , the generated export has extra ` at the end

i18n/paraglide/messages/save/es.js

ts
// eslint-disable

/** @type {(inputs: {}) => string} */
export const Save = () => `Guardar`;`;

i have this in my en.json

` "Save": "Save",`

The example of @zhihengGet seems to be a bit malformed but I can report a similar issue with the beta 18 I'm playing around with: keys are not clearly marked as case insensitive, which can inadvertently break paraglide exports. On top of that, if you happen to have such issues, you have to manually delete the affected `messages` subfolders to resolve the issue. Can you guys add a clearer warning, not generate these "duplicate" keys and also eventually clean up the `messages` folder with unused localizations?

Awesome redirect feature @samuelstroschein - can wait for v2 release

## Nesting and arbitrary key names support implemented

Surprise for v2. Long time awaited nesting of keys is now supported #285.

{
 "nested": {
 "key": "Nested key"
 }
}

ts
import { m } from "./paraglide/messages.js";

console.log(m"nested.key");

You can even use emojis

ts
import { m } from "./paraglide/messages.js"

m"🍌"

Hi @samuelstroschein, it's great to see the progress with Paraglide v2 lately! I have questions about the api to translate routes:

js
{
 pattern: ":protocol://:domain(.*)::port?/:about/:path*",
 deLocalizedNamedGroups: {
 about: "about"
 },
 localizedNamedGroups: {
 en: {
 about: "about"
 },
 fr: {
 about: "a-propos"
 },
 },
},

Is it required to provide a full url pattern with `:protocol://:domain(.*)::port?` even if I just want to specify that "about" is translated to "a-propos" in french?
Does it work with a route param like `/travel-[city]` that I want to translate to `/voyage-[city]`?
Also maybe I read the documentation too quickly but the `deLocalizedNamedGroups` / `localizedNamedGroups` logic isn't clear to me at the moment.

**Paraglide JS GA release this or early next week**

You can adopt Paraglide JS 2.0 already. The latest beta releases are stable.

The remaining tasks are mostly adding feature for SSG and creating a benchmark suite to test an experimental per locale splitting URL Among the open issues:

- [ ] URL
- [ ] URL
- [ ] URL

Hi bro! Nested key are welcome. But I think the variant should be passed through options, right?

Image

Image

@thankkien you need to wrap messages with variants in an array URL

@samuelstroschein Oh, I was following an expired document here: URL

## Two last bugs

- URL
- URL

I expect to complete them tomorrow!

Before a 2.0 release, I'd like to complete the following issues as well:

- #342
- #444
- comparison table to other i18n libs
- investigate 1h into per locale splitting via SSG

PS The >beta.28 are the release candidates. You can go ahead and already adopt it!

Feedback wanted for the comparison table in the docs URL

- i find it a bit overwhelming
- the key message of "paraglide js is simple to use, tree-shakes, and works in any framework" is not getting across
- BUT enterprise adopters are looking for stuff like multi tenancy etc.

Idea:

Maybe split the comparison table into two? 1. Simple 5 key features then 2. Full feature comparison (for the people who need it)?

Image

For me personally that table is cool. I would only think about how to visually group that features, this should make reception softer. Maybe something like Basic use | Enterprise use / Advanced use. Maybe the other way... Like Performance, Ecosystem, etc. Something what will visually break long list to the few smaller lists.

One simple suggestion: the table is not scrollable on mobile, so you can only see the first three columns.

Yes, maybe order/highlight/group the list. We had a preference for a (Meta)framework first and then looked for translation libraries.
So Metaframework (NextJS, SvelteKit, Astro, ...) compatible and Framework agnostic / support for svelte were important.
So grouping Framework stuff like
Metaframework (NextJS, SvelteKit, Astro, ...) compatible and Framework agnostic would make sense.

Hi, thanks for the hard work !

1. I find the "Requires build step" misleading: the "Yes" has the red cross whereas the "No" has the green tick. At first I thought this is just a typo. But probably the icons are OK, but opposite to the answer they represent. So maybe a "No build step" label would be more appropriate: then Paraglide is "No" with red cross and the others are "Yes" with green tick. Or if "Requires a build step" is a "good" thing, then the icons are wrong.
2. I do not find this particularly overwhelming, I just noticed some points are not very clear to me: "Multi-tenancy", "Strategy agnostic" as examples. Maybe an info icon with a tooltip/title which provides context could help.
4. Instead of "Maturity", I would rather use something which is more common and representative like "Under active development". I feel like Maturity term could disadvantage ParaglideJS for no good reason.

Thank you and congrats for this release!! Hope this will be the new standard for i18n!

Hi @samuelstroschein,

I don't know if I'm referencing the wrong documentation or maybe I have the wrong plugin. I'm trying to include these options but ts is yelling at me saying

javascript
// vite.config.ts
import { paraglideVitePlugin } from '@inlang/paraglide-js';

paraglideVitePlugin({
 project: './project.inlang',
 outdir: './src/paraglide',
 // options: {
 // emitGitIgnore: false,
 // emitPrettierIgnore: false,
 // emitDts: true,
 // },
});

@rickcedwhat wrong docs. the options are defined directly on the root object. Please make a PR to the docs to lift the confusion

ts

paraglideVitePlugin({
 project: './project.inlang',
 outdir: './src/paraglide',
 // emitGitIgnore: false,
 // emitPrettierIgnore: false,
 // emitDts: true,
});

Migration Guide from user from I18N who solely use the useTranslation hook.

Example of what i have created, but easily could be added to Paraglide npm

// Import the JSON file directly as fallback
import messages from "../../messages/en.json";

// Define TFunction type to maintain compatibility with i18next-based components
export type TFunction = (
 key: string,
 options?: Record ,
) => string;

// Helper function to handle parameter interpolation
const interpolateMessage = (
 message: string,
 options?: Record ,
): string => {
 if (!options) return message;

 let result = message;
 Object.entries(options).forEach(([key, value]) => {
 // Handle both {key} and {{key}} patterns for compatibility
 result = result.replace(
 new RegExp(`\\{\\{?${key}\\}?\\}`, "g"),
 String(value),
 );
 });

 return result;
};

// Helper function to convert dot notation keys to underscore notation (matching our JSON keys)
const convertKeyToJsonKey = (key: string): string =>
 key
 .replace(/\./g, "_") // dots to underscores
 .replace(/-/g, "_") // hyphens to underscores
 .replace(/[^a-zA-Z0-9_]/g, "_") // any other special chars to underscores
 .replace(/_+/g, "_") // multiple underscores to single
 .replace(/^_|_$/g, ""); // remove leading/trailing underscores

/**
 * @deprecated
 * This custom useTranslation hook is deprecated and will be removed in the future.
 *
 * Please transition to using ParaglideJS message functions directly for all new code.
 * Instead of:
 * const { t } = useTranslation();
 * t("subscription.subscriber.general");
 * t("fileSize.kilobytes", { size: 150 });
 *
 * Use:
 * import * as m from "@paraglide/messages";
 * m.subscription_subscriber_general();
 * m.fileSize_kilobytes({ size: 150 });
 *
 * This provides full type-safety, better performance, and is the recommended approach going forward.
 * See: URL
 */
export const useTranslation = () => {
 const t: TFunction = (key: string, options?: Record ) => {
 // First try the key as-is
 let message = (messages as any)[key];

 // If not found, try converting dots to underscores
 if (!message) {
 const convertedKey = convertKeyToJsonKey(key);
 message = (messages as any)[convertedKey];
 }

 // If still not found, try some variations
 if (!message) {
 const variations = [
 key.toLowerCase(),
 key.toUpperCase(),
 convertKeyToJsonKey(key.toLowerCase()),
 convertKeyToJsonKey(key.toUpperCase()),
 ];

 for (const variation of variations) {
 if ((messages as any)[variation]) {
 message = (messages as any)[variation];
 break;
 }
 }
 }

 if (message) {
 // Interpolate parameters if provided
 return interpolateMessage(message, options);
 }

 // If no message found, log a warning and return the key
 console.warn(`Translation key not found: ${key}`);

 return key;
 };

 return { t };
};

@qshssewww no. the idea is that the *.inlang folder is under our control. otherwise, we'd have to consider how users interact witht that dir and what is gitignored etc


Question: Design & discovery: Hazard stories for MVP?

@janelx Updated this story to reflect the concept we talked about of this as a version/view of a weather story. I added a couple examples based on past hazard-based stories, but it might be a bit before I can grab some images to go with them because I'll need to wait for new ones or use wayback machine to find some that match.
With that missing piece in mind, does this otherwise reflect what we talked about? Is anything different or missing?

Design & discovery: Hazard stories for MVP
### Design & discovery: Hazard stories for MVP
Preliminary MVP flow (in Figma)
MVP user stories - design details

**Supporting user flow:** Person clicks on a link from an NWS alert

**Stories to include**
- 4.1 As a member of the public who got a hazard alert through their weather app, I want to click a link and see the full WWA hazard
- 4.2 … I want to be made aware of any hazards for a specific location
- 4.3 … I want to understand at-a-glance what, where, and how bad the threat/impact level of a hazard for a 4.4 specific location
- 4.4 … I would like to know what to expect for the next 24 hours (could be more?) for a specific location
- 4.5… I want to understand the actions or steps I could take to save my life or property at my location
- 4.6… I'd like to know when and where the hazard is in order to see if the hazard is approaching me or near me/specific location

Related:
- As an external user, I want to be made aware of the of any hazards for a specific location
**Added just to capture broader need for the following 2 stories.

## Tasks
- Design and define molecules/layout
- Collab w/content for hierarchy of content and content details
- PO collab and review for organizational needs and feasibility
- Feasibility collab and review w/eng
- Determine if an user research is needed

## By the end of this sprint
- Designs ready for review: molecules and layout designed for each story supporting flow for hazard (link from outside source to full alert)
- Beginning documentation of acceptance criteria and supporting need for each user story/molecule
-- Wireframe and needed support (technical and organizational)
-- Documentation of high level key implementation details

**Continuous discovery**
- What we might want to test with users and what we have less certainty about

Out of scope - future sprint:
- Secondary visual imagery discovery for hazards

I believe this ticket is in review:
- Hazard SMEs and Champions on Wednesday, Sept 13
- Forecaster feedback

Once we get feedback, we can then finalize our definition for the MVP Hazard flow.

@janelx are we still waiting on forecaster feedback on this? I don't think we've gotten it, but Sarah might have this prioritized against partner/public needs as well.

@colinmurphy01 I believe we have received enough in from forecasters to begin creating this. I have a good idea of what it will look like and how we might be able to begin testing it. It sounds like there is a large public and partner need for hazard stories (forecaster communication around hazard) and the hazard page in general.

@colinmurphy01 the comment above is for #155 Hazard Forecasts, which I mistook this ticket for. I don't think this ticket requires forecaster feedback at the moment? I'm not sure where that need came from. I created a new ticket for a more detailed wireframe #242. I can review flow and components with POs this Friday and if approved we can close this ticket.

Hazard story
We are dramatically simplifying this feature

### Supported user stories
E4 … As a member of the public or a partner, I would like to understand the possibility, severity, and impact of a hazard
E4.3 …I want to understand at-a-glance what, where, and how bad the threat/impact level is of a hazard for a specific location
E4.4 … I would like to know what to expect for the length of the hazard (could be more?) for a specific location
E4.5 … I want to understand the actions or steps I could take to save my life or property at my location
E.9 As a forecaster I want to be able to write a unique weather story for a specific hazard that is separate from my WFO weather story, in order to communinate relevant details to people experiencing the hazard.

Considerations:
- How do we ingest hazard products into the CMS?
- Is there a Hazard ID we can use?
- How can a forecaster link a story to a hazard in the CMS?
- Can a forecaster correlate a story to multiple hazards?
- When should the hazard story be published or unpublished?

Hypotheses:
- By displaying hazard-specific content only to those impacted by the hazard, we can deliver high value without adding confusion or alarm to other users.
- Content in the hazard story provides a complement to the hazard product itself.

Acceptance Criteria

- [ ]

----- Delete below? -------

### User acceptance criteria
As a member of the public or partner, I understand the conditions, timing, impact and severity of a hazard for my specific location, and the actions I need to take to protect life or property from that hazard.

### Design (define/discovery)
**Purpose**
Provide an open space for forecasters to communicate the what/when/impacts of an impending weather hazard for a specific area, and safety guidance needed to advise those in that area how to protect life and property. Serves as a complement to the hazard products and weather data.

**Format**
Text with the option to include supportive imagery
Text would need basic styling options (bold, italic, underline, add links, etc)
Image formats are TBD

### Examples
**Wind advisory in effect tonight**
Expect strong northwest winds tonight up to 50 mph, ending Friday morning.
Winds will be strong enough to blow away unsecured items, and make driving difficult for high profile vehicles.
**Take action**
Secure loose items like outdoor furniture, and use caution if outdoors, especially driving.

**Severe thunderstorm warning**
A severe thunderstorm has been spotted in McDonough County, moving east.
Expect winds over 50 mph, heavy rain, lightning, and quarter-sized hail, which is likely to damage vehicles.
**Take action**
Move indoors immediately. Move to an interior room on the lowest floor, and avoid large windows.

### Component acceptance criteria
A forecaster should be able to:
- Create a new hazard story
- Write and format the text as desired
- Associate the story with a specific hazard product (or multiple hazard products)
- Tag the story with the hazard type
- Upload an image file (or multiple) to the DAM
- Author alt text or a caption for each image
- Add images (up to 3)
- Publish the story
- Unpublish the story
- Edit an existing story (both updating the text and/or removing or updating the image)
- View all hazard stories created within a given WFO, regardless of publication status, and search by hazard type tag
- View the change log of a story (date/time of change, type of change, person who changed it, etc)

A forecaster should not be able to:
- Inject code into the component
- Write more than 500 words in the text field
- Add more than 3 images

An end user should be able to:
- Navigate to any page displaying the hazard product and see the hazard story paired with it
- Read the text up to 300 words
- If text is longer than 300 words, see a clear invitation to expand it in full
- Expand and collapse the expanded text
- See when the story was last published
- View the image
- If multiple images are present, swipe and/or click through each one
- Read the alt text or caption for each image
- Expand each image and return it to previous size

The system should be able to:
- Automatically include a date and timestamp when the story is published
- Automatically include the name of the WFO it is associated with
- Include the component on the page only if the linked hazard product applies to that location

### Exploration needed
Stakeholder user testing: Is the limit of up to 500 words enough to meet the need?

End user testing:
- Is the guidance of 100-200 words (with room for up to 500) enough to meet the need? If full length, does it negatively impact the experience?
- What type of images add value to the weather story for the user?

**Notes**
- Currently offices differ: 1 product to multiple zones or WSW for each zone and add timing

----

[tasklist]
#### Review: design, function and flow:
- [ ] POs - org alignment and vision review
- [ ] Eng - feasibility review and right size stories
- [ ] UX - what and how to test

[tasklist]
#### Story details
- [ ] Reviewed designs (must be attached)
- [ ] Acceptance criteria define (added to this story)

I'm afraid I haven't worked on this one yet at all - limited on time this week. I do think that once we have the weather story ticket fleshed out, it will heavily inform this one, so I've been prioritizing work on that first. It's ready to be discussed with design and product.

@kmranjo can you do two things:

- confirm that I've updated this to reflect the capability we're testing in the prototype?
- Review the content from the older ticket (below Delete this?) and determine what's relevant to keep?

@colinmurphy01 I updated the info above to include the hypothesis I think we are testing, but want to confirm with @partly-igor and @sarahmhgov that this looks correct.
I also updated the info below the "delete" line to be a bit closer to the concept we're considering, but a lot of it is very specific to implementation and I don't think we're there just yet. Not sure if it is valuable to keep all that since we might need it eventually (even if edited), or if it woudl be cleaner to delete it all and get the design fully where we want it before looking at that level of detail for how the component will work. Thoughts?

The hypotheses look good to me.

Agree that some of the implementation details in the AC below the delete line is a little early, and may change based on feedback we hear next week. Wondering if we refine this ticket after the round of research?

@kmranjo @sarahmhgov I think we are holding on this feature for a while now. I'm going to close this ticket.


Question: core java plugin - inconsistent version resolution?

I am not sure why that check is there. I think maybe I expect that the version was resolved at that point or something so if it was ToolVersionRequest::Prefix in the past it should at this point be resolved to ToolVersionRequest::Version. I would try adding ToolVersionRequest::Prefix and seeing if everything works, if so we can add that to the assertion

core java plugin - inconsistent version resolution
**Describe the bug**

Version resolution is inconsistent between JVM vendors.
Root cause being that the versions aren't consistent between vendors.

**To Reproduce**

Make sure to run this with no local installs of java

sh

...
mise ~/foo/.mise.toml tools: java@17.0.2

openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

✅ You get the latest openjdk 17 release

...
mise ~/foo/.mise.toml tools: java@sapmachine-17

openjdk version "17" 2021-09-14 LTS
OpenJDK Runtime Environment SapMachine (build 17+35-LTS-sapmachine)
OpenJDK 64-Bit Server VM SapMachine (build 17+35-LTS-sapmachine, mixed mode)

❌ You get the initial sapmachine 17 release, not the most recent which would be 17.0.10 at the time of writing

❯ mise ls-remote java@sapmachine-17
sapmachine-17
sapmachine-17.0.1
...
sapmachine-17.0.10
sapmachine-17.0.4-snapshot.0
sapmachine-17.0.7-snapshot.1

**Expected behavior**

Regardless of the vendor, if I use just the major version, I get the latest patch release for said version as per "fuzzy matching"

**`mise doctor` output**

 `mise doctor`

text
version: 2024.4.0 macos-arm64 (2024-04-02)
activated: yes
shims_on_path: yes

build_info:
 Target: aarch64-apple-darwin
 Features: DEFAULT, NATIVE_TLS
 Built: Tue, 2 Apr 2024 01:55:39 +0000
 Rust Version: rustc 1.77.1 (7cf61ebde 2024-03-27) (Homebrew)
 Profile: release

shell:
 /bin/zsh
 zsh 5.9 (x86_64-apple-darwin23.0)

dirs:
 data: ~/.../.mise
 config: ~/.../.mise
 cache: ~/.../.mise
 state: ~/.../.mise
 shims: ~/.../.mise/shims

config_files:
 ~/.../.mise/config.toml
 ~/.../foo-mise-java/.mise.toml

plugins:
 bun (core)
 deno (core)
 go (core)
 gradle URL
 java (core)
 maven URL
 node (core)
 python (core)
 ruby (core)
 vault URL

toolset:
 java@sapmachine-17
 maven@3.9.6
 node@18.20.1

env_vars:
 MISE_DIR=/Users/.../.mise
 MISE_CONFIG_DIR=/Users/.../.mise
 MISE_CACHE_DIR=/Users/.../.mise
 MISE_STATE_DIR=/Users/.../.mise
 MISE_DATA_DIR=/Users/.../.mise
 MISE_SHELL=zsh

settings:
 activate_aggressive = false
 all_compile = false
 always_keep_download = false
 always_keep_install = false
 asdf_compat = false
 cargo_binstall = true
 color = true
 disable_default_shorthands = false
 disable_tools = []
 experimental = false
 go_default_packages_file = "~/.default-go-packages"
 go_download_mirror = " URL
 go_repo = " URL
 go_set_gopath = false
 go_set_goroot = true
 go_skip_checksum = false
 jobs = 4
 legacy_version_file = true
 legacy_version_file_disable_tools = []
 node_compile = false
 not_found_auto_install = true
 paranoid = false
 plugin_autoupdate_last_check_duration = "7d"
 python_compile = false
 python_default_packages_file = "/Users/I327130/.default-python-packages"
 python_pyenv_repo = " URL
 raw = false
 trusted_config_paths = []
 quiet = false
 verbose = false
 yes = false
 ci = false
 debug = false
 trace = false
 log_level = "info"
 python_venv_auto_create = false

 [status]
 missing_tools = "if_other_versions_installed"
 show_env = false
 show_tools = false

1 problem found:

1. new mise version 2024.4.3 available, currently on 2024.4.0

**Additional context**

Honestly I'm not quite sure if this should be a bug or a feature.

Interestingly enough, the problem is already recognized, at least for `openjdk` where major versions _are_ normalized already:

 URL

otherwise `mise use java@17` would behave the same (incorrect) way 😄

This looks inconsistent indeed, will need to dig into this since it works for some and not for others. In the meantime i would have suggested to use the workaround using a `prefix:` scope but it looks that is also not working as expected with #1888.

Behaviour is consistent in the sense that it uses the "exact" match if found, otherwise falls back to newest available version (fuzzy) matching the provided version. The `@17` version is a shorthand for `openjdk` which behaves a bit differently as you have pointed out.

17 --> openjdk-17.0.2
openjdk-17 --> openjdk-17
sapmachine-17 --> sapmachine-17
liberica-17 --> liberica-17.0.10+13 (no liberica-17 version, so newest 17.x is installed)
oracle-17 --> oracle-17

to make it even more fun:

sh
❯ mise use java@sapmachine-17.0.11
...
OpenJDK Runtime Environment SapMachine (build 17.0.11+9-LTS)
OpenJDK 64-Bit Server VM SapMachine (build 17.0.11+9-LTS, mixed mode, sharing)
mise java@sapmachine-17.0.11 ✓ installed
mise ~/foo/.mise.toml tools: java@sapmachine-17.0.11

❯ mise use java@sapmachine-17
mise ~/foo/.mise.toml tools: java@sapmachine-17.0.11

I humbly suggest to nnormalilze all versions when ingesting data for URL

Interestingly this does not happen if `sapmachine-17` is already installed.

bash
 ❯ mise i java@sapmachine-17

 ❯ mise use java@sapmachine-17.0.11
...
OpenJDK Runtime Environment SapMachine (build 17.0.11+9-LTS)
OpenJDK 64-Bit Server VM SapMachine (build 17.0.11+9-LTS, mixed mode, sharing)
mise java@sapmachine-17.0.11 ✓ installed
mise ~/foo/.mise.toml tools: java@sapmachine-17.0.11

 ❯ mise use java@sapmachine-17
mise ~/foo/.mise.toml tools: java@sapmachine-17

How about this:

Instead of making the version resolution logic more complicated, normalize the input data.

If java versions where consistent (major.minor.patch) across all vemdors in rtx-java-metadata, all of this would go away and you could even drop the secret sauce to make `java@21` work as expected.

Happy to help if that's the route you want to take.

@mpern Agree that this might be a better solution but i assume this will be quite some effort. I'm not familiar with the java-metadata repo in detail but historic metadata would need to be updated manually as it is not updated automatically (only new versions are added AFAIK).

@jdx What is your take on this?

Okey, i'm clearly in favour of having a consistent solution by normalizing the versions in rtx-java-metadata.

@mpern with PR URL merged, this should be resolved now. After `mise cache clear` the command `mise ls-remote java` should show no more semantically incorrect versions.

mise panics if prefix: is used on certain core plugins
**Describe the bug**
When using `prefix:` on certain plugins (bun, deno, java, ruby,..) the installation panics with following error.

**To Reproduce**
`mise i java@prefix:sapmachine-17`

**Expected behavior**
Installation is successful with latest version matching the prefix.

**Additional context**
Most likely related to following assertion used in the mentioned plugins.

rust
 fn install_version_impl(&self, ctx: &InstallContext) -> Result {
 ...
 assert!(matches!(
 &ctx.tv.request,
 ToolVersionRequest::Version { .. }
 ));
...

@jdx Shouldn't be possible to use scopes via version suffix as well or was this only intended for configuration files?

Other core plugins like `go`, `node`, `python` don't have this assertion. Adding Prefix to the assertion works, question is if other scopes also would need to be supported and removal of the assertion would make more sense.


Question: How to use PicoScan ROS1 to run 2 PicoScan for negivation?

You are probably right. According to URL and URL you can use URL to create an odometry feedback. But I have not tested it (it is a bit beyond the scope of the driver).

Nevertheless, you can use the slam_toolbox to create an initial map. In navigational mode, the NAV-350 lidar generates pose- and landmark data, which are translated to TF messages. Using these TF messages, you can see in rviz, how the lidar moves on the map.

How to use PicoScan ROS1 to run 2 PicoScan for negivation?
Dear Teams,
Would you please share with us the workflow how to use 2 PicoScan for negivation ?
Customer used our 2 PicoScan can't work well, they can't start together.

266b894cce5fde5fec099c9cac76ba9d

Thanks for your feedback. To use 2 picoScan lidars under ROS-1, start sick_scan_xd twice with different ip addresses and topics in two ros nodes. See the FAQ for an example configuration.

sick_scan_xd publishes PointCloud2 and LaserScan messages, SLAM and navigation using two lidars is a bit beyond the scope of the driver. See slam.md and #206 for more information or use run_linux_ros1_simu_slam_mrs1xxx.bash resp. test_200_slam_ros1_hector.launch as an example.

Dear Teams,

Our customer is running 2 picoScan150 on one controller, however will happen issues with one can't start and no data.
bff850e8b528906f33706293b1a10ee8

Thanks for your feedback. The photo does not support a clear diagnosis of the problem. Please send the launchfiles used for both picoScan150 devices, the commandline calls and parameters to launch sick_scan_xd and complete logfiles for further diagnosis.

Dear Teams,

Please have a look. Could you check what is the issues ? why 2 picScan can’t run well on the one controller when start 2 pcioScan together ?
picoScan150.zip
mail

Dear Teams,

Could you check what is the issues ? why 2 picScan can’t run well on the one controller when start 2 pcioScan together ?

From: rostest ***@***.***>
Sent: Wednesday, May 29, 2024 2:38 PM
To: SICKAG/sick_scan_xd ***@***.***>
Cc: Jeffrey Dong ***@***.***>; Author ***@***.***>
Subject: Re: [SICKAG/sick_scan_xd] How to use PicoScan ROS1 to run 2 PicoScan for negivation? (Issue #326)

EXTERNAL EMAIL: This message was sent from outside of SICK. Please do not click any links or open any attachments unless you trust the sender and know the content is safe. Please report suspicious emails via SMAX >
Best regards

Jeffrey Dong
Product Manager | Sales & Service China & Hong Kong
_________________________________________________________________________________________________________
SICK China Co., Ltd. | Industrial Park | Building A, Suzhou Center Plaza | SuZhou, 215021 | China
广东西克智能科技有限公司苏州办事处 | 江苏省苏州市工业园区苏州中心广场A幢1005室， 215021
Phone +86 512 67339115-5335 | Mobile: +86 186 1621 9594 | ***@***.*** | Service hotline 4000 121 000 | www.sickcn.com | URL

Thanks for further information and launchfiles. To run two picoScan devices simultanously, sick_scan_xd must be started in two different nodes. Each node must be configured with different lidar ip addresses and udp ports, different node names, different ros topics and frame ids for each point cloud. Therefore the following launchfile parameter should be overwritten by individual settings for each lidar:
* "hostname": e.g. "192.168.0.190" and "192.168.0.98"
* "nodename": e.g. sick_picoscan0" and "sick_picoscan1"
* "publish_frame_id": e.g. "world0" and "world1"
* "publish_laserscan_segment_topic": e.g. "scan0_segment" and "scan1_segment"
* "publish_laserscan_fullframe_topic": e.g. "scan0_fullframe" and "scan1_fullframe"
* "imu_topic": e.g. "imu0" and "imu1"
* "udp_port": e.g. "56661" and "56662"
* "imu_udp_port": e.g. "7503" and "7504"
* individual topics and frame id for each customized point cloud, e.g.
 * replace all "topic=/cloud_" by "topic=/cloud0_" resp. "topic=/cloud1_"
 * replace all "frameid=world" by "frameid=world0" resp. "frameid=world1"

Two modified launchfiles are attached. We recommend to first verify the launchfile configuration separately for each picoScan, then run both devices simultanously.
picoscan_launchfiles.zip

Parameter udp_receiver_ip must be the ip address of your PC running sick_scan_xd. We recommend to use the same subnet as the lidar, i.e. to change the customers current ip address 224.0.0.1 to an ip address within the subnet 192.168.x.y.

ROS2 slam test test_005_hector.launch not working
Hello,

Trying to use the test_005_hector.launch with sick_nav_350 in ROS 2 Iron. It seems the launch file gets stuck after launching nav350. Communication with the nav 350 is working as it should but it does not launch hector or the rviz stuff. I've tried launching it in two different ways:

ros run sick_scan sick_scan_generic test_005_hector.launch

And i've written a python wrapper so it works with:

ros launch sick_scan test_005.hector.launch

Same result:
[sick_generic_caller-1] [INFO] [1693461766.148262524] [sick_scan]: SickScanServices: service "/SickScanExit" created ("/SickScanExit")
[sick_generic_caller-1] [INFO] [1693461766.148357365] [sick_scan]: SickScanServices: ros services initialized
[sick_generic_caller-1] [INFO] [1693461766.148383347] [sick_scan]: Setup completed, sick_scan_xd is up and running. Pointcloud is published on topic "cloud"
[sick_generic_caller-1] scanner_type string sick_nav_350
[sick_generic_caller-1] slam_echo string laser_POS_000_DIST1
[sick_generic_caller-1] slam_bundle bool true
[sick_generic_caller-1] min_ang double -2.3998277
[sick_generic_caller-1] max_ang double +2.3998277
[sick_generic_caller-1] intensity_resolution_16bit bool False
[sick_generic_caller-1] hostname string 192.168.0.1
[sick_generic_caller-1] port string 2112
[sick_generic_caller-1] timelimit int 5

To me it looks like the launch file is not forking the process and won't continue working through the launch file.

I've realised that this test is for ROS 1 only. Are there any plans to add examples for ROS 2 with scan matching algoritms without the need for wheel odometry?

Tried the test again with ROS1, scanner, hector and rviz starts up but Global status, Pointcloud and TF are not happy. Complains about:
Global status > Fixed frame > Unknown frame map

Pointcloud2 > Status error > Transform > For frame [cloud]: Fixed frame [map] does not exist

TF: No transform from [xxxx] to frame[map]

Launch file looks like this:

Thanks for your feedback. We will analyze hector_slam support for NAV-350 on ROS-1 and possibilities for a migration to ROS-2.

Please find attached launch and rviz configuration files adapted for NAV-350 and SLAM support. Just unzip file sick_scan_xd_slam_launch.zip into folder sick_scan_xd.

**NAV-350 ROS-1 SLAM example**

Build hector_slam and sick_scan_xd:

cd src
git clone URL
git clone URL
cd ..
catkin_make_isolated --install --cmake-args -DROS_VERSION=1 -DCMAKE_ENABLE_EMULATOR=1 -Wno-dev

Run rviz, sick_scan_xd and hector_slam:

source /opt/ros/noetic/setup.bash
source ./devel_isolated/setup.bash
rosrun rviz rviz -d ./src/sick_scan_xd/test/emulator/config/rviz_slam_nav350.rviz &
roslaunch sick_scan sick_nav_350.launch hostname:=192.168.0.1 &
roslaunch sick_scan test_200_slam_ros1_hector.launch scan_topic:=/sick_nav_350/scan &

The following rviz screenshot shows an example of a NAV-350 pointcloud created by sick_scan_xd and its map generated by hector_slam on ROS1:
image

**NAV-350 ROS-2 SLAM example**

Install the ROS2 slam-toolbox with `sudo apt install ros-foxy-navigation2 ros-foxy-nav2-bringup ros-foxy-slam-toolbox` (replace `foxy` by your ros distribution).

Build sick_scan_xd for ROS-2 as described in INSTALL-ROS2.md

Run rviz2, sick_scan_xd, slam_toolbox and static transforms:

source /opt/ros/foxy/setup.bash
source ./install/setup.bash
ros2 run rviz2 rviz2 -d ./src/sick_scan_xd/test/emulator/config/rviz2_slam_nav350.rviz &
ros2 launch sick_scan sick_nav_350.launch.py hostname:=192.168.0.1 &
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link cloud &
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_footprint base_link &
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 odom base_footprint &
ros2 launch nav2_bringup navigation_launch.py &
ros2 launch slam_toolbox online_async_launch.py &

Note: Laserscan messages need to be remapped to topic `/scan` (default is `/sick_nav_350/scan`). Use `remappings=[ ('/sick_nav_350/scan', '/scan'), ]` in the launchfile, e.g.:

node = Node(
 package='sick_scan',
 executable='sick_generic_caller',
 output='screen',
 remappings=[ ('/sick_nav_350/scan', '/scan'), ], # remap laserscan messages to topic /scan
)

The following rviz2 screenshot shows an example of a NAV-350 laserscan created by sick_scan_xd and its map generated by slam_toolbox on ROS2:
image

sick_scan_xd_slam_launch.zip

Thank you! I will give it a try.

I see that you are using slam_toolbox for ROS2 instead of Hector slam. I thought it was not possible to use slam_toolbox without wheel odometry feedback?

I tried the ROS 1 example but I get the following when launching hector:
[ INFO] [1694066953.126533259]: lookupTransform base_link to cloud timed out. Could not transform laser scan into base_frame.

Can this be done only on nav350, or can it be done on lms-1xx as well?

@erknl I think the above "NAV-350 ROS-2 SLAM example" might work with humble and lms-1xx, if you swap `foxy` with `humble` and `sick_nav_350` with `sick_lms_1xx`.


Question: Title does not seem to be correctly displayed anymore after updating to Nuxt 3.7?

Thanks for the continued effort in helping me debug this, this seems to be fixed with Unhead 1.5.1.

The issue is basically that the client-side doesn't know what the original title is but is rendering a title template.

Title does not seem to be correctly displayed anymore after updating to Nuxt 3.7
### Describe the bug

In a situation similar to this

vue

useSeoMeta({
 title: () => 'Page Title',
 description: () => 'Page Description',
 ogImage: () => '/path/to/image.png',
})

After upgrading to Nuxt 3.7, the meta title does not seem to be correctly retrieved/displayed anymore.

Before the update, it was correctly `Page Title | Site Name`, while now is `| Site Name`.

Seo Kit is updated to the latest version `1.3.10`

Please let me know if you need further details or info :)

### Reproduction

_No response_

### System / Nuxt Info

Shell
System:
 OS: Linux 6.4 openSUSE Tumbleweed 20230823
 CPU: (16) x64 AMD Ryzen 7 4800H with Radeon Graphics
 Memory: 5.22 GB / 15.03 GB
 Container: Yes
 Shell: 5.2.15 - /bin/bash
 Binaries:
 Node: 16.17.0 - ~/.nvm/versions/node/v16.17.0/bin/node
 Yarn: 1.22.19 - ~/.nvm/versions/node/v16.17.0/bin/yarn
 npm: 9.7.1 - ~/.nvm/versions/node/v16.17.0/bin/npm
 pnpm: 8.7.1 - ~/.nvm/versions/node/v16.17.0/bin/pnpm
 Browsers:
 Brave Browser: 116.1.57.53
 Chromium: 116.0.5845.96

Having the same issue with `nuxt-seo-kit` v1.3.10 and Nuxt 3.6.5 - the title is `null`

Hi, can you see if you're using Unhead v1.4. `npm why unhead`, if not can you delete lock file + re-install.

Deleted lockfile, node_modules and installed dependencies again. No luck so far.

`pnpm why unhead`:

@nuxt/devtools 0.8.2
├─┬ @nuxt/devtools-kit 0.8.2
│ └─┬ nuxt 3.6.5 peer
│ └─┬ @unhead/vue 1.4.1
│ └── unhead 1.4.1
└─┬ nuxt 3.6.5 peer
 └─┬ @unhead/vue 1.4.1
 └── unhead 1.4.1
@vueuse/nuxt 10.4.1
└─┬ nuxt 3.6.5 peer
 └─┬ @unhead/vue 1.4.1
 └── unhead 1.4.1
nuxt 3.6.5
└─┬ @unhead/vue 1.4.1
 └── unhead 1.4.1
nuxt-seo-kit 1.3.10
├─┬ nuxt-schema-org 2.2.0
│ └─┬ @unhead/schema-org-vue 0.6.0
│ └─┬ @unhead/vue 1.4.1 peer
│ └── unhead 1.4.1
└─┬ nuxt-unhead 1.4.17
 ├─┬ @vueuse/head 1.3.1
 │ └─┬ @unhead/vue 1.4.1
 │ └── unhead 1.4.1
 └── unhead 1.4.1

Apologies for confusion, this is working correctly on Nuxt 3.6.5! :)

I can confirm that with nuxt `3.6.5` everything works as expected. I start to have this issue only with `3.7`

Can you confirm that you're upgrading using `npx nuxi upgrade --force` (should delete lock file + node_modules) and the unhead version `npm why unhead`

I've tried replicating with Nuxt 3.7 and Unhead 1.4.1 and it _seems_ to be working.

Yes, I always upgrade Nuxt with `npx nuxi upgrade --force` because it is the recommended way.

This is my unhead

npm why unhead
unhead@1.4.1
node_modules/unhead
 unhead@"^1.1.26" from nuxt-unhead@1.4.17
 node_modules/nuxt-unhead
 nuxt-unhead@"^1.4.17" from nuxt-seo-kit@1.3.11
 node_modules/nuxt-seo-kit
 nuxt-seo-kit@"^1.3.11" from the root project
 unhead@"1.4.1" from @unhead/vue@1.4.1
 node_modules/@unhead/vue
 @unhead/vue@"^1.3.7" from nuxt@3.7.0
 node_modules/nuxt
 nuxt@"^3.7.0" from the root project
 peer nuxt@"^3.6.5" from @nuxt/devtools@0.8.2
 node_modules/@nuxt/devtools
 dev @nuxt/devtools@"^0.8.2" from the root project
 peer nuxt@"^3.6.5" from @nuxt/devtools-kit@0.8.2
 node_modules/@nuxt/devtools-kit
 @nuxt/devtools-kit@"0.8.2" from @nuxt/devtools@0.8.2
 node_modules/@nuxt/devtools
 dev @nuxt/devtools@"^0.8.2" from the root project
 peer nuxt@"^3.0.0" from @zadigetvoltaire/nuxt-gtm@0.0.13
 node_modules/@zadigetvoltaire/nuxt-gtm
 @zadigetvoltaire/nuxt-gtm@"^0.0.13" from the root project
 peer @unhead/vue@">=1.1.9" from @unhead/schema-org-vue@0.6.0
 node_modules/@unhead/schema-org-vue
 @unhead/schema-org-vue@"^0.6.0" from nuxt-schema-org@2.2.0
 node_modules/nuxt-schema-org
 nuxt-schema-org@"^2.2.0" from nuxt-seo-kit@1.3.11
 node_modules/nuxt-seo-kit
 nuxt-seo-kit@"^1.3.11" from the root project
 @unhead/vue@"^1.3.1" from @vueuse/head@1.3.1
 node_modules/@vueuse/head
 @vueuse/head@"^1.1.26" from nuxt-unhead@1.4.17
 node_modules/nuxt-unhead
 nuxt-unhead@"^1.4.17" from nuxt-seo-kit@1.3.11
 node_modules/nuxt-seo-kit
 nuxt-seo-kit@"^1.3.11" from the root project

And the problems is still here :/

Please let me know if I have to provide more info

Here is a reproduction for `v2.0.0-beta.24` and nuxt `3.7.0`: URL
I think it's the same issue or very related.

Fixed with Unhead 1.5.1 hopefully :pray:

Thanks for the issue!

I updated everything, but the problem is still there, at least for me.

Maybe there is something wrong with my specific configuration, but I still have this issue with nuxt `3.7.1`. unhead `1.6.2` and nuxt-seo-kit `1.3.13`

I solved this by upgrading nuxt-seo-kit to @nuxtseo/module.

It does not really solve the issue per-se, but with the new module the problem is no longer there.

Thanks for confirming, will close for now as the v2 is my main focus at the moment.

html `lang` goes `undefined` :walking:
### Describe the bug

When adding `@nuxtseo/module` AND using `useServerHeadSafe` to set the html's language, the language goes `undefined` in client side hydration :walking:

Using `useHeadSafe` instead "fixes" the issue, removing `@nuxtseo/module` form the module array does too.

I would not expect this behavior. Am I doing something wrong or is this a good bug report? :smile:

### Reproduction

 URL

### System / Nuxt Info

Shell
------------------------------
- Operating System: Linux
- Node Version: v16.20.0
- Nuxt Version: 3.7.0
- CLI Version: 3.7.2
- Nitro Version: 2.6.2
- Package Manager: npm@9.4.2
- Builder: -
- User Config: modules
- Runtime Modules: @nuxtseo/module@2.0.0-beta.19
- Build Modules: -
------------------------------

Thanks for the issue, looks to be fixed :) URL

(also the nuxt-og-image bug)

Hmm, what about the `title`? It becomes `null` on client hydration if it's set using `useServerHeadSafe`: URL
Using `useHeadSafe` keeps the title intact.


Question: Extend unit of measure symbol predicates to things other than units of measure?

Assigning to @Jamie-SA for review. If he approves, he can either implement or pass on to someone else.

Extend unit of measure symbol predicates to things other than units of measure
Currently we have three symbol-related datatype properties with domain `UnitOfMeasure`:

unitSymbol
unitSymbolHtml # as of 10.0.0
unitSymbolUnicode

The proposal is to extend the predicates to apply to anything, since things other than units of measure may have symbols, such as chemical compounds (this could have been relevant to one of my past clients). Thus:

symbol
symbolHtml
symbolUnicode

and modify `skos:definition` accordingly. We can include `domainIncludes gist:UnitOfMeasure` to indicate that one usage pertains to units of measure.

If we decided to do this, why did we just create #992
See also #959, #579

I see the confusion. #992 should be entitled "Deprecate `gist:symbolHtml` and `gist:symbolUnicode` once the names have been changed in this issue. I'll clarify that.

Remove symbolUnicode and symbolHtml? (post-531 implementation)
Note: these predicates do not currently exist, but will exist after the implementation of issue #531. #531 involves renaming to make them applicable to things other than units. This is about whether we need the HTML and Unicode versions of the symbol predicate.

I thought we agreed to keep Html and Unicode versions based on what @Jamie-SA said about the likelihood of using them in the foreseeable future. See #531 and #959.

I didn't think we reached a conclusion on this. There is the possibility of implementing them in the SA ontology. It depends on whether we consider the need for them broad enough to include in gist.

Recommendation: Move HTML/Unicode to SA ontology, remove from core. Verify with @Jamie-SA