Question: [Question] Getting several context values at once?

`useSelectorWithEqlFn` creates memoized selector (and you need to pass stable `selector` and `eqlFn`).

I'm not sure if I understand your point. (and I'm not sure if I responded well to your concern.)

BTW, if you are interested in a full implementation with useMutableSource for Redux. I developed this URL . The API is not backward compatible and more like proposing a new pattern.

[Question] Getting several context values at once?
Hi :wave:

First things first, thx a lot for this great work! :clap: I'm still discovering it, and maybe I'm going to ask a silly question but... is there any reason why `useContextSelector` examples were always using the same "one call, one value" pattern:

const v1 = useContextSelector((ctx) => ctx.v1)
const v2 = useContextSelector((ctx) => ctx.v2)
const v3 = useContextSelector((ctx) => ctx.v3)
...

...which seems quite verbose to me. Couldn't we simply use a single call such as:

const { v1, v2, v3 } = useContextSelector(({ v1, v2, v3 }) => ({ v1, v2, v3 }))

Thx a lot for your answer! :pray:

You can do that if you memoize the selector function. For example `proxy-memoize` does it for you.

js
import memoize from 'proxy-memoize';

const selector = memoize(({ v1, v2, v3 }) => ({ v1, v2, v3 }));

const Component = () => {
 const { v1, v2, v3 } = useContextSelector(Ctx, selector);
 // ...
};

Thx for this quick answer! I must be missing something but, why should I use memoization? Aren't both patterns eqs?

Because

js
const { v1, v2, v3 } = useContextSelector(({ v1, v2, v3 }) => ({ v1, v2, v3 }))

will trigger re-renders for any changes (like `v4`).

So, "one call, one value" pattern is the rule we follow. You might be interested in reading #19 discussion.

Hmmm... I'm not sure to perfectly understand why, but I'll be looking for some infos within the linked discussion :+1: Thx a lot @dai-shi !

Assuming you are not talking about custom equality function, `const { v1, v2, v3 } = useContextSelector(({ v1, v2, v3 }) => ({ v1, v2, v3 }))` is not technically easy.
It's not impossible though, and that's what `react-tracked` does.

js
const { v1, v2, v3 } = useTrackedState()

`react-tracked` uses `use-context-selector` under the hood. So, they do different jobs.

Support for custom equality function
It seems like the library is currently hardcoded to compare the value produced by the selector using `Object.is`

 URL

Sometimes it may be useful to use a different equality comparison such as shallow equal when composing an object. The redux `useSelector` API has an extra optional parameter for this purpose, which can be used like

const selectedData = useSelector(selectorReturningObject, shallowEqual)

Would you consider supporting this in use-context-selector?

Hi, thanks for opening an issue.
This might be controversial, but I have a strong belief that react community should prefer using `useCallback` to `equalityFn`. In the case of react-redux, it can't be helped because it had to provide a clear migration path from the HoC API.
I'm pretty convinced about this with the upcoming `useMutableSource`. v2 is already implemented in #12, and it _requires_ `useCallback`. Supporting `equalityFn` with `useMutableSource` would be extra work, and I'm suspicious about how to clearly make the implementation Concurrent Mode safe.

That said, I'm eager to learn the use case that requires `equalityFn` and provide a workaround or even a util function. Do you have an example that we can discuss on?

@dai-shi I'm not sure I follow. If a selector composes an object, using referential equality will always trigger a rerender. Shallow equality would help; how would `useCallback` help instead?

Const selector = useCallback (s=>({a: s.a, b: s.b}),[])
const obj = useSelector(selector)

@lishine The selector callback is cached, but it returns a new object every time. The selected value will always be different referentially.

Ok, my bad.
Then create this object in the useContextState with a useMemo. I mean where you create the state for the useSelector

That would violate the rule of hooks, wouldn't it? Using "useMemo" in a selector means that it's called in function that is neither a component nor a custom hook.

I suppose the deeper underlying point is that you can memoize the returned object (not through useMemo, but something else like reselect or just rolling your own memoization), but that's just ultimately a roundabout way of doing custom equality checks.

@victorporof Sorry, I think I mixed the two points. Ref equality is almost default with useMutableSource (and React in general), so supporting equalityFn is an extra work that I think shouldn't be part of this library. So, one would need to use memoization library before passing. I'm not very familiar, but reselect can be used or there would be more alternatives.

(Requiring `useCallback` is a different story.)

To be clear, this is the point myself (and I believe OP) are referring to: URL

If this library choses to only support memoization instead of equality checks for the generated selector data, then sure.

This I what I meant.
In the hook that you pass to the provider, wrap the object with useMemo.

@lishine You can't useMemo inside a useCallback, or another function that isn't a hook or a function component.

@lishine Yeah. Note that `useMemo` can only be used in render, and often the case with a selector is not in render.

Sure in render , in the component that includes the provider.

I write a custom hook that creates the state. That state is passed to the provider.

@lishine Are you talking about memoizing the whole state that is passed to the provider? That is different from from selecting multiple values from that state.

If you want to return an object from the selector that includes several properties of the state, you create this object beforehand where you manage the state. So that the selector uses it as a property of the state.

@lishine Aha, I see what you mean. I think that's a reasonable workaround (just like many others, such as using reselect, or memoizing the returned value from a selector on the spot). I think we're in agreement that being constrained with just being able to use referential equality doesn't mean that there's no other ways of doing this.

I'd say that there can be various possible combinations of substate that the provider component would then have to know about, which means propagating these concerns up the component tree. I maintain that this workaround (and memoization inside selectors) are less ergonomic or natural than just being able to pass in a custom equality function in the selector. However I also concede that this might be because of some folks just being used to react-redux's approach.

Note: doing this sort of memoization inside the provider component doesn't seem possible when it'd depend on various props that are available only to some deeply descendant component.

In this context, my preference it to use multiple `useSelector`s.

@dai-shi Multiple selectors aren't suitable in all circumstances. Consider this:

const state = useSelector(state => {
 const { foo, bar } = expensive(state, props.baz);
 return { foo, bar };
});

vs.

const foo = useSelector(state => expensive(state, props.baz).foo);
const bar = useSelector(state => expensive(state, props.baz).bar);
});

...where `baz` is a prop. Then also consider the situation where this is used in a component that is instantiated multiple times (e.g. a set of children where each `baz` is a different id).

Multiple selectors won't help. You want to build a memoized selector factory, with a memo'ed caching selector for each component instance. Which is fine (and what you'd do with reselect for example); it's just that shallow equality would be so much simpler, and one of the reasons why react-redux opted to support it in addition to allowing consumers roll up their own memoization strategies, instead of enforcing them.

Thanks for a concrete example. Totally makes sense.
(In my redux apps, I would do expensive work in reducers, and all selectors are just "selecting" parts of state. That's not always the case for everyone, though.)

Here's a rough idea. There might be some issues in CM. 🤔

js
const useSelectorWithEqlFn = (selector, eqlFn) => {
 const ref = useRef();
 const patchedSelector = useCallback((state) => {
 const selected = selector(state);
 if (eqlFn(ref.current, selected)) {
 return ref.current;
 }
 ref.current = selected;
 return selected;
 }, [selector, eqlFn]);
 return useSelector(patchedSelector);
};

@dai-shi While that works fine, that would trigger a re-render wouldn't it? My point wasn't necessarily about receiving a memoized object for the consumer code, but making sure that the components don't rerender in the first place.

Scratch that, I think that should work fine. You'd also need to be careful that `selector` is itself handled via `useCallback`. It's a mountain of hooks :)

Wow this blew up :)

Yes @victorporof gave a reasonable example use case. Mine was pulling from multiple parts of the state, contingent on a null check. Here's a simplified example:

const foo = useSelector(s => s.flag && s.foos[fooId]);
const bar = useSelector(s => s.flag && s.bars[barId]);

which could be better replaced by

const foo = useSelector(s => flag && ({ foo: s.foos[fooId], bar: s.bars[barId] }), shallowEqual);

I use typescript and sadly the first version loses the proof that `foo` and `bar` are either both null or both present. And I don't want to push this projection into the state itself, because that would create duplication of data and consistency issues (I use this library like one is encouraged to use redux, with normalised immutable state).

The other obvious workaround is to use reselect and I think it's fair to recommend that instead :)

I haven't actually used reselect before - I looked at the documentation, and had some trouble understanding how to apply it to my example. Would it be like this?

const fooAndBarSelector = useMemo(() =>
 createSelector(
 s => s.flag,
 s => s.foos[fooId],
 s => s.bars[barId],
 (flag, foo, bar) => flag && { foo, bar },
 ),
)
const fooAndBar = useSelector(fooAndBarSelector)

I guess that works although it's quite finicky

Or maybe this works? reselect docs have some room for improvement regarding extra arguments :)

// top level
const fooAndBarSelector = useMemo(
 createSelector(
 s => s.flag,
 (s, { fooId }) => s.foos[fooId],
 (s, { barId }) => s.bars[barId],
 (flag, foo, bar) => flag && { foo, bar },
 ),
)
// in my component
const fooAndBar = useSelector(s => fooAndBarSelector(s, { fooId, barId }))

with the caveat that there has to be one `fooAndBarSelector` per instance of the component (luckily I have just one)

I hadn't thought about this, but it's very convincing. Thanks for the use case.

It's more like `useRef` has to be used carefully in Concurrent Mode.

You want to avoid accessing `s.foos` if the flag is falsy. So, maybe something like this?

js
const fooAndBarSelector = createSelector(
 s => s.flag,
 (s, { fooId }) => s.flag && s.foos[fooId],
 (s, { barId }) => s.flag && s.bars[barId],
 (flag, foo, bar) => flag && { foo, bar },
)

To circle back around, are there any implications of concurrent mode and/or useMutableSource on the notion of introducing a custom equality function parameter?

Or, is that a separate discussion, and is the main issue with the custom equality function idea one of API design and steering usage in the right way?

Besides my preference on API design, `useRef` is very difficult to use in CM. Looking back `useSelectorWithEqlFn` in URL , I hope it works in CM, but not 100% confident.

Some references:
- URL
- URL

Reading those links there doesn't seem to be a place for this custom equality function idea with useMutableSource. But I found the API highly confusing. I was particular confused by the redux example

function Example() {
 // The user-provided selector should be memoized with useCallback.
 // This will prevent unnecessary re-subscriptions each update.
 // This selector can also use e.g. props values if needed.
 const memoizedSelector = useCallback(state => state.users, []);

 // The Redux hook will connect user code to useMutableSource.
 const users = useSelector(memoizedSelector);

that doesn't look very ergonomic or similar to how anybody uses redux selectors today... am I missing something here?

Okay, I may need to change my mind if React supports equalityFn. ref: URL
If it lands, we don't need useMutableSource, and there's no restriction.

I was thinking about this again recently, actually. I have seen more situations since I opened the issue where `equalityFn` would be useful, I don't remember specific examples right now but I think they are similar to the above, typically whenever you combine an inline non-trivial selector function with typescript type narrowing.

It's still doubtful, if react really supports equalityFn. There's probably going to be a big debate.

For now, we should focus on creating a wrapper.
Rewriting URL

js
import { useContextSelector } from 'use-context-selector';

export const useSelectedContext = (ctx, selector, eqlFn) => {
 const prev = useMemo(() => ({ value: null }), [ctx]);
 const patchedSelector = useCallback((state) => {
 const selected = selector(state);
 if (eqlFn(prev.value, selected)) {
 return prev.value;
 }
 prev.value = selected;
 return selected;
 }, [selector, eqlFn, prev]);
 return useContextSelector(ctx, patchedSelector);
};

Hopefully this wrapper solution or something similar can be considered as the standard export of the package. I was really hoping to replace Redux with Context API for application state management. While `use-context-selector` seemed promising in this endeavor, not being able to specify an equality function like you can in Redux is a deal-breaker.

The equality function option would be especially useful when replacing Redux with Context since you usually need to grab both values and methods (mutations) from your context object and so referential equality is a clear problem. With Redux you're doubly covered in this regard, because instead of selecting mutations you dispatch them through a separate mechanism.

Having the wrapper function mentioned in the above comment as a work-around is great, but I'm unsure how stable the solution is.

While I understand where you are coming from, I'm still not confident if the equalityFn is going to be a mainstream in the React core. I'm not sure either how we can make it CM friendly. My hope is to do some experiment against a new experimental build of React and learn how it behaves (but that doesn't ensure anything for the future React versions.)

We had some discussions above and some of them are convincing the need of equalityFn. But, if it's about methods or Redux dispatch, I'd suggest to use two hooks.

js
const foo = useContextSelector(v => v.state.foo);
const dispatch = useContextSelector(v => v.dispatch);

It should be just fine at this point. Not sure with concurrent mode thing in the future, but I guess your concern is for the future React too? So, including the workaround in the lib doesn't seem to help, does it?

Thanks for this nice hook. I observed a problem that I want to share, maybe it will help others too.

If you intend to use this hook like this for example:

js
function useSelectedArray(keys: string[]): string[] {
 return useSelectedContext(formStateContext,
 (state) => keys.map(key => state[key]),
 (prev, next) => deepCompare(prev, next))
}

The hook will never return the cached value but always a new value. The problem lies in the dependency of the `useMemo` hook which is: `[ctx, selector, eqlFn]`. In the above example, there is always passed a new selector and eqlFn.

To fix this, I edited the dependency array as follows `[]`. Because in my code I know, the dependencies will never change..

Another option would probably be to use a `useCallback` hook for the the `selector` and `eqlFn` of `useSelectedArray`. But somehow this felt weird to me. What are your thoughts on this?

@timbicker Hi, you understand it correctly. My expectation is to use `useCallback`, or what's better is to define those functions outside render whenever possible.
Now, I know this is controversial, but from library perspective, giving stable function from the library consumer is almost necessary.
We have a discussion thread about this for React 18: URL

Here is the typescript version:

export const useEqlContextSelector = (
 ctx: Context ,
 selector: (val: T) => R,
 isEql: (a: R | null, b: R) => boolean
) => {
 const patchedSelector = useMemo(() => {
 let prevValue: R | null = null;

 return (state: T) => {
 const nextValue: R = selector(state);

 if (isEql(prevValue, nextValue)) {
 return prevValue;
 }
 return (prevValue = nextValue);
 };
 }, [isEql, selector]);

 return useContextSelector(ctx, patchedSelector);
};

I don't think `useMemo` is need at all, in fact, it's doing the opposite becuase `selector` and `eqlFn` are most likely being updated every render, I believe `useRef` would best serve the purose (storing `prevValue`)

ts
import { useContextSelector } from 'use-context-selector';

export const useSelectedContext = (ctx, selector, eqlFn) => {
 const prevValue = useRef(null);
 const patchedSelector = (state) => {
 const nextValue = selector(state);
 if (eqlFn(prevValue.current, nextValuue)) {
 return prevValue.current;
 }
 return (prevValue.current = nextValue);
 }
 };
 return useContextSelector(ctx, patchedSelector);
};

Just found that I implemented pretty similar to this package, but with a bit more features:

1. memoization of returned object is supported by default (and custom equal)
2. no "stale props" problem
3. has deps for "selector" function

 URL

Yeah, we recently implemented `useShallow` in Zustand with `useRef`.
 URL

FYI, our latest recommendation is URL and if you need custom equality function, `use-sync-external-store` would do:

js
import {
 createContext as createContextOrig,
 useContext as useContextOrig,
 useRef,
} from 'react';
import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';

export const createContext = (defaultValue) => {
 const context = createContextOrig();
 const ProviderOrig = context.Provider;
 context.Provider = ({ value, children }) => {
 const storeRef = useRef();
 let store = storeRef.current;
 if (!store) {
 const listeners = new Set();
 store = {
 value,
 subscribe: (l) => { listeners.add(l); return () => listeners.delete(l); },
 notify: () => listeners.forEach((l) => l()),
 }
 storeRef.current = store;
 }
 useEffect(() => {
 if (!Object.is(store.value, value)) {
 store.value = value;
 store.notify();
 }
 });
 return {children}
 };
 return context;
}

export const useContextSelector = (context, selector, equalityFn) => {
 const store = useContextOrig(context);
 return useSyncExternalStoreWithSelector(
 store.subscribe,
 () => selector(store.value),
 undefined,
 equalityFn
 );
};

With that, let's close this.


Question: [Bug]: UnboundLocalError: local variable 'date' referenced before assignment?

I've now published an update which fixes the paging issues with the new API! v3.5.0

Do note, it's no longer possible to jump directly to a specific page unless that page has already been visited, this is the result of the new "cursor" based paging system which was required due to the amount of models on CivitAI.

Also another note, currently the API returns the error:

Error: 500 Server Error: Internal Server Error for url

Quite often, there is nothing I can do about this, as this is an issue caused by the CivitAI API.
I assume this will get fixed after some time! :)
For the time being, I've made a bug report for it here: #233

Other than that, everything should be working again!
Please feel free to create a bug report if you encounter any other issues.

[Bug]: UnboundLocalError: local variable 'date' referenced before assignment
### Describe the bug.

"UnboundLocalError: local variable 'date' referenced before assignment" I am getting this error after trying to load installed models or load outdated models in browser.

### Steps to reproduce the problem.

1. Go to sd-civitai-browser-plus
2. Press update models
3. scan for models you need
4. press load Outdated models to browser

### Expected behavior

nothing works after that

### System info

* Extension version: fbdbc336
* OS: Windows 11 professional
* SD-WebUI version: Forge f0.0.17v1.8.0rc-latest-276-g29be1da7
* Python: 3.10.9

### Console logs

Shell
Launching Web UI with arguments: --skip-torch-cuda-test --xformers --pin-shared-memory --cuda-malloc --cuda-stream
Using cudaMallocAsync backend.
Total VRAM 12288 MB, total RAM 32694 MB
WARNING:xformers:A matching Triton is not available, some optimizations will not be enabled.
Error caught was: No module named 'triton'
xformers version: 0.0.23.post1
Set vram state to: NORMAL_VRAM
Always pin shared GPU memory
Device: cuda:0 NVIDIA GeForce RTX 3060 : cudaMallocAsync
VAE dtype: torch.bfloat16
CUDA Stream Activated: True
Using xformers cross attention
ControlNet preprocessor location: F:\Forge\webui\models\ControlNetPreprocessor
[-] ADetailer initialized. version: 24.3.0, num models: 12
CivitAI Browser+: Aria2 RPC started
Civitai: API loaded
Loading weights [488aab7bd7] from F:\Forge\webui\models\Stable-diffusion\mklanArtVersion_mklan201art.safetensors
2024-03-16 13:37:37,015 - ControlNet - INFO - ControlNet UI callback registered.
model_type EPS
UNet ADM Dimension 2816
Running on local URL: URL

To create a public link, set `share=True` in `launch()`.
Civitai: Check resources for missing info files
Civitai: Check resources for missing preview images
Startup time: 17.6s (prepare environment: 3.9s, import torch: 4.1s, import gradio: 0.9s, setup paths: 0.7s, initialize shared: 0.1s, other imports: 0.5s, load scripts: 4.9s, create ui: 2.1s, gradio launch: 0.2s).
Using xformers attention in VAE
Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
Using xformers attention in VAE
Civitai: Found 0 resources missing info files
Civitai: No info found on Civitai
Civitai: Found 29 resources missing preview images
Civitai: Found 16 hash matches
Civitai: Updated 0 preview images
extra {'cond_stage_model.clip_l.text_projection', 'cond_stage_model.clip_l.logit_scale', 'cond_stage_model.clip_g.transformer.text_model.embeddings.position_ids'}
To load target model SDXLClipModel
Begin to load 1 model
[Memory Management] Current Free GPU Memory (MB) = 11228.910247802734
[Memory Management] Model Memory (MB) = 2144.3546981811523
[Memory Management] Minimal Inference Memory (MB) = 1024.0
[Memory Management] Estimated Remaining GPU Memory (MB) = 8060.555549621582
Moving model(s) has taken 0.53 seconds
Model loaded in 7.0s (load weights from disk: 0.3s, forge load real models: 5.8s, calculate empty prompt: 0.8s).
CivitAI Browser+: model: "PontiusMIX.safetensors" not found on CivitAI servers.
CivitAI Browser+: "Mklan Anime version" is currently outdated.
CivitAI Browser+: "RealCartoon3D" is currently outdated.
CivitAI Browser+: "Cora from Mass Effect: Andromeda" is currently outdated.
Traceback (most recent call last):
 File "F:\Forge\webui\venv\lib\site-packages\gradio\routes.py", line 488, in run_predict
 output = await app.get_blocks().process_api(
 File "F:\Forge\webui\venv\lib\site-packages\gradio\blocks.py", line 1431, in process_api
 result = await self.call_function(
 File "F:\Forge\webui\venv\lib\site-packages\gradio\blocks.py", line 1103, in call_function
 prediction = await anyio.to_thread.run_sync(
 File "F:\Forge\webui\venv\lib\site-packages\anyio\to_thread.py", line 33, in run_sync
 return await get_asynclib().run_sync_in_worker_thread(
 File "F:\Forge\webui\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
 return await future
 File "F:\Forge\webui\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
 result = context.run(func, *args)
 File "F:\Forge\webui\venv\lib\site-packages\gradio\utils.py", line 707, in wrapper
 response = f(*args, **kwargs)
 File "F:\Forge\webui\extensions\sd-civitai-browser-plus\scripts\civitai_file_manage.py", line 1144, in load_to_browser
 model_list_return = _api.update_model_list(from_ver=True, tile_count=tile_count)
 File "F:\Forge\webui\extensions\sd-civitai-browser-plus\scripts\civitai_api.py", line 542, in update_model_list
 HTML = model_list_html(gl.json_data)
 File "F:\Forge\webui\extensions\sd-civitai-browser-plus\scripts\civitai_api.py", line 325, in model_list_html
 model_card = f' '
UnboundLocalError: local variable 'date' referenced before assignment

### Additional information

_No response_

Getting same error now

`Traceback (most recent call last):
 File "D:\StableDiffusion\venv\lib\site-packages\gradio\routes.py", line 488, in run_predict
 output = await app.get_blocks().process_api(
 File "D:\StableDiffusion\venv\lib\site-packages\gradio\blocks.py", line 1431, in process_api
 result = await self.call_function(
 File "D:\StableDiffusion\venv\lib\site-packages\gradio\blocks.py", line 1103, in call_function
 prediction = await anyio.to_thread.run_sync(
 File "D:\StableDiffusion\venv\lib\site-packages\anyio\to_thread.py", line 33, in run_sync
 return await get_asynclib().run_sync_in_worker_thread(
 File "D:\StableDiffusion\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
 return await future
 File "D:\StableDiffusion\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
 result = context.run(func, *args)
 File "D:\StableDiffusion\venv\lib\site-packages\gradio\utils.py", line 707, in wrapper
 response = f(*args, **kwargs)
 File "D:\StableDiffusion\extensions\sd-civitai-browser-plus\scripts\civitai_file_manage.py", line 1144, in load_to_browser
 model_list_return = _api.update_model_list(from_ver=True, tile_count=tile_count)
 File "D:\StableDiffusion\extensions\sd-civitai-browser-plus\scripts\civitai_api.py", line 542, in update_model_list
 HTML = model_list_html(gl.json_data)
 File "D:\StableDiffusion\extensions\sd-civitai-browser-plus\scripts\civitai_api.py", line 325, in model_list_html
 model_card = f' '
UnboundLocalError: local variable 'date' referenced before assignment`

There was a change to the api that has completely broken the extension. See here.
 URL

This should now be fixed in the new update!

Thanks for reporting, I'll mark this as resolved 👍🏻

[Bug]: totalPages key error
Just a heads up:

CivitAI has updated their API, and the extension is currently broken.
I've started working on a fix, but it might take a while since the paging system has been completely changed, which this extension relied on pretty heavily.

Not exactly, the bug report was initially for runpod issues, which were likely caused by something else.

The bug is that Civitai changed their API, and the key totalPages doesn't exist anymore.

I am aware, already working on a fix as stated in the post👍🏻

Little update:
The current code (like most of this extension) is a complete spaghetti mess and it broke a lot more than I anticipated.

After trying to patch in fixes for a few hours, it's really not going too well.
It's probably possible to patch in enough fixes for the new API but after looking at the abomination that's in front me, I've now opted to re-write most of the API handling code as continuing with the current code would create an ever bigger mess than what's already present.

This will be quite a lot of work, so it's going to take a while.
Rest assured though, I've got plenty of free time ahead so I'll try my best to get the update out ASAP!

I created an account specifically to say you fully deserve your name ~~and your bio~~

Thank you for your time <3

We had to switch to a cursor based model do to the volume of models now. Sorry for the surprise. I'll see if we can at least get those keys put back, but I don't think that alone will fix things here.

Just took a look at the codebase, looks like it's very heavily oriented around pages 😬

No worries, that's okay! makes sense that switching to a cursor-based model was necessary
I should have an update ready somewhere today that will be compatible with the new cursor system!

Only change for this extension will be that it will no longer be possible to jump directly to a specific page. which is a consequence of moving away from traditional pagination to a more scalable cursor approach.

I appreciate your efforts in maintaining and improving the API :)

Workarrond: For those who still want to download via the plugin, you can do 2 edits then the plugin works. Not as it should but you can browser civitai for urls and paste those in the search of the plugin to download.

- Go to the SD folder\webui\extensions\sd-civitai-browser-plus\scripts\civitai_api.py and open it in notepad or a different editor, (i would suggest Notepad ++.)
- line 327 says model_card = f' '
 changed is to model_card = f' '
 (removed the date, because the list wasn't giving a response to date and throwing an error of date nog begin defined)

- line 481 says total_pages = f"{json_data['metadata']['totalPages']}", changed that to total_pages = 1
 (can be more off course, but you could get empty pages)

You can just search for the text and replace it off course. Might want to make a backup of the civitai_api.py before editing

This way the plugin works for now, just 1 page of results for now

Looks like they have stopped hashing new models. Can anyone confirm?

@thebeline

As I can see on:
Lunarity XL Turbo
This brand new model has a hash.


Question: Add comment button should move focus to the new comment?

Update - I closed URL as it was not able to be reviewed and was painful to keep rebasing.

Happy to re-raise this PR again if there is capacity to review.

Add comment button should move focus to the new comment
Issues reported by @albinazs as part of WCAG 2.2 accessibility audit.

### Issue Summary

When editing pages and adding the first comment, focus doesn't move to the comment box. This works as expected when the comment panel is already opened, but not when it’s closed.

Illustration:

add comment interaction recording

### Steps to Reproduce

1. Go to any page editing form (for example URL
2. With the keyboard or mouse, active a "Add comment" button next to a field
3. Observe focus isn’t moving to the commenting box

### Working on this

This requires investigating the comment implementation in JS/React/Redux. Anyone can contribute to this. View our contributing guidelines, add a comment to the issue once you’re ready to start.

Could be a duplicate of URL

PR up with a fix from October last year. URL

Just awaiting a review.

Thank you @lb-, yes I believe it is :) I thought we had an issue opened for this but couldn’t find it for some reason.

Add comment button should move focus to the new comment when the panel is closed
### Issue Summary

If the comment panel is closed and you highlight a section of text and click the comment button the text will not be highlighted and an error is produced in the console.

vendor.js?v=673766ba:2 Error: Your focus-trap must have at least one container with at least one tabbable node in it at all times
[…]

### Steps to Reproduce

1. Open a page to edit.
2. Ensure comment panel is closed.
3. Highlight a section of text and click the comment button in the text editor.
4. The comment panel will open but the text is not highlighted as intended.

Any other relevant information. For example, why do you consider this a bug and what did you expect to happen instead?

- I have confirmed that this issue can be reproduced as described on a fresh Wagtail project: Yes

### Technical details

- Python version: 3.10
- Django version: 4.2.2
- Wagtail version: 5.0.1, have confirmed bug is also in 5.1.2
- Browser version: Chrome 117 & Firefox 102

### Working on this

This requires investigating the comment implementation in JS/React/Redux. Anyone can contribute to this. View our contributing guidelines, add a comment to the issue once you’re ready to start.

Thanks, I can confirm this is happening and it appears to be an issue with the comments / side panel (closed) generally, not just for rich text.

<img width="2001" alt="Screenshot 2023-10-10 at 5 49 28 am" src=" URL

<img width="1997" alt="Screenshot 2023-10-10 at 5 48 25 am" src=" URL

Thank you for reporting this @RichK89! This was also reported by @albinazs as part of WCAG 2.2 accessibility audit.

### Issue Summary

When editing pages and adding the first comment, focus doesn't move to the comment box. This works as expected when the comment panel is already opened, but not when it’s closed.

Illustration:

add comment interaction recording

### Steps to Reproduce

1. Go to any page editing form (for example URL
2. With the keyboard or mouse, active a "Add comment" button next to a field
3. Observe focus isn’t moving to the commenting box

### Working on this

This requires investigating the comment implementation in JS/React/Redux. Anyone can contribute to this. View our contributing guidelines, add a comment to the issue once you’re ready to start.

Just a reminder @thibaudcolas - a PR with a fix is already up. I have updated your comment about 'working on this'.

 URL


Question: Numbers don't update correctly when reordering list items?

@MediocrityXT The PR you referenced was about continuing the correct numbering, not when you delete an item. And yes, it is hard to fix it and that's why it has not yet been fixed.

Numbers don't update correctly when reordering list items
### Description

**Expected behavior:** When moving items up or down in an ordered list, the list content should move while the list numbers don't, maintaining a proper sequence.

**Buggy behavior:** When moving items up or down in an ordered list, the list numbers follow the content, breaking the proper sequence of the list.

### Reproducing

Write a list:

1- apple
2- banana
3- coconut
4- daikon

Navigate the caret to list item #2, press `Alt`+`↑` to move that item into #1 position. That yields the following output:

2- banana
1- apple
3- coconut
4- daikon

(I'm using "2-", "1-" etc. because if I use "2.", "1." etc. then github will render them sequentially rather than in my custom order, above.)

### Zettlr Version

Beta (if applicable)

### Specify version

3.0.0-beta.4

### Installation Method

From the Website or GitHub

### Your Platform

- [X] Windows
- [ ] macOS
- [ ] Linux

### Architecture

- [X] Intel 64bit
- [ ] ARM 64bit

### Operating System Version

Windows 10

### Additional Information

_No response_

I'm having a look into this issue now. Should hopefully have more details and potentially a PR up soon.

I've played around with this a bit and it isn't specific to moving lines with alt+up/alt+down, ordered lists item numbers don't update in general when altering them in some way (For example, if you have list 1 2 3 4 5 6, and you copy element 6 to clipboard then paste it above element 2, the list is now ordered 1 6 2 3 4 5) (The same behaviour as described above, but occurs in general when moving items around in existing lists).

I've opened a pull request #4406 to fix this issue. However, for now, I have only addressed the case of moving lines with alt+up/alt+down. There is another pinned issue #937 open since 2020 which addresses the issue of fixing list numbers when deleting / copy-pasting items in an ordered list. As such, I'd suggest this issue could be safely closed if the above pull request is found to be sufficient.

Ah gotcha, good catch. Guessing this requires someone else's weigh in -- I don't object to what you're describing.

As I've also written in the PR: There is this function that can automatically correct list markers for those lists that are touched by any of the selections within the editor.

Under the assumption that this function works as expected (which I'd love to have another person double check), then we could simply write a `transactionExtender` that *always* triggers if the document contents have been changed. This includes, but is not limited to, exchanging lines, adding new ones, deleting items, pasting content, and so on. This would also eliminate the current "sonderweg" we have to do with the tab character (list item indentation).

[ENHANCEMENT] Keeping numbering consistent when deleting items from a numbered list
## Description

There should be a way to keep numbering consistent when deleting items from a numbered list.
What I’m talking about is: suppose you have a list like

1. one
2. two
3. three
4. four

Then you delete point 2. You are left with

1. one
3. three
4. four

That’s not a problem if you export the content but when you e.g. copy Markdown, the inconsistency is still there. It would be better if there was some way to recalculate the numbering.

## Proposed Changes

I can think of two possible ways to solve this.

(1) When one presses enter to create a new list item, the numbering could be automatically recalculated, so instead of

1. one
3. three
4. four
5.

it would be

1. one
2. three
3. four
4.

Recalculating should also be done on indent change as it effectively creates new lists?

(2) A context menu item that would allow to recalculate numbering in the currently selected list

## Caveats

## Additional Information

Side note: GitHub supports the following:

1. a
1. b
1. c

and it'll render as

1. a
2. b
3. c

as demonstrated:
1. a
1. b
1. c

A similar approach will simplify all numbering. I don't know how this affects other systems though (but if it does, perhaps it's time for this to become a standard?).

In Zettlr, you can also do lists like such:

#. One
#. Two
#. Three

And it'll automatically number; because this is a feature of Pandoc. Oh, and we might want to support that in the list indentation as well … let's remember this!

Sure, I’m totally fine with `1. 1.` or `#. #.` syntax. On the other hand it would be convenient to quickly see what the resulting numbering would be without first exporting the content. Like some hotkey for quick non-editable preview maybe?

Of course, but there's no hotkey necessary. Just some improvements to the underlying algorithm, which is currently based on a CodeMirror plugin. We'd need to rewrite that thing. Possible, but quite some work!

I mean maybe “show quick html preview instead of editable text” is less work than rewriting the plugin, with the same effect (and maybe even better for some use cases) :)

Actually it's the opposite :D At least when it comes to sane code and my own mental health! ;D

It's not a bug, it's simply that the algorithm is not as smart as it could be ;)

I would just like to be able to set an option for the numbered list to not at all increment the numbers, but just put 1., 1., 1.
This would solve all problems from above. It is also the standard accepted by GitLab.
It is also better for when you view diffs in version control.

@braykov Mh, in the Pandoc-context the equivalent would be `#.`. I'm not sure if the editor accepts this syntax, though …

@nathanlesage unfortunately that is not standard and not supported by GitLab.

Need this EHANCEMENT!!! The long numbering list makes me really annoyed when lots of numbering need rewriting.
recent numbering fixing dates back to 2018...
After you press enter and generate a new list item, rewrite all items' numbering after the new item.I guess it's not that hard but don't know why nobody fix it

May I also add to the question that whenever I try to do something like
1. first point
2. second point
3. third point

and then have sub-points under it like
1. first point
 * sub
3. second point

it will leave the list as 1., 3. and skipping 2 - that is really a bummer as it makes numbered lists unusable for me.


Question: remove political capital from the game?

implemented in:
- eccf122960cbb15ef3c68fbe0670b261a5d8ba61
- 09e5f28222c91772c1776f6c45b4d1faabf2a5bb
- b3b5fa039f57194bb1d550fa1844a28242ab668c
- other surrounding commits

remove political capital from the game
the system where you unlock scenarios and upgrade units is now out of scope

what can be fun instead is a simple high score system. we can display it to the player on the score tally modal

(the reason i suggest anything in its stead is because _earning_ political capital is already implemented. players just can't buy anything with it)

worked on this in 851e956 and a20ce5c

need to restore DefeatScoreTallyModal buttons

oops, actually, political capital is no longer mentioned on the scoretallymodal, but it's still in the save data.

i need to replace political capital with high scores

actually no i don't. all i still need to do for this ticket is search the codebase for mentions of political capital and gut what needs to be gutted.

a high score system is a separate feature which i have notated in #56 (though i dont think it will be prioritized)

i should do #57 first so i dont brick my ability to test on ios (ios doesnt give me a way to clear an app's save data, tho i could just uninstall the whole thing)

settings menu
- [x] music volume slider
- [x] sound effect volume slider
- [ ] ~~disable cutscenes button~~
- [x] erase save data button
 - [x] erase save data confirmation modal


Question: Unclear TensorRT version match?

I would recommend using trtexec over onnx2trt as the CLI interface for converting ONNX models into TensorRT engines since it is more actively maintained.

onnx2trt hasn't been updated in a while, and we are planning to deprecate it in favor of trtexec soon.

Unclear TensorRT version match
**Description**
I use the docker containers to export an ONNX model to TenosrRT to use with the triton server. Each release of URL always expects a specific version of TensorRT, but this version does not exactly match the version of the Triton server. So it is unclear to me which release of onnx-tensorrt I should match with which release of triton-infernce-server?

You can use our `trtexec` from Nvidia's TensorRT container release to convert onnx to trt model. The generated model would be compatible with corresponding release of Triton. For instance, model generated with 22.01 TRT container will work with 22.01 Triton container.
 URL

You can find more about the difference here: URL
Closing the issue now. Please re-open if you have any other questions.

[Question] onnx2trt vs trtexec --onnx
Hi, what's the difference between `onnx2trt` and `trtexec --onnx`? Are they the same thing? If not, is one preferred over the other? Also if different, and if I need to add a onnx parser plugin for a custom layer, should I use one over the other?

Also, I don't see an engine.serialize() option for `onnx_tensorrt.tensorrt_engine.Engine`, compared to `tensorrt.ICudaEngine`. Is there a major difference between Engine and ICudaEngine, and is there a way to save Engine to trt file?

Does anyone have info on this? Especially the second question for me personally

Can you please tell me how to add multiple optimisation profiles using trtexec. I can't seem to find any example anywhere. I know it is possible to do using Python and C++ API but I've no idea about trtexec.

Thanks

@kevinch-nv Thank you but I meant Optimisation Profiles where I can set multiple min, opt and max sizes for different optimisation profiles.

Eg. like this: URL
but only using trtexec. Using trtexec, I can set maximum only 1 profile (min, opt & max) but with Python API you can add multiple such profiles


Question: Editing with Synchronised Clips Causes Random Glitches During Playback?

@tangierc - You'll find this interesting...

Apple has gotten back to us after reviewing this, and believe it or not, it's actually got nothing to do with BRAW Toolbox itself, it's because we're applying it to a static generator! If you add keyframes to the generator or if you replace the generator with something like "Clouds" it'll fix the issue!

We'll investigate a proper fix in BRAW Toolbox soon, and try and find a solution for fixing existing libraries - which should be easy, as we can just replace the static generator with Clouds, etc.

Editing with Synchronised Clips Causes Random Glitches During Playback
Hi there,
I am doing my first project with BrawTool in FCPX and i have a huge problem. When i trim a clip on the timeline the trimviewer don't move and it doesn't trim either. Strangely enough it trims when i do it at the end of the clip. See screenVid of the problem.
I hope this is some weird glitch which can be solve soon or i have to revert back to resolve to edit. Please help.
I restarted fcpx several times and also my mac studio. No solution.

 URL

Can you please try creating Multicam Clips from BRAW Toolbox instead and see if the problem remains?

 URL

Hi thanks for answering. Multicam clips seems to work, but i already imported 7 days of shooting and meta tagged all shots. Costed me a day's work. Can i convert existing clips to multicam or is there a way to duplicate all metadata to the clips if i have to import again?

Could you send me the Final Cut Pro library and I'll have a look?

You can upload here:

 URL

I'll also report this issue to Apple. Are you on the latest Ventura by any chance?

One potential workaround is to "Open Clip" on each Synchronised Clip and try either move it above the primary storyline or make it a Compound Clip.

I am on Ventura 13.1 Should i update to 13.3.1 and try again?

No, I don't think updating to Ventura 13.3.1 will have any impact on this particular problem, and if you have a lot of Audio Units, 13.3.1 could cause issues with validating audio plugins.

Thanks for sending across your library. Are you able to `.ZIP` it up first, then send it across again? I think because it uploaded the library as if it was a folder, some of the file names went a bit funky. Just right click on the library and press the "Compress" option in Finder to make it a `.ZIP` file.

As far as I can tell, it seems to be a bug/problem with Final Cut Pro itself, rather than anything specifically wrong with how BRAW Toolbox works. Synchronised Clips don't seem to update/work properly when they only have a Generator inside. The only way to force Final Cut Pro to update them correctly seems to be to wrap them either in a Compound Clip or a Multicam Clip.

I will do some investigating to see if we can add something to the Workflow Extension to wrap any BRAW Toolbox Synchronised Clips inside a Multicam or Compound Clip. I'll also investigate just making **Create Multicam Clips** the default option. I'll also keep chatting with the Final Cut Pro team to see if they can provide any insight on their end.

My sincerest apologies - I know this is extremely frustrating when you've already logged 7 days of shooting!

Hi @latenitefilms any progress on this issue?

I'm experiencing the exact issue mentioned in this ticket. We imported 35 days of footage without using create Multicam Clips. Bit hard to go back and do that work again. Any help would be greatly appreciated!

M.

Have you already started editing in a project/timeline, or are you just key-wording/favouriting in the browser at this stage?

The only manual fix I know currently is to open up each Synchronised Clip, and turn the Generator into a Compound Clip. If you head down this route, obviously try it on one clip first to make sure it works before you do to lots of clips.

This is a tricky one, as I haven't been able to reproduce the issue myself. I'm on macOS Monterey 12.6.3 & FCPX 10.6.5. If you're able to create a small library that demonstrates this issue that you can send, that would be a big help.

I'm still looking into a workaround, where you can convert Synchronised Clips into Multicam Clips, but it's somewhat complex - hence why there's no quick/easy fix.

Thanks for the info, at the moment the issue happens randomly so were not sure how bad those fixes will stack up. We're Melbourne based and you're more than welcome to remote into our editing machine to take a look if that helps everyone else too.

Are you able to send me your Final Cut Pro library? You can upload here:

 URL

Tengo problemas al editar, al cortar el clip, del lugar donde corto pone el inicio del clip!! que estoy haciendo mal?

 URL

@Sanvid779 writes:

Can you please try using Multicam Clips instead?

See: URL

lo intentare, la pregunta seria estos clips están grabados con audio de cámara de referencia, y con sonido directo, al hacer la multicámara como sincronizo el audio directo?

@Sanvid779 writes:

If you're just using the audio on the BRAW files as a guide track, but have timecode synced your camera and an external sound recorder, I would leave the "Create Multicam Clips" off, and then use Sync-N-Link to create new Multicam Clips from the Synchronised Clips and location audio:

 URL

You should also be able to do it manually in Final Cut Pro if you're manually syncing with a dumb slate, etc.

Basically, Synchronised Clips currently seem broken for some users in Final Cut Pro - but as soon as you "wrap" them in a Multicam Clip, everything works correctly again.

I'm going to close this issue in favour of #128, however feel free to keep replying here if necessary.

Editing with Synchronised Clips Causes Random Glitches During Playback
**Apple Feedback Assistant ID:** FB12179665

As discussed in #115, #116 and elsewhere, there's a bug in Final Cut Pro 10.6.5 that causes Synchronised Clips to **sometimes** play back the wrong frames during playback. This also affects rendering and exporting. It's very frustrating for everyone.

It doesn't seem to affect skimming, and the correct frames play correctly when using the arrow keys to go frame-by-frame (i.e. if you hold down the right arrow key, it will play back the correct footage).

The workaround is to always use the **Create Multicam Clips** option in BRAW Toolbox. By wrapping a Synchronised Clip in a Multicam, it seems to fix the issue.

Alternatively, if you **Open Clip** on a BRAW Toolbox Synchronised Clip, and then wrap the Generator on the primary storyline within a Compound Clip, this also seems to fix the issue.

However, if you need to sync your BRAW Toolbox Clips with location audio, you can still create Synchronised Clips, then use something like Sync-N-Link or manual Multicam syncing within Final Cut Pro to create new Multicam Clips. Editing with Multicam Clips doesn't seem to have any issues.

I have reached out to the Apple Final Cut Pro team to try and come up with a solution/solve/workaround/bug-fix update.

Unfortunately, at this stage, it seem to be a bug in Final Cut Pro, and not something we can solve in BRAW Toolbox's FxPlug4 code.

I will update this issue if we learn more from Apple, or if we come up with a solution ourselves.

I will be pushing out an update ASAP which turns on **Create Multicam Clips** by default, and will display a warning message if you disable it.

BRAW Toolbox v1.1.1 is now on the Mac App Store with the following changes:

<img width="1415" alt="image" src=" URL


Question: bug(@vtmn/react) `VtmnDropdown` component always display label although it is not configured?

Thanks @jdeca-decat for this issue.
As the `@vtmn/react` is a community library, I hope someone will take this issue to help you.
If you want, feel free to contribute also! We are there to help you if needed regarding launching & contributing on the vitamin-web stack.

bug(@vtmn/react) `VtmnDropdown` component always display label although it is not configured
**Describe the bug**
In the React Showcase of the VtmnDropdown component, it say that if the label is not set, it will not disayed but it's still here

**Steps to reproduce**
- install React
- install Vtmn package for React

**Expected behavior**
Normally, if the label is not set, it does not appear

**Version affected**
@react: 18.2.0
@vtmn/react: 0.67.0

Screenshot from 2023-03-24 11-30-26
Screenshot from 2023-03-24 11-30-08

While waiting for the bug to be fixed, I added a style rule:
`.vtmn-dropdown label {
 display: none;
}`

Hi @jdeca-decat,

Following our last discussion from #1401 I'm glad you've been able to solve your issue.

I've just opened a P.R in order to solve this issue so that we won't have to use a CSS workaround anymore :)

Thanks @0x2A-git I'll take a look !
But.. I stopped using the VtmnDropdown, because I had another problem: there is no documentation and no option to configure the dropdown in single selection mode. I want to disable multiselect default option but there is no way apparently :(

Did you take a look at the `Select` component ? It might suit your use case :) ( URL ) :)

Great idea :) Accessibility + web standards + usage > aesthetic

bug(@vtmn/react): `VtmnDropdownItem` component doesn't display any content
**Describe the bug**
When I add items to VtmnDropdown like in the React showcase, nothing appear..
Screenshot from 2023-03-24 12-44-41
Screenshot from 2023-03-24 12-43-50

**Steps to reproduce**
- Install React
- install Vtmn package for React
- add VtmnDropdownItem component to your VtmnDropdown as children

**Expected behavior**
VtmnDropdownItem should be able to display their content, like in MUI Item Select

**Version affected**
@react: 18.2.0
@vtmn/react: 0.67.0

Hi @jdeca-decat,

I've tried to reproduce your setup in a CRA project and tested it on both Firefox & Chrome but I'm not able to reproduce it.

Code :

jsx
 {
 console.log(value)
 }}

 10

 20

 30

Result :

image

The only 'issue' that I've encountered is the 'value' parameter being set to undefined which is the expected behavior given that my VtmnDropdownItem do not have a value attribute.

Could the VtmnDropdown component be wrapped inside another component that would prevent its children from being displayed ? :thinking:

Hi @jdeca-decat,

I've tried to reproduce your setup in a CRA project and tested it on both Firefox & Chrome but I'm not able to reproduce it.

Code :

 {
 console.log(value)
 }}

 10

 20

 30

Result :

image

The only 'issue' that I've encountered is the 'value' parameter being set to undefined which is the expected behavior given that my VtmnDropdownItem do not have a value attribute.

Could the VtmnDropdown component be wrapped inside another component that would prevent its children from being displayed ? thinking


Question: Issue: nmap plugin misses HTTP services?

Hi @fmunozs,

Sorry I realized that I did not answer. This is intentional, when performing tests internally we found that this is the best trade-off for us.

_~tooryx_

Issue: nmap plugin misses HTTP services
## Issue description
A large part of existing Tsunami plugins identifies vulnerabilities in HTTP based web services. Thus, it is important that these services are identified correctly. Turns out the nmap plugin (or more precise nmap itself) is really bad at this.

For example, I'm currently developing a plugin for a vulnerability in MinIO. MinIO runs a HTTP based API, usually on TCP port 9000. Here the output from nmap (version 7.93), using the same parameters as the nmap plugin:

nmap --unprivileged -Pn -n -sT -sV --version-intensity 5 -T4 --script banner 172.21.0.4 -p 9000
Starting Nmap 7.93 ( URL ) at 2023-04-06 08:46 CEST
Nmap scan report for 172.21.0.4
Host is up (0.00029s latency).

PORT STATE SERVICE VERSION
9000/tcp open cslistener?
| fingerprint-strings:
| GenericLines, Help, Kerberos, RTSPRequest, SIPOptions, SSLSessionReq, TLSSessionReq:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest:
| HTTP/1.0 400 Bad Request
| Accept-Ranges: bytes
| Content-Length: 232
| Content-Type: application/xml
| Server: MinIO
| Vary: Origin
| Date: Thu, 06 Apr 2023 06:46:32 GMT
|
| InvalidRequest Invalid Request (invalid argument) / ed2576f8-f43d-4c0d-8bf5-60fd0bf780cc
| HTTPOptions:
| HTTP/1.0 200 OK
| Vary: Origin
| Date: Thu, 06 Apr 2023 06:46:32 GMT
|_ Content-Length: 0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at URL :
SF-Port9000-TCP:V=7.93%I=5%D=4/6%Time=642E6AC8%P=x86_64-unknown-linux-gnu%
SF:r(GenericLines,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\
SF:x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20B
SF:ad\x20Request")%r(GetRequest,190,"HTTP/1\.0\x20400\x20Bad\x20Request\r\
SF:nAccept-Ranges:\x20bytes\r\nContent-Length:\x20232\r\nContent-Type:\x20
SF:application/xml\r\nServer:\x20MinIO\r\nVary:\x20Origin\r\nDate:\x20Thu,
SF:\x2006\x20Apr\x202023\x2006:46:32\x20GMT\r\n\r\n \n InvalidRequest Invalid\x20Request\x20\(invalid\x20argument\) / ed2576f8-f43d-4c0d-8bf5-60fd0bf7
SF:80cc ")%r(HTTPOptions,59,"HTTP/1\.0\x20200\x20OK\r\nVar
SF:y:\x20Origin\r\nDate:\x20Thu,\x2006\x20Apr\x202023\x2006:46:32\x20GMT\r
SF:\nContent-Length:\x200\r\n\r\n")%r(RTSPRequest,67,"HTTP/1\.1\x20400\x20
SF:Bad\x20Request\r\nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConn
SF:ection:\x20close\r\n\r\n400\x20Bad\x20Request")%r(Help,67,"HTTP/1\.1\x2
SF:0400\x20Bad\x20Request\r\nContent-Type:\x20text/plain;\x20charset=utf-8
SF:\r\nConnection:\x20close\r\n\r\n400\x20Bad\x20Request")%r(SSLSessionReq
SF:,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x20text/plain;
SF:\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\x20Request"
SF:)%r(TLSSessionReq,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Typ
SF:e:\x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x
SF:20Bad\x20Request")%r(Kerberos,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\
SF:nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\
SF:r\n\r\n400\x20Bad\x20Request")%r(SIPOptions,67,"HTTP/1\.1\x20400\x20Bad
SF:\x20Request\r\nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConnect
SF:ion:\x20close\r\n\r\n400\x20Bad\x20Request");

Service detection performed. Please report any incorrect results at URL .
Nmap done: 1 IP address (1 host up) scanned in 36.58 seconds

When the nmap scanner plugin parses the XML output, the extractServiceFromNmapRun method is invoked. To identify web services, it calls Tsunamies NetworkServiceUtils.isWebService which simply checks the service name against a list of known "nmap patterns":

java
 private static final ImmutableMap IS_PLAIN_HTTP_BY_KNOWN_WEB_SERVICE_NAME =
 ImmutableMap. builder()
 .put("http", true)
 .put("http-alt", true) // Some http server are identified as this rather than "http".
 .put("http-proxy", true)
 .put("https", false)
 .put("radan-http", true) // Port 8088, Hadoop Yarn web UI identified as this.
 .put("ssl/http", false)
 .put("ssl/https", false)
 .put("ssl/http-proxy", false)
 .build();

This requires that nmap identifies the HTTP service correctly. However, the basic fingerprinting of nmap is less "advanced" as most people assume. To my knowledge the fingerprinting does not allow "dynamic values" (for example the hostname/IP address) in the request. This would be required to send a HTTP 1.1 request. Nmap is therefore only uses a simple "HTTP 1.0" request that does not require a "Host:" header field.

This works fine if the HTTP service still fully supports HTTP 1.0 but for many modern web service implementations, this is no longer the case. The MinIO server for example returns with a HTTP 400 error, which does not match with the service fingerprints from nmap:

GET / HTTP/1.0

HTTP/1.0 400 Bad Request
Accept-Ranges: bytes
Content-Length: 232
Content-Type: application/xml
Server: MinIO
Vary: Origin
Date: Thu, 06 Apr 2023 07:06:03 GMT

 InvalidRequest Invalid Request (invalid argument) / ed2576f8-f43d-4c0d-8bf5-60fd0bf780cc

As a result, the service is not identified as a web service and is not scanned by plugins that should actually be executed.

## Suggested solution/improvement

I think the best solution would to improve the code in the `extractServiceFromNmapRun`. The code should take the additional scan data from the NMAP output into account and use that to perform additional HTTP / service fingerprinting by analyzing the "GetRequest" output that is also included in the scan:

| GetRequest:
| HTTP/1.0 400 Bad Request
| Accept-Ranges: bytes
| Content-Length: 232
| Content-Type: application/xml
| Server: MinIO
| Vary: Origin
| Date: Thu, 06 Apr 2023 06:46:32 GM

I can implement this, but I thought I might discuss this first.

@h0ng10 can you try running the scan with intensity 7 (nmap default)? I reported a similar problem at #298 in my case nmap is able to detect the HTTP with intensity 7, after that the service can be scanned.

@h0ng10 Thanks for reporting this behaviour. I'm aware in certain cases nmap defaults to /etc/services for open ports, but never really investigated thoroughly. What you suggested makes sense, please go ahead with the proposed solution.

@maoning I didn't use this in the MinIO plugin, it was just an example I had on hand.
I think it would be worth trying to at least parse the HTTP headers, as this could also possibly identify the service used (as nmap does).

I will first do some nmap scans on various HTTP services (I already have a few candidates in mind that cause problems) and then see what works best.

Hi,

This has been fixed in 7cf51a42 and 55aa6978

_~tooryx_

portscan nmap plugin withVersionDetectionIntensity sets to 5
The current nmap plugin for portscan sets the version detection intensity to 5 [0] , this differs from the default Nmap scan that sets the value to 7 [1] and will identify additional services.

I believe that the value should be changed to the default Nmap setting or at least be configurable from a cli-option.

 NmapRun result =
 setPortTargets(nmapClient)
 .withDnsResolution(DnsResolution.NEVER)
 .treatAllHostsAsOnline()
 .withScanTechnique(ScanTechnique.CONNECT)
 .asUnprivileged()
 .withServiceAndVersionDetection()
 .withVersionDetectionIntensity(5)

[0] URL
[1] URL


Question: vsyscall=emulate not working anymore ?

We're planning to fix this issue in the next kernel release. In the meantime, you can build a custom kernel with the config enabled as a workaround.

vsyscall=emulate not working anymore ?
WslLogs-2025-06-02_17-40-38.zip

### Windows Version

10.0.19045.5854

### WSL Version

2.5.7.0

### Are you using WSL 1 or WSL 2?

- [x] WSL 2
- [ ] WSL 1

### Kernel Version

6.6.87.1-1

### Distro Version

Ubuntu 22.04LTS

### Other Software

Since some days / weeks (cannot say it precisely), a binary program that used to work thanks to the vsyscall emulation, fails now with a segmentation fault. i have tried all possible values for vsyscall, with no success.
Has anything changed in WSL kernel lately that breaks backward compatibility ?

Here is the gdb backtrace:
`
Program received signal SIGSEGV, Segmentation fault.
0xffffffffff600000 in ?? ()
(gdb) bt full
#0 0xffffffffff600000 in ?? ()
No symbol table info available.
#1 0x00000000004daa2d in gettimeofday () at ../sysdeps/unix/sysv/linux/x86_64/gettimeofday.S:37
No locals.
#2 0x000000000043f4ab in for_since_epoch_t ()
No symbol table info available.
#3 0x000000000041e0ff in for_rtl_init_ ()
No symbol table info available.
#4 0x0000000000400359 in main ()
No symbol table info available.
#5 0x00000000004c1e94 in __libc_start_main (main=0x400330 , argc=1, ubp_av=0x7fffffffd788, init=0x4c2380 , fini=0x4c2340 , rtld_fini=0x0, stack_end=0x7fffffffd778)
 at libc-start.c:226
 self =
 result =
 ubp_ev =
 auxvec =
 stack_chk_guard =
 unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, 0, 0, 4989760, 4989824, 0, -1386217472, 653851885568}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0,
 canceltype = 0}}}
 not_first_call =
#6 0x0000000000400239 in _start () at ../sysdeps/x86_64/elf/start.S:113
No locals.
`

### Repro Steps

Run an old binary on an Ubuntu 22.04 running on the latest wsl2. fails with a Segmentation Fault

### Expected Behavior

The program shall run normally. (as it used to)

### Actual Behavior

The program ends with a Segmentation fault issue

### Diagnostic Logs

_No response_

The easiest way for me to reproduce this was to try and run Ubuntu 4.10 in WSL2, which requires `kernelCommandLine="vsyscall=emulate"`.

This isn't just running an old binary that requires vsyscall emulate, but an _entire distro_. I don't do this often, but I do know it worked for a long time, at least as late as 18 months ago on the 5.x WSL kernel series.

I can confirm it no longer works.

Image

WSL version: 2.5.7.0
Kernel version: 6.6.87.1-1

WslLogs-2025-06-02_13-06-40.zip

The easiest way I have to reproduce this is to run Ubuntu 4.10, _an entire distro_ that requires `vsyscall=emulate`, in WSL2.

It's been a while since I've used this, but it worked as late as 18 months ago on the 5.x kernel series.

I installed an Ubuntu 4.10 rootfs rootfs and tried to launch it. It will not run:

Image

WSL version: 2.5.7.0
Kernel version: 6.6.87.1-1

WslLogs-2025-06-02_13-40-47.zip

`CONFIG_X86_VSYSCALL_EMULATION` has been disabled in 6.6.y series kernel config.

This is a change from 6.1.y, 5.15.y before that, going back to 4.19.y.

This appears to be a regression of #4694 unless there is an overriding reason to deprecate support in 6.6.y+.

`CONFIG_X86_VSYSCALL_EMULATION` was disabled in the same commit 4d72cb5bb5d14e520500e84316a5b7e0f9e572cf that raised #12987 and #12983

I think it actually caused by synchronizing the configurations from Azure Linux. (Maybe Azure Linux did that for security or something.)
 URL

Kenji Mouri

@sirredbeard I‘m hugely agree with you about that. I mentioned that git commit id just for making people to know when the modifications were actually introduced. Also, I'm curious about why disabling vsyscall=emulate will improve the security because Azure Linux guys don't make more explanations for that in their commits. (I think I should ask for LLM models first.)

Kenji Mouri

@Samfaitmal you can download versions of WSL with the old kernel from here)

@moikot From what I have tested (and I have not tested all the versions) 2.4.13 is working.

WSL kernel 6.6 disables `CONFIG_MODIFY_LDT_SYSCALL`
### Windows Version

Microsoft Windows [Version 10.0.26100.4061]

### WSL Version

2.5.7.0

### Are you using WSL 1 or WSL 2?

- [x] WSL 2
- [ ] WSL 1

### Kernel Version

6.6.87.1-1

### Distro Version

Ubuntu 24.04

### Other Software

wibo, version 0.6.16

### Repro Steps

- Update to WSL 2.5.7.0
- Run wibo

### Expected Behavior

- wibo should run wrapped executable

### Actual Behavior

- wibo exits with error

This was working previously with kernel 5.5, and also works when custom compiling 6.x kernel with `CONFIG_MODIFY_LDT_SYSCALL` re-enabled (was disabled in this commit)

With that said, this is a breaking change between kernel versions that was unexpected and not trivial to diagnose. Additionally resolving it requires custom compiling either a 5.x kernel which works by default, or a 6.x kernel with this flag enabled (since MS does not appear to have pre-built kernel bzImages available for older versions as far as I could tell)

### Diagnostic Logs

WslLogs-2025-05-28_20-38-42.zip

@chessturo - looks like CONFIG_MODIFY_LDT_SYSCALL was dropped from the 6.6 kernel.

FWIW, this also impacts URL

$ zgrep MODIFY_LDT /proc/config.gz
# CONFIG_MODIFY_LDT_SYSCALL is not set

$ ...retrowin32 run
thread 'main' panicked at win32/src/ldt.rs:68:17:
syscall(SYS_modify_ldt): Function not implemented (os error 38)


Question: [Lab messages] Using the 'Person search' option when creating new entities, via processing lab messages, creates a new person?

@bernardsilenou Almost. I think what you need to realize is that using the search function is totally different than triggering duplicate detection. The search will merely serve as a selection option of existing persons. Selecting a person will basically fill the person_id in the case table with an existing reference and therefore, duplicate detection would not be triggered, yes.

Think of converting contacts or ep's to cases, the person link is already there. It will work the same way when selecting existing persons.

[Lab messages] Using the 'Person search' option when creating new entities, via processing lab messages, creates a new person
### Bug Description

When processing lab messages to create new entities (cases and contacts), if the user uses the 'Person Search' option, the newly created entity is not associated with the selected person, but instead a new person gets created.

### Steps to Reproduce

1. Create a person by creating a new entity (i.e. 'person1');
2. Navigate to 'Lab messages' in the 'Samples' directory and click 'Process' on an unprocessed lab message;
3. In the first pop-up for 'Pick or create person' select 'Create new person' and click 'Confirm';
4. In the second pop-up for 'Pick or create entry' select 'Create new case' or 'Create new contact';
5. In the 'Create new case/contact' form, for the person related fields, use the 'Person search' option to select the person created at step1 ('person1');
6. Save the new entity (case or contact);
7. Navigate to the 'Persons' directory and observe the entities.

### Actual Behavior

There are 2 persons with the details of 'person1', but one of them is associated with the entity created at step1 and one of them is associated with the entity created at step6.

### Expected Behavior

There is 1 person with the details of 'person1' and it has 2 entities associated: the entity created at step1 and the entity created at step6.

### Screenshots

image

image

### System Details

* Device: Windows 10
* SORMAS version: 1.69.0-SNAPSHOT
* Android version/Browser: Chrome
* Server URL: test-de2.sormas.netzlink.com
* User Role: Admin, NatUser

### Additional Information

Note 1: When processing a lab message and choosing to create a new event participant, the behavior described in the ticket does not reproduce.

Note 2: This issue might be related to ticket #8012

I am not sure whether the expected behaviour described above is the only reasonable option here.
When being in the entry (case/contact/event participant) creation form during processing a lab message, the user has already gone through a person selection.
An alternative expected behaviour could be that the person search button does not show in those forms when processing a lab message.
image

@adinaflorea9 @FredrikSchaeferVitagroup I think the problem here is that firstly, the person that was selected in the person search pop-up is not actually linked and secondly, the existing case is for the selected person is not detected as a duplicate.

The person search in lab message processing is actually quite crucial because often enough the duplicate detection is not reliable enough to detect actual duplicates and users are then forced to create them to get the lab message data elsewhere in the system. If not at least one person is suggested as a duplicate, they're also not able to search for a different person without this option.

When a person is selected in the search person pop-up, there is no duplicate detection trigger needed because a person has been selected that already exists. However, it needs to be linked instead of created again. For the subsequent entity, e.g. case, this person might also already have a duplicate which was not previously suggested because the person wasn't detected. At this point this should get triggered again for a selected person.

@kwa20 So this is the workflow you describe:

1. Start processing a lab message
2. Create a person (because the correct existing person is not proposed)
3. Select one of the entry creation forms (e.g. case creation form)
4. Select another person there
5. (continue)

I don't like it, for two reasons.
First, the newly created person is saved after step 2. When 4. is done, it needs to be removed, which is cumbersome.
Second, it's quite an effort for the user to get the correct person selected.

How about
- [ ] hide the search person button in the entry creation forms when processing a lab message
- [ ] show it in the Select or Create Person dialog when processing a lab message instead

@FredrikSchaeferVitagroup I think I like that general idea and it would support that users usually work from a person oriented perspective.

This pop-up is only triggered when a duplicate is suggested and it already gives you the option to search for a different person. The main problem here is that this pop-up is not shown all the time, even if duplicates might exist the detection might not find and suggest it.

Maybe we need to initialize that pop-up all the time and force users to chose if they want to search for an existing person, select a found duplicate or create a new one.

@kwa20 Good point. So how about this?
- [ ] hide the search person button in the entry (case/contact/EP) creation forms when processing a lab message.
- [ ] show it in the Pick or create person dialog when processing a lab message instead (as 1 below).
- [ ] always show the Pick or create Person dialog, no matter whether a possible duplicate was automatically detected or not.
- [ ] change the behaviour of the list of proposed person (2 below). Fill it with possible matches automatically (like it is now). When the list is empty, hide it. Instead show a label stating: `No possible match could automatically be determined. You can manually search for existing persons.` Whatever person gets select by the manual search, add it to the list of proposed persons and select it (so that users can directly click on the `CONFIRM` button).
- [ ] change the caption of the option from `Select a matching person` to `Select an existing person`.

image

@FredrikSchaeferVitagroup Sounds like a good plan!

Just some minor comments:

Might be nice to have it as a little info icon plus text

The current caption is fine I think and would then be consistent with the other pop-ups

Looking at the list of comments trying to specify this, I am pretty certain that this is not a bug, but a change request. I will change the ticket labels accordingly. This also means that it will not necessarily be done in this sprint.

Quickly resolving the problem described in the summary (e.g. by hiding the search person button) could be a bugfix.

@FredrikSchaeferVitagroup @adinaflorea9 I think what we need to fix here at least is the correct linking of the selected person. Otherwise, the implementation of URL will be discarded for lab messages and that would be very unfortunate.

I think we can agree that the process is not ideal as descried in URL Therefore, I suggest to fix the person link with the bugfix so the implemented feature can be used and create a change request to implement what is described here URL

Really fixing this is not so easy. As I wrote before, the duplicate person gets created and saved before the user selects another one.

As @kwa20 pointed out, it is necessary that the pick or create person dialog always shows when processing lab messages then, not only when there are possible matches. This should also be be implemented in this ticket.

Add a person search option on creation forms [3]
### Situation Description

Currently, users cannot search for existing persons in the system and simply add another entity (e.g. case) to them. They are forced to go through duplicate detection in order to do so.This is not very user friendly or efficient when users have to handle many entities at once or quickly search for existing persons during the creation process.
### Feature Description

- Add a search button next to the person name in any creation form (cases, contacts, event participants, travel entries, immunizations; also when processing lab messages)
- Upon clicking the button, open a pop-up to search existing persons in the system (cf. screenshot2)
 - When confirming the existing person, link the entity to be created to the existing person when saving.
 - Visually, grey out person related fields and show the persons details that has just been selected (cf. screenshot3)
- When a person has been selected in the creation form, there needs to be the option to remove the person if the linkage or selection was not desired for whatever reason.
- Only show persons that the user has unpseudonymized access to based on the user filter
- Person duplicate detection can be skipped when a person has been selected, but case/contact/event participant duplicate detection still needs to be triggered
### Possible Alternatives

### Additional Information

<img width="571" alt="SearchPerson" src=" URL
<img width="559" alt="SearchPerson3" src=" URL
<img width="577" alt="SearchPerson2" src=" URL

@kwa20 Question please:
- By adding this search on the creation form, does it mean automatic duplicate person detection should be turned off? because this specification is exactly what duplicate detection does in an automatic way, or I did not understand it well?
- Currently we can search a person on person directory. In your initial specification of the person directory/ from, the next phase was to extend this form to be able to add entities to the person. Is your initial idea no longer valid?
- I would vote for the option to add entities through the person form.

@bernardsilenou no the duplicate detection should not turned off as they user might not know that person was in the system before. But if the user knows it, he/she must not enter all details which are required to save and start the duplicate detection.

I would vote to have both ways (person form and this option) to be more flexible for the user.

@bernardsilenou @Marko-ilmkreis I also think we should have both options because the creation option in person forms will e.g. not solve the problem of persons not being properly detected when processing lab messages. I also see advantages in flexibility of workflows.

I strongly support this feature request.

Being forced to re-enter a person's data and trust the system to find a "duplicate" even though you know exactly that the person is already in the system is not a very effective way and has a much higher potential for errors.

@All: I think there are some point that I still do not get it. I do not understand the main difference between user trigger (this issue) and automatic trigger person detection.
1. While creating a case, search a person and if person is
 1.1 found, should duplicate person detection be called? ( If yes, then this is double, right?)
 1.2 not found, should duplicate person detection be called? (If yes, then duplicate detection should also not find any person since the back-end methods should be the same )
2. While creating a case, and do not search for duplicate person , should duplicate person detection be called? (If yes, then what does manual trigger add in the workflow?)
3. Another point is the multiplicity of functions on each form. In most systems like sormas, then general rule is that users begin by searching a person on the person directory, if they find the person, add new entities to them, it not, create a new person and add entities to them.
4. Having two ways of doing the same thing in the system also comes with a cost (probability of having more bugs + maintenance). If this is a better way, then we can we drop the other option of going through the person form?

@Jan-Boehme
Please can you elaborate on this URL
If there any possibility to detect duplicate person without entering some of the person variables (, name, sex , ...) ?

- Another advantage to encourage user to first search through the person directory is that they can use more variables of the person (birth date, address, name, sex, ...) rather than just name, thus more sensitive.
- I have a feeling that the current duplicate person detection is not working as intended. Because this issue is describing how it should work, no matter if user search person or not. Maybe I am just missing something.
-

Sure.
At the moment there is no other way to get the system to find a potential duplicate person without at least entering first name, last name, birthdate and sex. And even if you enter all them there is still the possibility of the system not finding any duplicate (i.e. a typo in the birthdate). But when you realize that you made an error it is too late and there's no way to revert any of it.

General comment:
I agree with @bernardsilenou that, from an end user's perspective, everything should revolve around the person and it should be the first entry point for doing anything in SORMAS.
The question is how realistic is it to change that now?
Implementing this issue would help somewhat with that because you would be able to search the person directory and pick the correct one before committing to save date.

I think the confusion stems from the fact that searching the person directory and freely picking one is tied to the duplicate detection window at the moment when they really are two different things.

When clicking on the "looking glass" button the user is not forcefully triggering the duplicate detection code but just opening the window where he can search and pick any person from the person directory.
If the users does so, there is of course no need to do the automatic detection upon saving. That would mess with the whole point of the feature.

@Jan-Boehme
Thanks for the explanation URL
- `I think the confusion stems from the fact that searching the person directory and freely picking one is tied to the duplicate detection window at the moment when they really are two completely different things.` I think what you meant here is that the person directory filter case person by default, right? I think the default should be "All person", the current implementation can mislead users . Centralized systems like in France has many persons and this tab takes much time to load. I think this should not be a valid reason to limit the person directory only to cases by default. There should be a technical solution for this I suppose.
- @MateStrysewske what about creating a copy of the person table with only the columns used by filters: name, address, tel, age, dob, etc such that when we search for a person on the person directory, we do not do any merging of tables but use this one table only, this just a rough idea.
- If you have a difficult and easy task to do, always do the difficult one first (leads to higher increment), Suggest we work on #6053 and then work on this one later.

@bernardsilenou @MateStrysewske @Jan-Boehme In my opinion these are complete different ways to find the right person an open a case/contact/ep for them. The duplicate detection should be only used for the cases the user does not know that there is a duplicate.
The "looking glass" is importent for users which are creating a lot of contacts/cases/ep and dont want to switch between them and the person tab. They just want to work. With these function to search we must make sure that the user sees all persons (even in other jurisdictions), like in duplicate detection.
The #6053 should be also enabled because thats also a very usable way to create the c/c/ep.

I second what @Marko-ilmkreis said. Those two issues are not interchangable and we can't implement one or the other as they both try to achieve different things.

@bernardsilenou At the moment I feel like we are talking about two different things.
This issue is just about providing the users with a "shortcut" to a functionality that we already have in the system.
Which is the possibility to search for any person and link it to a case/contact/lab message, etc. during creation in order to speed up the process and give the user more control over what is happening.
(The same thing that currently happens when the duplicate detection is triggered and the user selects "Select a person" in the popup window.
This has nothing to do with the person directory view that comes up when clicking on "Persons" in the main navigation or it's performance.

I think this feature makes sense because it allows users to use this functionality without having to navigate to the person directory if they're in a process of documenting several cases, or even when they've already filled in case details and only then realise that the person is probably already in the system. I don't think it should replace anything else (e.g. duplicate detection), and I also believe that having a full-fledged person directory copy would be overkill.

@Jan-Boehme @MateStrysewske @Marko-ilmkreis
- I also agree with you that users should not navigate to person directory all the time when creating entities.
- My main question has not still been answered. Sorry if i have not understood the request.
- @MateStrysewske How does this method differ from duplicate person detection please? When a user create a case, contact or any entity linked to a person, sormas should automatically search for all duplicate persons that the user has access to. Why does the user has to use the "looking glass" to search for the person when the idea of duplicate person detection is that this should always work irrespective of users choice in activating "looking glass".

@bernardsilenou Duplicate detection takes place AFTER the user clicks von "Save". This method here would be an option for the user to manually search for the person before, e.g. when they're not sure how exactly the person is called, or when they know for a fact that the person is in the system, but don't want to rely on duplicate detection.

@MateStrysewske @kwa20 Thanks
- So the main difference here is whether we click on "save" or "search" in order to trigger duplicate detection. Then that is fine, I though there was a difference in back-end method.
- So if user search and pick a match, then no need to call duplicate detection again, right? because users may get annoyed. Similarly to if they search, find no duplicate and when they save, calling duplicate detection again may annoy them.
- So if user trigger "looking glass" and either choose a person or create a new person, we do not call duplicate person detection, what do you think pls?

Verified ticket on test-de2.sormas.netzlink.com and test.sormas.netzlink.com.

I have discussed with @BarnaBartha and the ticket will be reopened due to the following:

1. Person search option needs to be added to the 'Create new travel entry' form;

2. Person search option should not be displayed in forms where the person related information is already filled in by the system:
- 'Create new contact' form (that is accessed from the 'Cases' directory - 'Epidemiological data' tab - 'Contacts with source case' card);
- 'New immunization' form (that is accessed from the 'Persons' directory - 'Person' page - 'Immunizations' card);
- 'Create new contact' form (that is accessed from the 'Events' directory - 'Event Participant' tab - 'Contacts' card).

@BarnaBartha @adinaflorea9 These are some UI issues that I have found when testing:

|current|desired|
|:-|:-
|<img width="378" alt="personSearchUI" src=" URL width="383" alt="personSearchUiFix" src=" URL
|<img width="620" alt="personSearchUI2" src=" URL width="622" alt="personSearchUiFix2" src=" URL

While testing the ticket a new issue has been observed. After a discussion with @BarnaBartha it has been decided that a comment should be added to detail the behavior observed.

Logging the comment in the same format as a bug:

Bug description:
Using the 'Person search option' allows the user to set 1 person as multiple event participants for the same event.

Steps to reproduce:
1. Open or create an event;
2. Click ‘Add Participant’ and create a new event participant (e.g. Person1);
3. Afterwards, add a second event participant to the same event;
4. When creating the new event participant, instead of entering person details manually, use the search for person feature;
5. Search for Person1 (the first event participant added at step 2) and select them from the list below;
6. Save the new event participant;
7. Person1 is now listed twice as event participant in the same event.

Actual Behavior:
The same person is listed as 2 event participants in the same event.

Expected Behavior:
The same person can not be listed as 2 event participants in the same event.

Additional information:
If a user tries to add Person1 as event participant manually (by entering the name and sex in the ‘create new event participant’ form) then they trigger the duplicate detection; if they pick the existing person from the list and try to save, they get an error that informs them that this person is already an event participant.

Screenshot of the error message that appears:
enter 1 person 2 times as event participant manually - you get an error saying that they can not be event participant twice

@kwa20 I'd suggest to not fix the first very minor UI issue (the left-aligned button) because finding a way to fix it would take some time and is in no way worth the effort we'd need to put into it, in my opinion.

While testing the ticket on test-de1.sormas.netzlink.com and test.sormas.netzlink.com., a new issue has been observed. After a discussion with @BarnaBartha it has been decided that a comment should be added to detail the behavior observed.

Logging the comment in the same format as a bug:

Bug Description:

An error message stating ‘An error has occurred. An unexpected error occurred. Please contact your supervisor or administrator and inform them about it’ appears in the ‘Immunizations’ directory and ‘Lab messages directory’.

Steps to reproduce:
1. Create a person by creating a new immunization from the ‘Immunizations’ directory;
2. Create a second person by creating a new case from the ‘Cases’ directory (when creating this person through the new case, in the person related fields, input the same data as for the person created at step 1);
3. Duplicate detection is triggered; select ‘Create new person’ form the pop-up;
4. Go to the ‘Immunizations’ tab and open the ‘Create new immunization’ form;
5. Select a different disease than the previously selected ones (i.e. the diseases used when creating the persons from step 1 and step 2);
6. For the person related fields use the ‘Person search option’ and search using the name of the persons from steps 1 and 2;
7. Click to select either of the persons;

Actual behavior:
User is not able to pick either of the persons from the list and an error message appears, stating ‘An error has occurred. An unexpected error occurred. Please contact your supervisor or administrator and inform them about it’.

Expected behavior:
User is able to successfully pick either of the persons from the list.

Screenshots:
Screenshot of the error message:
Second time the error reproduced - you also have two persons

Additional information:
The same error message can be observed in the ‘Samples’ directory when attempting to process a lab message.
Steps to reproduce:
1. Pick an unprocessed lab message;
2. From the first pop-up pick select matching person and pick a person from the list;
3. From the second pop-up pick create new case and click confirm – error message appears;
(if here the user picks create new contact no error message appears)
(if here the user picks create new event participant no error message appears)
 Or,
1. Pick an unprocessed lab message;
2. From the first pop-up pick ‘select a different person’ and pick a person from the list;
3. From the second pop-up pick create new case and click confirm – error message appears;
Or,
1. Pick an unprocessed lab message;
2. From the first pop-up pick ‘create new person’;
3. From the second pop-up pick create new case and click confirm - error message appears;
(if here the user picks create new contact no error message appears)
(if here the user picks create new event participant no error message appears)

A similar error message that was reproducing for 'Immunizations' and 'Samples - Lab messages' directories was logged in the comments from above.

@MateStrysewske has asked in a comment from ticket #7840 that I log the following as a comment here:

Bug description:
An error message stating ‘An error has occurred. An unexpected error occurred. Please contact your supervisor or administrator and inform them about it’ appears when the user goes through the following flows:

- create a case for a contact person;

- if a sample with a positive pathogen test result is added to a contact, a pop-up to create a resulting case is triggered; if the user selects 'Yes', the error message appears;

- create a case for an event participant;

- if a sample with a positive pathogen test result is added to an event participant, a pop-up to create a resulting case is triggered; if the user selects 'Yes', the error message appears;

- create a case for a travel entry;

- send a case to the reporting tool.

Actual Behavior
An error message stating ‘An error has occurred. An unexpected error occurred. Please contact your supervisor or administrator and inform them about it’

Expected Behavior
No error message appears when the user goes through the flows described above.

Screenshots:
Create case from an event participant error message

System Details
Device: Windows 10
SORMAS version: 1.68.0-SNAPSHOT
Android version/Browser: Chrome
Server URL: test-de1.sormas.netzlink.com
User Role: Admin, NatUser

Tested the ticket on test-de1.sormas.netzlink.com and after a discussion with @BarnaBartha it has been decided that a comment should be added to detail the behavior observed.

1. Person search option should not be displayed in forms where the person related information is already filled in by the system:
- [ ] 'Create new travel entry' form (that is accessed from the 'Persons' directory - 'Person' page - 'Travel Entries' card);
- [ ] 'Create new travel entry' form (that is accessed from the 'Cases' directory - 'Epidemiological data' tab - 'Travel Entries' card);

2. Person search option needs to be added to:
- [ ] the 'Add new event participant' form that is accessed from the 'Samples' directory - via 'Lab messages' - unprocessed lab message - 'Create new event participant';

- [ ] Error message stating ‘An error has occurred. An unexpected error occurred. Please contact your supervisor or administrator and inform them about it’ appears when the user goes through the following flow:
 - create or open an existing event;
 - open the 'Add new event participant' form;
 - input data in the mandatory fields;
 - click 'Save';
 - observe the error message.

Screenshot of the error message:
Created new event - tried to add a brand new event participant - error message appears on my local host

Verified ticket on the local machine and test-de2.sormas.netzlink.com using the latest version of Sormas 1.68.0-SNAPSHOT.

3 follow up issues that were initially logged on the 3rd of February in a comment on this ticket, have been moved into a separate ticket #7903.


Question: Ensure that all codeowners are members of the OpenTelemetry organization?

I would prefer to remove the old account, since having multiple accounts may imply multiple votes during elections for example.

@open-telemetry/governance-committee what is your take here?

Ensure that all codeowners are members of the OpenTelemetry organization
### Component(s)

_No response_

### Describe the issue you're reporting

_See URL for the last campaign_

Not all codeowners of this repository are members of the OpenTelemetry github organization, which membership is associated with membership of the OpenTelemetry project.

The guidelines enforce membership because it allows to assign and ping codeowners on issues or pull requests. Unfortunately, if you try to create an issue or assign a PR to a codeowner who is not member of OpenTelemetry, the workflow fails. I would like to fix this issue.

Going forward, I would also ideally like to make sure that we check that codeowners are members of the github organization whenever the codeowners file is touched.

The process to become a member of OpenTelemetry is straightforward. Open this issue template on the community project to get started.

I have identified a list of codeowners who are not currently members of OpenTelemetry. I will ping them in this issue below.
1. Please cross your name to indicate you have seen this message.
2. (optional) Please get in touch over Slack: I have created a slack channel for the purpose of codeowner discussions, #otel-collector. Feel free to reply here as well and provide clarifications if any information is incorrect.
3. Please work towards membership. Feel free to use 2. for any questions.
4. If I don't hear from you in the next 60 days (tentative), I will open an issue to follow up. The issue will offer to either help you become a member or open a pull request to move to emeritus status.

* [ ] @Caleb-Hurshman
* [ ] @MaxKsyunz
* [ ] @MitchellGale
* [ ] @YANG-DB
* [ ] @asaharn
* [x] @billmeyer
* [x] @emreyalvac
* [ ] @shaochengwang
* [ ] @yiyang5055
* [ ] @am-kinetica
* [x] @mcube8
* [x] @sokoide
* [x] @zdaratom
* [x] @braydonk

Thank you and apologies for the inconvenience.

I am unable to check the checkbox for my name, but I have seen the issue.

`#otel-collector-codeowners` is an archived channel, will you be unarchiving it for this issue's purposes?

_Just adding a couple reference issues_

@braydonk - URL
@zdaratom - URL

"zdaratom" is no longer needed as it has been updated via URL

As of 2024/04/30:

$ githubgen
2024/04/30 10:50:08 codeowners are not members: Caleb-Hurshman, MaxKsyunz, MitchellGale, YANG-DB, adcharre, am-kinetica, asaharn, cheempz, driverpt, emreyalvac, jcreixell, jerrytfleung, rlankfo, shaochengwang, swar8080, thmshmm, yiyang5055, zpzhuSplunk

After a long wait, a few of the folks here are still not members of the OpenTelemetry organization. Unfortunately, it is time to move you to emeritus. See URL

If you have any problem with this approach, please get in touch.

Hi @atoulme,

Thank you very much for your understanding. I need one more sponsor. How should I proceed?

Hi @atoulme,

Thank you very much for your understanding. I need one more sponsor. I am trying to find a sponsor.

 URL

REQUEST: New membership for zdaratom
### GitHub Username

@zdaratom

### Requirements

- [ x] I have reviewed the community membership guidelines ( URL
- [ x] I have enabled 2FA on my GitHub account. See URL
- [ x] I have subscribed to the Slack channel (use URL to get an invite)
- [x ] I am actively contributing to 1 or more OpenTelemetry subprojects
- [x ] I have two sponsors that meet the sponsor requirements listed in the community membership guidelines. Among other requirements, sponsors must be approvers or maintainers of at least one repository in the organization and not both affiliated with the same company
- [ x] I have spoken to my sponsors ahead of this application, and they have agreed to sponsor my application

### Sponsors

@zdaratom-s1
@atoulme

### List of contributions to the OpenTelemetry project

- URL
- URL
- URL

I agree, this is more like an account transfer than a new membership. @zdaratom does that work for you?