Improve documentation: What a mapping is... and is not.

Overview
I glanced through the SSSOM docs but I didn't see anything about what a mapping is and is not.
I'm guessing it has something to do with the concept of "degree of equivalence / shared properties". It would be good to distinguish between mapping predicates and some other example relationship predicates.
Could also include short list of preds SSSOM considers by default (I'm guessing something like skos exact/broad/narrow/close/related & oboInOwl:hasDbXref).
Real world cases
OMOP has ~450 different relationships. It would be nice to be able to show which of those relationships are mapping relationships and why.
Additional details
Context:

https://github.com/mapping-commons/sssom-py/issues/456#issuecomment-1752159476

Thank you @joeflack4 I think it is a good thing to add a statement about this to the documentation. The answer is not going to be easy. If you ask the average mapping expert (aka your favourite LLM) what a mapping is, they will tell you something like:

A semantic mapping relationship refers to the connection or correspondence established between two or more concepts across different systems, ontologies, or datasets, based on their meanings or interpretations. This relationship captures the equivalence, similarity, or relatedness of the linked concepts, ensuring that data can be understood, integrated, and interoperated in a consistent manner across diverse sources.

I think the answer to this question will come down to delineating the idea of "correspondence" from mere "association".
Correspondence:
"Correspondence" refers to a specific relationship established between two or more entities across different datasets, schemas, or systems, indicating that they represent the same or equivalent information. The term often implies a more formal, direct, and explicit linkage between entities, suggesting a stronger degree of equivalence or similarity.
For instance, in the process of ontology alignment or schema matching, when two concepts from different ontologies are determined to be equivalent, a correspondence is established between them. This correspondence ensures that data using either of these concepts can be seamlessly integrated or queried across both systems.
Association:
"Association", on the other hand, implies a more general relationship between entities. It suggests that two or more entities are related in some manner but doesn't necessarily dictate the nature or strength of that relationship. An association can be broad, encompassing various types of relationships like correlation, dependency, or co-occurrence.
In data mapping, while a correspondence might indicate that two fields in different databases represent the same piece of information (e.g., "First Name" in Database A corresponds to "Given Name" in Database B), an association might indicate that two fields are related but not equivalent (e.g., "Product ID" in Database A is associated with "Transaction ID" in Database B because transactions are related to products, but they don't represent the same concept).
So, Correspondence implies a direct, often bidirectional, and stronger relationship suggesting equivalence or very close similarity. Association is a broader term indicating some form of relationship but without specifying its nature or strength.
I think anything that can be subsumed under the idea of "correspondence" predicate is a predicate whose presence indicates a true mapping relationship. Conversely, everything that is an association that does not correspond to a "correspondence" does not indicate a true mapping relationship. Let's call these "not-correspondences". It is my view, and correct me if I am wrong, that "not-correspondences" are not in scope for SSSOM.
Examples
Clear examples of correspondences

:A skos:exactMatch :B
:A owl:equivalentClass :B
:A skos:broadMatch :B
:A semapv:crossSpeciesNarrowMatch :B
:a owl:sameAs :B

Basically everything in https://mapping-commons.github.io/sssom/mapping-predicates/#the-3-step-process-for-selecting-an-appropriate-mapping-predicate should be non-controversial.
 But I thin about half of the people would except these.

:BRCA1 :codesProtein :BRCA1Protein
:GlucoseLevelMeasurement :usedToQuantify :GlucoseLevelTrait
:Glucose :isMeasuredBy :GlucoseLevelMeasurement
:Apple :definingProductOf :AppleTree

What these have in common is that they are isomorphic (1:1) and highlight a different aspect of the thing.

:A rdfs:subClassOf :B

This sounds like a clear mapping candidate and I am happy to classify it as such, but there is a bit of a case to be made that

:BRCA1  rdfs:subClassOf BFO:entity

is not a real mapping per se. Still I think it is just about in scope, as it is very analogous to skos:broadMatch which is clearly in scope.
Clear examples of not-correspondences

:BRCA1 :in_taxon :NCBI:Human (regular association)
:Student :enrolledIn :University
:Phone :isManufacturedIn :China

Fuzzy examples of not-correspondences

:Hand :part_of :Body (mereological relations are clearly not "correspondence" predicates, but sometimes part of is a useful relation to integrate two semantic spaces)
:BRCA1 biolink:category biolink:Gene (this looks like a very general "subclass" assertion but this is more like a metaclass assertion, which I would not include in the set of correspondences.
:n-Hexane :isIsomerOf :Hexane(C6H14)

Alright, this is my first take. Feel free to weigh in, its a complicated discussion but ultimately useful to avoid people building ontologies in SSSOM format.

:A rdfs:subClassOf :B

This sounds like a clear mapping candidate and I am happy to classify it as such, but there is a bit of a case to be made that

:BRCA1 rdfs:subClassOf BFO:entity

is not a real mapping per se. Still I think it is just about in scope, as it is very analogous to skos:broadMatch which is clearly in scope.

On that, I would like to state that, in my opinion, using rdfs:subClassOf or owl:equivalentClass as mapping predicates is something that should not be done, and that in fact the SSSOM standard probably should not have allowed. It’s too late to change that, but the use of those predicates can still be discouraged.
For two reasons:
First, it weakens the distinction between a “correspondence” and an “association”, or between the SSSOM format and an ontology serialisation format. It’s more difficult to argue that the SSSOM format should not be used to represent an ontology when the SSSOM format explicitly allows to use ontological relations as predicates. This very discussion is a proof of that.
Second, I believe that it is not up to the author of a mapping to decide what the OWL or RDF representation of that mapping should be, or put differently that a mapping should be distinct from its possible OWL or RDF representation(s). Using rdfs:subClassOf as a mapping predicate conflates the two things, and I think it is an error. The mapping predicate should be something like skos:broadMatch instead, and that’s all the author of the mapping should have to say. How to translate that skos:broadMatch mapping into OWL or RDF should be out of scope and left for the consumers of the mapping to decide (and different consumers may need different translations).
(Yes, it is still possible, when a mapping uses rdfs:subClassOf, for the consumers to “overrule” the author-mandated representation and to transform the predicate into whatever other representation is adapted for their purpose. But it would be best if they didn’t have to do that – if the mapping did not have a predicate that dictates its OWL or RDF representation in the first place.)
I am inclined to think that oboInOwl:hasDbXref should also be avoided as a mapping predicate, for the same reason: it’s not actually a mapping predicate, it’s an annotation that can be used to represent a mapping in a OWL ontology (and that is, in effect, widely used for that purpose) – again, that’s conflating the correspondence with one way of translating it into OWL.

@gouttegd thanks for this great analysis and detailed comment. Intellectually I agree with all that you say, but I suspect that other systems/representations will want to be reflected (thinking of OMOP) and these systems use hasChild / hasParent relationships between concepts from different terminologies (that look a lot like subClassOf), in addition to something like mapsTo. Practically it will be hard to draw a strong line.
But I agree with the sentiment that we should amend the documentation to:

Prefer proper semantic mapping relations from SEMAPV in SSSOM mappings (which excludes subclass and equivalentclass).
Avoid other mapping relationships for the reason you are saying.

I think you guys have this covered. What I add is only a tangent.
@matentzn I don't really agree w/ your "fuzzy correspondence" examples.
e.g. :Apple :definingProductOf :AppleTree, all the examples share a word between the subject and object. All subs/objs in those examples share context, but they don't share any essential properties. Some of them only share more distant properties like "thing" or "made of matter" or "made of amino acids" that are not really essential to the definition of the thing.
Anyway you don't think they map/correspond to each other either. There's probably room for better language to describe these kinds of relationships/associations.

Late to the discussion here. These distinctions are clearly very difficult to make, especially with things like "gene encodes protein" (which fyi is not 1:1 @matentzn). It's not a formal equivalence at all but it's definitely a "mapping" in common usage.
HOWEVER I don't think as SSSOM developers we need to lose too much sleep over this. You could dump an ontology into an SSSOM file using it as a TSV based triple serialization where all predicates are assumed to be "mappings" - but then the SSSOM tooling gives you nothing over what existing RDF/OWL tools provide, so why would you?
I'm sure there are lots of examples of tools I can use for the wrong job. Like I could use MS word to make a crude spreadsheet with tables... or I could use Excel. The MS word developers don't worry that I might possibly use it to build a spreadsheet.

@udp thanks for your perspective.
I agree we should not lose sleep. And I also agree we do not need to be normative here.. But part of SSSOM is sociological, i.e. an effort that aims at making "things" better, and for that, we should at least have a rough idea on what "thing" we are talking about. So when people ask "what is a mapping", we should have some at least reasonable approximation of an answer to avoid it being misused. Also, in my experience it increased trust by stakeholders if we try to push the community towards less scope creep, so that eventually, the presence of a SSSOM file will be perceived as a work of true artisanship rather than a dump of arbitrary associations.
@joeflack4

All subs/objs in those examples share context, but they don't share any essential properties. Some of them only share more distant properties like "thing" or "made of matter" or "made of amino acids" that are not really essential to the definition of the thing.

You are of course correct! Apple and Apple tree is a bad example. However, :GlucoseLevelMeasurement :usedToQuantify :GlucoseLevelTrait makes some sense in many use case scenarios. Maybe a better way to define this "fuzzy" category would be to define the idea of "aspect" and postulate that the mapped entities are essentially aspects of the exact same thing (Student the role (Role ontology) and Student the person attending university (university ontology)). I removed the AppleTree example now as per your feedback, as it is indeed a dumb one.


Document that name is supported in --filter search

This has been working since ab5cf07 but was not documented. Let's mention the supported key directly in the help message. Deduplicate the option definition and rename variables a bit to make the filtering group
Pull Request Checklist

[x] write the documentation

For reference, here's where the name gets into the metadata:
https://github.com/teemtee/tmt/blob/b772cde2bb70db57732db504ed6ae5c9b0dcff0b/tmt/base.py#L761-L764

/packit test -i full


:sparkles: Switch to use the Space Framework

This PR replaces #1286.   It is still WIP until all changes are pushed into the space-mgt branch
It includes changing all the scripts, tests, and KS code to use the SF instead of KCP workspaces.
It also switch from using a "cluster ID" to using "space name"

Summary
Related issue(s)
Fixes #

See also my remark about this PR in another one: https://github.com/kubestellar/kubestellar/pull/1365#discussion_r1416137001


Wrong audio language selected (should play German but plays English)

During my testing, I find that some movies are played in English even when they have German audio streams. I use version 0.8.2-beta-docker-vaapi.
Here is an example:
Channel setup

Mediainfo
General
Unique ID                                :<PHONE_NUMBER>06180015964082116467639216629 (0x858316F0A354356E384872FB87C869F5)
Complete name                            : /home/matthias/Videos/Movies/The Tuxedo (2002).mkv
Format                                   : Matroska
Format version                           : Version 4
File size                                : 2.79 GiB
Duration                                 : 1 h 38 min
Overall bit rate                         : 4 047 kb/s
Movie name                               : The Tuxedo (2002)
Encoded date                             : UTC 2023-01-23 17:54:27
Writing application                      : mkvmerge v72.0.0 ('Minuano (Six-eight)') 64-bit
Writing library                          : libebml v1.4.4 + libmatroska v1.7.1

Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main@L4@Main
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 1 h 38 min
Bit rate                                 : 3 266 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 040 pixels
Display aspect ratio                     : 1.85:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Bits/(Pixel*Frame)                       : 0.068
Stream size                              : 2.25 GiB (81%)
Writing library                          : x265 3.4+14-gd419c7152:[Windows][GCC 10.2.0][64 bit] 8bit+10bit+12bit
Encoding settings                        : cpuid=1111039 / frame-threads=2 / numa-pools=4 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=1920x1040 / interlace=0 / total-frames=142067 / level-idc=40 / high-tier=1 / uhd-bd=0 / ref=5 / no-allow-non-conformance / no-repeat-headers / annexb / no-aud / no-hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=23 / keyint=250 / gop-lookahead=0 / bframes=4 / b-adapt=0 / b-pyramid / bframe-bias=0 / rc-lookahead=15 / lookahead-slices=6 / scenecut=40 / hist-scenecut=0 / radl=0 / no-splice / no-intra-refresh / ctu=64 / min-cu-size=8 / no-rect / no-amp / max-tu-size=32 / tu-inter-depth=1 / tu-intra-depth=1 / limit-tu=0 / rdoq-level=0 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / strong-intra-smoothing / max-merge=2 / limit-refs=3 / no-limit-modes / me=1 / subme=2 / merange=57 / temporal-mvp / no-frame-dup / no-hme / weightp / no-weightb / no-analyze-src-pics / deblock=0:0 / sao / no-sao-non-deblock / rd=2 / selective-sao=4 / no-early-skip / rskip / fast-intra / no-tskip-fast / no-cu-lossless / no-b-intra / no-splitrd-skip / rdpenalty=0 / psy-rd=2.00 / psy-rdoq=0.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=abr / bitrate=3267 / qcomp=0.60 / qpstep=4 / stats-write=0 / stats-read=2 / cplxblur=20.0 / qblur=0.5 / ipratio=1.40 / pbratio=1.30 / aq-mode=2 / aq-strength=1.00 / cutree / zone-count=0 / no-strict-cbr / qg-size=32 / no-rc-grain / qpmax=69 / qpmin=0 / no-const-vbv / sar=1 / overscan=0 / videoformat=5 / range=0 / colorprim=2 / transfer=2 / colormatrix=2 / chromaloc=0 / display-window=0 / cll=0,0 / min-luma=0 / max-luma=255 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / no-opt-qp-pps / no-opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / hist-threshold=0.03 / no-opt-cu-delta-qp / no-aq-motion / no-hdr10 / no-hdr10-opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level=0 / analysis-save-reuse-level=0 / analysis-load-reuse-level=0 / scale-factor=0 / refine-intra=0 / refine-inter=0 / refine-mv=1 / refine-ctu-distortion=0 / no-limit-sao / ctu-info=0 / no-lowpass-dct / refine-analysis-type=0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei / no-hevc-aq / no-svt / no-field / qp-adaptation-range=1.00 / no-scenecut-aware-qpconformance-window-offsets / right=0 / bottom=0 / decoder-max-rate=0
Language                                 : English
Default                                  : Yes
Forced                                   : No

Audio #1
ID                                       : 2
Format                                   : AC-3
Format/Info                              : Audio Coding 3
Commercial name                          : Dolby Digital
Codec ID                                 : A_AC3
Duration                                 : 1 h 38 min
Bit rate mode                            : Constant
Bit rate                                 : 384 kb/s
Channel(s)                               : 6 channels
Channel layout                           : L R C LFE Ls Rs
Sampling rate                            : 48.0 kHz
Frame rate                               : 31.250 FPS (1536 SPF)
Compression mode                         : Lossy
Stream size                              : 271 MiB (9%)
Title                                    : English DD 5.1
Language                                 : English
Service kind                             : Complete Main
Default                                  : Yes
Forced                                   : No

Audio #2
ID                                       : 3
Format                                   : AC-3
Format/Info                              : Audio Coding 3
Commercial name                          : Dolby Digital
Codec ID                                 : A_AC3
Duration                                 : 1 h 38 min
Bit rate mode                            : Constant
Bit rate                                 : 384 kb/s
Channel(s)                               : 6 channels
Channel layout                           : L R C LFE Ls Rs
Sampling rate                            : 48.0 kHz
Frame rate                               : 31.250 FPS (1536 SPF)
Compression mode                         : Lossy
Delay relative to video                  : 12 ms
Stream size                              : 271 MiB (9%)
Title                                    : Deutsch DD 5.1
Language                                 : German
Service kind                             : Complete Main
Default                                  : No
Forced                                   : No

Text #1
ID                                       : 4
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 32 min
Bit rate                                 : 9 752 b/s
Count of elements                        : 1165
Stream size                              : 6.44 MiB (0%)
Title                                    : English
Language                                 : English
Default                                  : No
Forced                                   : No

Text #2
ID                                       : 5
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 33 min
Bit rate                                 : 9 780 b/s
Count of elements                        : 1156
Stream size                              : 6.57 MiB (0%)
Title                                    : Deutsch
Language                                 : German
Default                                  : No
Forced                                   : No

Text #3
ID                                       : 6
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 48 min 39 s
Bit rate                                 : 228 b/s
Count of elements                        : 14
Stream size                              : 81.4 KiB (0%)
Title                                    : Deutsch forced
Language                                 : German
Default                                  : No
Forced                                   : Yes

Text #4
ID                                       : 7
Format                                   : UTF-8
Codec ID                                 : S_TEXT/UTF8
Codec ID/Info                            : UTF-8 Plain Text
Duration                                 : 48 min 39 s
Bit rate                                 : 1 b/s
Count of elements                        : 14
Stream size                              : 423 Bytes (0%)
Title                                    : Deutsch forced
Language                                 : German
Default                                  : No
Forced                                   : Yes

Menu
00:00:00.000                             : en:Chapter 01
00:06:51.285                             : en:Chapter 02
00:14:12.226                             : en:Chapter 03
00:25:00.207                             : en:Chapter 04
00:29:47.410                             : en:Chapter 05
00:37:59.819                             : en:Chapter 06
00:45:01.657                             : en:Chapter 07
00:53:45.305                             : en:Chapter 08
01:02:33.040                             : en:Chapter 09
01:08:20.304                             : en:Chapter 10
01:16:58.989                             : en:Chapter 11
01:25:45.140                             : en:Chapter 12
01:35:45.140                             : en:Chapter 13

MKVToolNix Info

Could this be one of these "bibliographic vs terminology" ISO 639 issues?
I.e., looking for "deu" instead of "ger" (or actually both)?
Should look for both variants (in this case, "deu" and "ger") and probably also check the IETF BCP 47 entry ("de" in this case). The latter is important for cases like Flemish (nl_BE) vs. Dutch (nl) and Portuguese (pt or pt_PT) vs. Brazilian (pt_BR).

If you set the log level to Debug in ETV's main Settings page and try streaming again, the log will contain more info about audio track selection that might help diagnose.

The external media info is helpful, but it's also worth noting that ETV has a button to display its media info about an item. They usually match, but it's worth a look.

Thanks for all the hints!
Here’s the debug log (from the point I terminated the old playout and started a new one on the client).
10/6/2023 4:00:40 PM +02:00 	Debug 	Completed garbage collection
10/6/2023 4:00:40 PM +02:00 	Debug 	Done checking playouts [1] for text subtitles to extract
10/6/2023 4:00:40 PM +02:00 	Debug 	Starting garbage collection
10/6/2023 4:00:40 PM +02:00 	Debug 	Checking media items [15] for text subtitles or fonts to extract for playouts [1]
10/6/2023 4:00:40 PM +02:00 	Debug 	Checking playouts [1] for text subtitles to extract
10/6/2023 4:00:40 PM +02:00 	Debug 	Completed garbage collection
10/6/2023 4:00:40 PM +02:00 	Debug 	Starting garbage collection
10/6/2023 4:00:40 PM +02:00 	Debug 	Built playout 1
10/6/2023 4:00:40 PM +02:00 	Debug 	Building playout from "2023-10-08T17:17:06.0164608+02:00" to "2023-10-08T00:00:00.0000000+02:00"
10/6/2023 4:00:40 PM +02:00 	Debug 	Building playout 1 for channel 1 - ErsatzTV
10/6/2023 4:00:40 PM +02:00 	Debug 	Building playout from "2023-10-06T16:00:40.2185036+02:00" to "2023-10-07T00:00:00.0000000+02:00"
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for jellyfin library 9 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for jellyfin library 8 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for local library 12 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for local library 5 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for local library 4 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scheduler sleeping for 30 minutes
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for local library 3 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for local library 2 at this time
10/6/2023 4:00:40 PM +02:00 	Debug 	Scan is not required for local library 1 at this time
10/6/2023 4:00:36 PM +02:00 	Debug 	Maybe starting ffmpeg session for channel 1
10/6/2023 4:00:36 PM +02:00 	Debug 	Session is already active; returning multi-variant playlist for channel 1
10/6/2023 4:00:35 PM +02:00 	Debug 	WaitForPlaylistSegments took "00:00:03.7085068"
10/6/2023 4:00:35 PM +02:00 	Debug 	Session started; returning multi-variant playlist for channel 1
10/6/2023 4:00:35 PM +02:00 	Debug 	Playlist exists
10/6/2023 4:00:35 PM +02:00 	Debug 	Segment count 0 of 1
10/6/2023 4:00:31 PM +02:00 	Debug 	FFmpeg pipeline ["ThreadCountOption","NoStandardInputOption","HideBannerOption","NoStatsOption","LoglevelErrorOption","StandardFormatFlags","NoDemuxDecodeDelayOutputOption","FastStartOutputOption","ClosedGopOutputOption","NoSceneDetectOutputOption","TimeLimitOutputOption","VaapiHardwareAccelerationOption","LibvaDriverNameVariable","FrameRateOutputOption","VideoTrackTimescaleOutputOption","VideoBitrateOutputOption","VideoBufferSizeOutputOption","EncoderH264Vaapi","EncoderAac","AudioChannelsOutputOption","AudioBitrateOutputOption","AudioBufferSizeOutputOption","AudioSampleRateOutputOption","DoNotMapMetadataOutputOption","MetadataServiceProviderOutputOption","MetadataServiceNameOutputOption","MetadataAudioLanguageOutputOption","OutputFormatHls","ComplexFilter"], ["NormalizeLoudnessFilter","AudioPadFilter"], ["ScaleFilter","PadFilter","EncoderH264Vaapi"]
10/6/2023 4:00:31 PM +02:00 	Debug 	FFmpeg environment variables ["EnvironmentVariable { Key = LIBVA_DRIVER_NAME, Value = i965 }"]
10/6/2023 4:00:31 PM +02:00 	Information 	ffmpeg hls arguments -threads 1 -nostdin -hide_banner -nostats -loglevel error -fflags +genpts+discardcorrupt+igndts -vaapi_device /dev/dri/renderD128 -ss 00:33:13.1460938 -c:v hevc -i http://localhost:8409/media/jellyfin/3cc5d5982c246cb0c41d7efe899d1461 -ss 00:33:13.1460938 -i http://localhost:8409/media/jellyfin/3cc5d5982c246cb0c41d7efe899d1461 -i /root/.local/share/ersatztv/cache/artwork/watermarks/D2/D2DD9D624116F62A540739FAB3CFC736 -filter_complex [1:1]loudnorm=I=-16:TP=-1.5:LRA=11,apad=whole_dur=2173146.0938ms[a];[0:0]scale=iw*sar:ih,setsar=1,scale=1280:720:flags=fast_bilinear:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1:color=black[v];[2:0]scale=192:-1,colorchannelmixer=aa=0.70,format=yuva420p[wm];[v][wm]overlay=x=W-w-208:y=36:format=0[vwm];[vwm]setparams=range=tv:colorspace=bt709:color_trc=bt709:color_primaries=bt709,format=nv12,hwupload[vpf] -map [a] -map [vpf] -muxdelay 0 -muxpreload 0 -movflags +faststart -flags cgop -sc_threshold 0 -t 00:03:00 -r 24 -vsync cfr -video_track_timescale 90000 -b:v 2000k -maxrate:v 2000k -bufsize:v 4000k -c:v h264_vaapi -c:a aac -b:a 128k -maxrate:a 128k -bufsize:a 256k -ar 48k -map_metadata -1 -metadata "service_provider=\"ErsatzTV\"" -metadata "service_name=\"ErsatzTV\"" -metadata:s:a:0 language=eng -g 96 -keyint_min 96 -force_key_frames expr:gte(t,n_forced*4) -f hls -hls_time 4 -hls_list_size 0 -segment_list_flags +live -hls_segment_filename /root/.local/share/etv-transcode/1/live%06d.ts -hls_flags program_date_time+append_list+discont_start+omit_endlist+independent_segments -mpegts_flags +initial_discontinuity /root/.local/share/etv-transcode/1/live.m3u8
10/6/2023 4:00:31 PM +02:00 	Debug 	Format ["p010le"] doesn't equal yuv420p
10/6/2023 4:00:31 PM +02:00 	Debug 	Resolution: 1280x720
10/6/2023 4:00:31 PM +02:00 	Debug 	Square Pix: 960x720
10/6/2023 4:00:31 PM +02:00 	Debug 	VAAPI does not support decoding hevc/["main 10"], will use software decoder
10/6/2023 4:00:31 PM +02:00 	Information 	Forcing 1 ffmpeg thread when hardware acceleration is used
10/6/2023 4:00:31 PM +02:00 	Debug 	Waiting for playlist to exist
10/6/2023 4:00:31 PM +02:00 	Debug 	FFmpeg desired state FrameState { Realtime = False, InfiniteLoop = False, VideoFormat = h264, VideoProfile = Some(main 10), PixelFormat = Some(ErsatzTV.FFmpeg.Format.PixelFormatYuv420P), ScaledSize = FrameSize { Width = 960, Height = 720 }, PaddedSize = FrameSize { Width = 1280, Height = 720 }, IsAnamorphic = False, FrameRate = Some(24), VideoBitrate = Some(2000), VideoBufferSize = Some(4000), VideoTrackTimeScale = Some(90000), Deinterlaced = False, FrameDataLocation = Unknown, FFmpegAspectRatio = 16/9, BitDepth = 8 }
10/6/2023 4:00:31 PM +02:00 	Debug 	Unable to find audio stream with preferred audio language code(s) ["ger","deu"]
10/6/2023 4:00:31 PM +02:00 	Debug 	Found audio stream flagged as default
10/6/2023 4:00:31 PM +02:00 	Debug 	Found no subtitles for channel 1 with mode "Forced" matching language deu
10/6/2023 4:00:31 PM +02:00 	Debug 	Preferred audio language has multiple codes ["ger","deu"]
10/6/2023 4:00:31 PM +02:00 	Debug 	Checking for JS Script at /root/.local/share/ersatztv/scripts/audio-stream-selector/movie.js
10/6/2023 4:00:31 PM +02:00 	Debug 	Unable to locate movie audio stream selector script; falling back to built-in logic
10/6/2023 4:00:31 PM +02:00 	Debug 	SelectAudioStream duration: "00:00:00.0000724"
10/6/2023 4:00:31 PM +02:00 	Information 	HLS segmenter will work ahead for channel 1
10/6/2023 4:00:31 PM +02:00 	Information 	HLS session state: "SeekAndWorkAhead"
10/6/2023 4:00:31 PM +02:00 	Information 	Normalizing frame rate for channel 1 from ["24/1","23.97603","24.00"] to 24
10/6/2023 4:00:31 PM +02:00 	Information 	Starting HLS session for channel 1
10/6/2023 4:00:31 PM +02:00 	Debug 	Checking frame rates for channel 1
10/6/2023 4:00:31 PM +02:00 	Debug 	Maybe starting ffmpeg session for channel 1
10/6/2023 4:00:31 PM +02:00 	Debug 	Preparing transcode folder /root/.local/share/etv-transcode/1
10/6/2023 4:00:23 PM +02:00 	Debug 	Completed garbage collection
10/6/2023 4:00:23 PM +02:00 	Debug 	Starting aggressive garbage collection
10/6/2023 4:00:23 PM +02:00 	Information 	Terminating HLS process for channel 1

Looks like it doesn’t find the "deu"/"ger" audio stream and selects either default or most channels?
Here’s the JSON info from ETV:
{
  "Id": 885,
  "Kind": "JellyfinMovie",
  "LibraryKind": "JellyfinLibrary",
  "ServerName": "media",
  "LibraryName": "Filme",
  "State": "RemoteOnly",
  "Duration": "01:38:45.4079488",
  "SampleAspectRatio": "1:1",
  "DisplayAspectRatio": "1.85:1",
  "RFrameRate": "23.97603",
  "VideoScanKind": "Progressive",
  "Width": 1920,
  "Height": 1040,
  "Streams": [
    {
      "Index": 0,
      "Kind": "Video",
      "Codec": "hevc",
      "Profile": "main",
      "Language": "eng",
      "Default": true,
      "PixelFormat": "yuv420p",
      "ColorRange": "",
      "ColorSpace": "",
      "ColorTransfer": "",
      "ColorPrimaries": ""
    },
    {
      "Index": 1,
      "Kind": "Audio",
      "Title": "English DD 5.1",
      "Codec": "ac3",
      "Profile": "",
      "Language": "eng",
      "Channels": 6,
      "Default": true
    },
    {
      "Index": 2,
      "Kind": "Audio",
      "Title": "Deutsch DD 5.1",
      "Codec": "ac3",
      "Profile": "",
      "Language": "ger",
      "Channels": 6
    },
    {
      "Index": 3,
      "Kind": "Subtitle",
      "Codec": "dvdsub",
      "Language": "eng"
    },
    {
      "Index": 4,
      "Kind": "Subtitle",
      "Codec": "dvdsub",
      "Language": "ger"
    },
    {
      "Index": 5,
      "Kind": "Subtitle",
      "Codec": "dvdsub",
      "Language": "ger",
      "Forced": true
    },
    {
      "Index": 6,
      "Kind": "Subtitle",
      "Codec": "subrip",
      "Language": "ger",
      "Forced": true
    }
  ]
}

Had to copy it manually, because:

@jasongdove Sorry for misleading both of us: I was one movie off! The one currently playing actually has no German audio.
We should really have a method to see what ETV is currently playing—not even the log shows any info. I manually opened xmltv.xml and tried to find it using the time stamps.
Would that be possible?

Still the subtitle thing might be an issue, and the COPY button (you have to refresh the browser window after that error).

I see that the subtitle language should probably use the same logic as audio (meaning multiple codes).
For the browser, some don't like interacting with the clipboard so you have to manually copy. I'm not sure that this can be fixed.

Ah okay. Hmm. Using Firefox 118 (Linux Mint 21.2), lots of programs/web sites function with copying to/from the clipboard. But it confirms what the log gives:

10/6/2023 4:11:11 PM +02:00 | Error | Unhandled exception in circuit 'wyXfjDytyUaG67bvw3UwATUipPBxRiVLHpDpzx6L650'.
-- | -- | --
10/6/2023 4:11:11 PM +02:00 | Warning | Unhandled exception rendering component: navigator.clipboard is undefined
10/6/2023 4:10:23 PM +02:00 | Error | Navigation failed when changing the location to search?query=the%20tuxedo
10/6/2023 4:10:23 PM +02:00 | Error | Unhandled exception in circuit '-WABharon-qL8X2Jba4seh7-858seCC04fckNbTkjE0'.
10/6/2023 4:09:46 PM +02:00 | Error | Unhandled exception in circuit 'EGU3EkuAMBbnbnE5SMAC0N5PJSM7TLzDT_8eoOoMkpU'.
10/6/2023 4:09:46 PM +02:00 | Warning | Unhandled exception rendering component: navigator.clipboard is undefined

This is probably the cause
https://developer.mozilla.org/en-US/docs/Web/API/Clipboard

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Great, that’d at least avoid the error (and page reload) for unsuspecting users. Not a deal breaker though ;-)

The logs are actually incorrect here, subtitle stream selection does use the same logic that audio stream selection uses. I will update the logs to reflect that.

The latest develop build has updated subtitle selection logging and a possible clipboard fix.
You will need to switch your docker tag from latest-vaapi to develop-vaapi to get the update. Note that there is a db schema change in the current develop builds, so you won't be able to go back to latest-vaapi until the next release.

Cheers! Now on 0.8.2-5291832e-docker-vaapi and in for more testing :-)


Relay container stops arbitrarily

Usually when the request rate is higher than what the server can handle, relay container stops. This happens either after invoker finishes sending all the requests, or in middle of it. Here is the last few lines of the output for docker logs relay :
INFO[2615] Received from invoker: Invoke relay
DEBU[2615] Send to func: {A random message default}
DEBU[2615] Recv from func: fn: AES | plaintext: A random message | ciphertext: fd4b8ac82162d0f2719c946be09d1bb8 | runtime: golang
DEBU[2615] Recv from func: fn: AES | plaintext: A random message | ciphertext: fd4b8ac82162d0f2719c946be09d1bb8 | runtime: golang
FATA[2615] could not greet: rpc error: code = Canceled desc = context canceled

@dhschall

@dhschall any update/plan on this issue?


[WIP] Add usePipelining: T[Boolean] to ScalaModule

Scala 3.5.0-RC1 added support for compilation pipelining

IIRC pipelining can slow things down in some cases, and it's still pretty experimental so probably won't be ready to be made the default for a while yet

I also wonder whether the config change in this PR is enough. Does the build tool need to do anything to integrate with it? Or is it all handled transparently by zinc?

I also wonder whether the config change in this PR is enough. Does the build tool need to do anything to integrate with it? Or is it all handled transparently by zinc? Can we demonstrate some speedup experimentally to show that it's actually working?

First we should link to the correct "pipelining" feature. If it's the in deed one I think it is, then this change won't be enough. It would only start to take effect, if we start compilation of multiple modules quasi-parallel, so zinc can decide when enough upstream compilation was done to start some downstream compilation. But maybe, there are multiple developments under the "pipelining" concept/term, hence my questions.

I also wonder whether the config change in this PR is enough. Does the build tool need to do anything to integrate with it? Or is it all handled transparently by zinc? Can we demonstrate some speedup experimentally to show that it's actually working?

First we should link to the correct "pipelining" feature. If it's in deed the one I think it is, then this change won't be enough. It would only start to take effect, if we start compilation of multiple modules quasi-parallel, so zinc can decide when enough upstream compilation was done to start some downstream compilation. But maybe, there are multiple developments under the "pipelining" concept/term, hence my questions.

I started implementing this PR in "auto-pilot" without thinking too much, but you are totally right! For this to work correctly, zinc needs to be able to start compiling the downstream modules before the upstream ones end, which of course doesn't happen for how Mill works.
This makes me think that Mill should have a different task graph if usePipelining is enabled or not, but that means that should be a Boolean instead of Target[Boolean], which will break the cache. Maybe this requires running an evaluation to know what to run.
What I know for sure is that I greatly underestimated the effort and changes required for pipelining to work.
Maybe @bishabosha can give some input here, since he implemented pipelining in the Scala 3 compiler.
It seems that this code in Sbt decides the flow to take via a conditional task.

We would loose a lot of other properties if we go that route, since modifying the task graph while it is already running would require a monadic approach. I too sometimes wished we had this feature, but in most cases I found a satisfying other solution. Being able to make some decisions before returning the final task is tremendously helpful.
Since compilation requires a lot of prerequisites, which should be managed by Mill, I don't think we should by-pass any Mill task semantics to enable pipelining. There is no point in starting a compilation which has still other unresolved dependencies.
What I could imaging is to split the compilation model into a zincCompilation: T.worker of of the known compile: T. The worker encapsulation the running zinc process and the compile only holding the result once compilation has finished. Downstream compilations could only depend on the other workers instead of the final result. That way, we could manage multiple compilations with or without pipelinening via the worker, but keep all other tasks and machinery as before.

That way, we could manage multiple compilations with or without pipelinening via the worker, but keep all other tasks and machinery as before.

That sounds like it could work. The T.worker basically can encapsulate arbitrary in-memory state and logic.
I could imagine having two targets def compile and def compileOutline (or whatever), where most use cases still use compile, but downstream pipelined compiles can depend on compileOutline, and both compile and compileOutline are just stubs wrapping the T.worker's compilation logic that happens on another thread and provides results to the two targets as they become available.
There is one small quirk since we'd be blocking threads in compile or compileOutline waiting for the logic inside T.worker to complete. Given the O(10s) of threads used in a typical build that's totally fine from a performance perspective and concurrency.

Given the O(10s) of threads used in a typical build that's totally fine from a performance perspective and concurrency.

Yeah. A build with is configured to only use one worker thread, shouldn't be able to profit from pipelined compilation, which sounds correct.
We could develop pipelined compilation in a @experimental separate trait, so we don't risk anything while figuring out the best approach, but can roll it out early to testers.


Allow the Zig SDK to return arbitrarily big responses

Describe the bug
At this time, the Zig SDK contains some hardcoded values when preparing the response object for Wasm Workers Server.
We should be able to return arbitrarily big responses from a Zig worker, and so, the Zig SDK should use allocation in order to prepare these responses, regardless of how big the response is.
Reproduction steps

Create a Zig worker following the documentation
Make it return a relatively big response
See crash due to memory limits

Expected behavior
An answer is produced normally, and returned by Wasm Workers Server back to the user.
Additional context
No response

Hi there, great project! Is it okay if I take this on, and also make some additional updates to the Zig SDK and examples? In addition to solving this issue, I'd like to improve memory management (allow user to provide their own allocator, to perform cleanup after writing response to stdout, etc.), update the SDK and examples to use the Zig package manager (in Zig 0.12.0), and fix zig fmt issues in the SDK/example code as of Zig 0.12 (I think zig fmt was more lenient when the wws Zig SDK was initially written).

@sea-grass would be really happy to see this! Happy to help/review! :)

Great, thanks @voigt. I'll get a PR going within the next few days and tag you as a reviewer so we can continue the discussion there!


Remove usages of Mina_ledger.Ledger.Db.foldi from daemon

The Mina_ledger.Ledger.Db.foldi is implemented in a very slow manner. In general, there shouldn't ever be a use case for iterating over the entire ledger in such a fashion from inside of the daemon's normal operations. The only time we should be doing that is for processing ledgers external, or perhaps exporting ledgers. It would be nice to optimize Mina_ledger.Ledger.Db.foldi to batch reads properly, but in lieu of such a change, it is easier to just removing remaining references to it in the daemon code. In particular, we use this operation unnecessarily during bootstrap, when we synchronize the epoch ledgers https://github.com/MinaProtocol/mina/blob/develop/src/lib/consensus/proof_of_stake.ml#L2863. Part of fixing this will revolve completely removing the current implementation of Sparse_ledger.of_any_ledger, which utilizes this very slow operation, and is akin to loading the entire on-disk ledger to an in-memory ledger (an operation we shouldn't allow).

I removed one more instance of this function from bootstrap in this PR https://github.com/MinaProtocol/mina/pull/13885.
These are the remaining usages:

Computing genesis ledger total currency src/lib/consensus/proof_of_stake.ml:40

We do this when evaluating the negative one to genesis block transition, and when producing genesis epoch ledger states (so a total of 3x times during bootup of a daemon)

Computing staking ledger total currency as part of the delegation uptime compliance message src/app/delegation_compliance/delegation_compliance.ml:177

This one is silly and very easy to fix, as we already know the total currency of the staking ledger (stored in local state)

Computing the full list of accounts in the genesis ledger (lazily) src/lib/genesis_ledger/genesis_ledger.ml

This is only used in tests.

The delegation_compliance app can be deleted.

Computing genesis ledger total currency src/lib/consensus/proof_of_stake.ml:40

We do this when evaluating the negative one to genesis block transition, and when producing genesis epoch ledger states (so a total of 3x times during bootup of a daemon)
This one might be worth fixing


haskellPackages.git-brunch: unbreak

Description of changes
The package was indeed broken for GHC 9.2. I fixed it, and it now succesfully compiles. A new version 1.6.0 is released. Also on hackage.
I had a look at other pull requests and comments how to unbreak. They normally only remove the package from the broken list and run the regenerate list.
How is the process in this case though? I need to update the version to v1.6.0. It will change the hash and dependencies. Is this something I can do or will it be done with the next update of haskell-updates?
Here I would need some advice. Thanks in advance.
Update
I tried the instructions for Initial haskell-updates PR
And indeed the result would look better. So, should the PR stay as is and the next haskell-updates PR will result in a new version?
  "git-brunch" = callPackage
    ({ mkDerivation, base, brick, extra, hspec, microlens
     , microlens-mtl, mtl, optparse-applicative, process, text, vector
     , vty
     }:
     mkDerivation {
       pname = "git-brunch";
       version = "<IP_ADDRESS>";
       sha256 = "1crpcv68lpfl0cs6cxmi7mcd1vawmif6qz1n0j2in49ypr75qkdk";
       isLibrary = false;
       isExecutable = true;
       executableHaskellDepends = [
         base brick extra hspec microlens microlens-mtl mtl
         optparse-applicative process text vector vty
       ];
       testHaskellDepends = [
         base brick extra hspec microlens microlens-mtl mtl
         optparse-applicative process text vector vty
       ];
       description = "git checkout command-line tool";
       license = lib.licenses.bsd3;
       mainProgram = "git-brunch";
     }) {};

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

This is exactly right.  Thanks!
Also, it looks like git-brunch is already <IP_ADDRESS> on haskell-updates so this should be good to go!
https://github.com/NixOS/nixpkgs/pull/208126


React: App tests fail for CRA/Jest

Framework7 version: 4.4.10
React.js version: 16.8.6

Describe the bug
Using framework7-react on a CRA project causes tests to fail. This also holds true when transpiling framework7 and framework7-react in full.
To Reproduce
Steps to reproduce the behavior:

Run npx create-react-app f7-react-fail && cd f7-react-fail && npm install framework7 framework7-react
Use the framework7-react App component in the app.
Run tests via npm t
Alternatively, you can just clone this repo and run npm i && npm t on it.

Expected behavior
Tests should not fail when using framework7-react.
Actual Behavior
Tests fail when using framework7-react.
Additional context
 FAIL  test/App.test.tsx
  ✕ renders without crashing (46ms)

  ● renders without crashing

    Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

    Check the render method of `App`.

       5 | test('renders without crashing', () => {
       6 |   const div = document.createElement('div');
    >  7 |   ReactDOM.render(<App />, div);
         |            ^
       8 |   ReactDOM.unmountComponentAtNode(div);
       9 | });
      10 |

      at invariant (node_modules/react-dom/cjs/react-dom.development.js:55:15)
      at createFiberFromTypeAndProps (node_modules/react-dom/cjs/react-dom.development.js:10217:11)
      at createFiberFromElement (node_modules/react-dom/cjs/react-dom.development.js:10238:15)
      at reconcileSingleElement (node_modules/react-dom/cjs/react-dom.development.js:12531:23)
      at reconcileChildFibers (node_modules/react-dom/cjs/react-dom.development.js:12588:35)
      at reconcileChildren (node_modules/react-dom/cjs/react-dom.development.js:14402:28)
      at mountIndeterminateComponent (node_modules/react-dom/cjs/react-dom.development.js:15064:5)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:15625:16)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:19312:12)
      at workLoop (node_modules/react-dom/cjs/react-dom.development.js:19352:24)
      at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:19435:7)
      at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:20342:7)
      at performWork (node_modules/react-dom/cjs/react-dom.development.js:20254:7)
      at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:20228:3)
      at requestWork (node_modules/react-dom/cjs/react-dom.development.js:20097:5)
      at scheduleWork (node_modules/react-dom/cjs/react-dom.development.js:19911:5)
      at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:20572:3)
      at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:20600:10)
      at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:20657:10)
      at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:20953:3)
      at node_modules/react-dom/cjs/react-dom.development.js:21090:14
      at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:20459:10)
      at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:21086:5)
      at Object.render (node_modules/react-dom/cjs/react-dom.development.js:21155:12)
      at Object.render (test/App.test.tsx:7:12)

  console.error node_modules/react/cjs/react.development.js:188
    Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

    Check your code at App.tsx:90.
        in App (at App.test.tsx:7)

  console.error node_modules/react/cjs/react.development.js:188
    Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

    Check your code at App.tsx:90.
        in App (at App.test.tsx:7)

  console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
    Error: Uncaught [Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

    Check the render method of `App`.]
        at reportException (node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
        at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:209:9)
        at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
        at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
        at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
        at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
        at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:199:16)
        at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:256:31)
        at replayUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:18578:5)
        at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:19468:13) { Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

    Check the render method of `App`.
        at invariant (node_modules/react-dom/cjs/react-dom.development.js:55:15)
        at createFiberFromTypeAndProps (node_modules/react-dom/cjs/react-dom.development.js:10217:11)
        at createFiberFromElement (node_modules/react-dom/cjs/react-dom.development.js:10238:15)
        at reconcileSingleElement (node_modules/react-dom/cjs/react-dom.development.js:12531:23)
        at reconcileChildFibers (node_modules/react-dom/cjs/react-dom.development.js:12588:35)
        at reconcileChildren (node_modules/react-dom/cjs/react-dom.development.js:14402:28)
        at mountIndeterminateComponent (node_modules/react-dom/cjs/react-dom.development.js:15064:5)
        at beginWork (node_modules/react-dom/cjs/react-dom.development.js:15625:16)
        at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:19312:12)
        at workLoop (node_modules/react-dom/cjs/react-dom.development.js:19352:24)
        at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:149:14)
        at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27)
        at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
        at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
        at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
        at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
        at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:199:16)
        at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:256:31)
        at replayUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:18578:5)
        at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:19468:13)
        at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:20342:7)
        at performWork (node_modules/react-dom/cjs/react-dom.development.js:20254:7)
        at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:20228:3)
        at requestWork (node_modules/react-dom/cjs/react-dom.development.js:20097:5)
        at scheduleWork (node_modules/react-dom/cjs/react-dom.development.js:19911:5)
        at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:20572:3)
        at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:20600:10)
        at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:20657:10)
        at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:20953:3)
        at node_modules/react-dom/cjs/react-dom.development.js:21090:14
        at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:20459:10)
        at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:21086:5)
        at Object.render (node_modules/react-dom/cjs/react-dom.development.js:21155:12)
        at Object.render (test/App.test.tsx:7:12)
        at Object.asyncJestTest (node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:102:37)
        at resolve (node_modules/jest-jasmine2/build/queueRunner.js:43:12)
        at new Promise (<anonymous>)
        at mapper (node_modules/jest-jasmine2/build/queueRunner.js:26:19)
        at promise.then (node_modules/jest-jasmine2/build/queueRunner.js:73:41)
        at <anonymous>
        at process._tickCallback (internal/process/next_tick.js:189:7) name: 'Invariant Violation', framesToPop: 1 }

  console.error node_modules/react-dom/cjs/react-dom.development.js:17117
    The above error occurred in the <App> component:
        in App (at App.test.tsx:7)

    Consider adding an error boundary to your tree to customize error handling behavior.
    Visit https://fb.me/react-error-boundaries to learn more about error boundaries.

@nolimits4web what are you thoughts on this? we would love to use jest with CRA as well.

Us too. +1.

@nolimits4web any thoughts on this one?

I want to keep using framework7 but I don't know if I can without unit tests : /

Having the exact same problem using F7 version 5.1.3

Any updates on this topic?
I am using framework7 5.4.0 & framework7-react 5.4.0 and experiencing the same problem.

Hmm. The only workaround I'm pursuing now is to mock out the components that framework7 introduces.

@ahouchens that’s what we ended up doing.

https://bit.dev/redsky/framework/rs/996

@burtontanner How did you end up writing meaningful tests if you had to stub out all of the framework7 components?
It's difficult to assert or interact with a form built with framework7 components in a test if they are all stubbed out.

@ahouchens I don't think I was very clear. We don't use their form components, we have our own. The main things we use are Popup, Page, View, and Navbar. Since those components don't affect unit tests that much they were easier to mock. Eventually we moved away from framework7 and made our own internal framework that we control. This has been an investment for sure but I couldn't be happier.


Can't change width of nz-rangePicker

Version
0.6.12
Environment
osx 10.13 chrome 64
Reproduction link
https://github.com/NG-ZORRO/ng-zorro-antd
Steps to reproduce

What is expected?
change width.
What is actually happening?
Can't change width of nz-rangepicker
Other?

not a bug, please check your code

对不起，我这张图截得有歧义，我style里面的东西是后来测试加上去的，我使用demo中一样的写法也出现了这个问题。


React 16 support

Hi, when will this support react 16?

thanks so when is the next release scheduled?

tomorrow i expect to release the new version, Im still implementing some new stuff

That would be awesome, gogo @xDae !

@zamirkhan you have to import the styles separately, v2 with new docs are coming :)

Great. Thank you! Looking forward to it.

I released a new version of React Plyr, take a look on it and test, feel free to report any problem:
https://github.com/xDae/react-plyr/releases
Im going to keep this issue open a few days until we can confirm its working fine for all the React Plyr users

Awesome. Thank you! I have upgraded and will let you know if I see any issues.

All good for me, I'm using react 16.3.0 and react-plyr 2.0.1, but for the css version I'm using https://cdn.plyr.io/3.3.20/plyr.css instead of https://cdn.plyr.io/3.3.9/plyr.css"
@xDae thank you for your efforts!


Nance SDK with types and interfaces

Maintain and publish a SDK with defined types and interfaces, to make it easy for integration with Nance API.

Here is what Im thinking:
export interface Proposal {
  hash: string;
  title: string;
  body?: string;
  translation?: {
    body?: string;
    language?: string;
  },
  payout?: Payout;
  notification?: Notification;
  reserve?: Reserve;
  url: string;
  governanceCycle?: number;
  date?: string,
  translationURL?: string | undefined;
  category?: string | undefined;
  status: string;
  proposalId: string;
  author?: string;
  discussionThreadURL: string;
  ipfsURL: string;
  voteURL: string;
  voteResults?: VoteResults;
  version?: number;
  project?: number
}

export type Payout = {
  type?: 'address' | 'project';
  address: string;
  amountUSD: number;
  count: number;
  treasuryVersion?: string;
};

type Notification = {
  discordUserId: string;
  expiry: boolean;
  execution: boolean;
  progress: boolean;
};

export type Reserve = {
  address: string;
  percentage: number;
};

export type ParameterUpdate = {
  durationDays: number;
  discountPercentage: number;
  reservedPercentage: number;
  redemptionPercentage: number;
};

export type VoteResults = {
  voteProposalId: string;
  totalVotes: number;
  scoresState: string;
  scores: Record<string, number>;
  percentages: Record<string, number>;
  outcomePercentage: string;
  outcomeEmoji: string;
}

WIP
Converted proposal.category to proposal.type and proposal.markdown to proposal.body
Will work on npm package tomorrow

basic hooks for Nance: https://github.com/jbx-protocol/juicetool/blob/main/hooks/NanceHooks.ts


Feature Request: Toast message when we copy html tag

Is your feature request related to a problem? Please describe.
When we copy the HTML tags for the specific icon. We don't get any message whether we have copied the icon tag or not.

.tags
Describe the solution you'd like.
So I have added the toast msg feature when we copy the HTML tag we get toast msg on the top right side.
And it vanishes automatically after a few minutes.

Describe alternatives you've considered
No response
Additional context.
Can I create PR for this issue? I have did the changes for the same.

@StarTrooper08 We already have an issue open for the same. https://github.com/EOS-uiux-Solutions/eos-icons-landing/issues/45

PR: https://github.com/EOS-uiux-Solutions/eos-icons-landing/pull/113#issue-1173291553
But it gives a build error in this file which I haven't changed


Add comments

Seems like we prob want to do right in the full stream view, so will need to do the expanding see all comment text etc, add in the comment authoring interface, blah blah

I assumed we'd turn on the single photo view again now that there's a use for it. So, when you tap on the comment bubble, it would take you to that view with the text input open. This would also let us navigate directly to the photo a notification is referencing... feels broken right now (obv. understandable, iterating, etc.) how it just takes you to the top of the feed... you don't know which photo was liked / commented on.

yakpot


Fix bugs related to web socket version of comment list

I believe this is resolved, @seanyesmunt can you confirm?

I fixed the issue where first comments aren't showing up until refresh. I'm trying to figure out how you can get connected to the websocket twice now

Fixed with #5692


Signal types can now be declared.

This works with #17.

@snowleopard: I have just noticed an issue.
If a signal type is not declared (i.e. it stays as Unused) then it will not be entered as a signal to the remaining .g file.
In the Hierarchy of SignalType, I suggest we removed Unused, then every signal can be translated, without having to declare a type. The default case being Internal

@jrbeaumont What do you think about calling the new concept is interface instead of signalType? I think it's a bit nicer. I don't like signalType, as it is too low level: type parameter a does not necessarily have to stand for signals in the abstract model. We could also rename SignalType to Interface...

That would make more sense for the abstract. I'll change it.
With regards to my previous comment, what are your thoughts?

I have just noticed an issue.
If a signal type is not declared (i.e. it stays as Unused) then it will not be entered as a signal to the remaining .g file.

I'm not sure this is an issue. If the user forgot to specify the type of a signal, then I think this is probably an incorrect specification, so we could check for such cases and report an error to the user.

In the Hierarchy of SignalType, I suggest we removed Unused, then every signal can be translated, without having to declare a type. The default case being Internal

I don't think it will work. If the default value is Internal then you can never get to Input by max. The default value should be lower in the hierarchy than Input.
One possible solution is to use Input as the default. It may be worth discussing this with @danilovesky if he thinks there can be a sensible default. I tend to think that we should keep Unused as the default and report an error during the translation procedure if a signal type has been left unspecified.

Fair enough. At the moment it is the .g parser in workcraft that throws an exception so I will perform a check in the translate tool and add an error for that. If possible, for clarity, I may add a specific error message in Workcraft for this error, but from the Concepts tool, not the parser.
Do not merge this yet, I'll make these minor changes first.
Final question: In the examples for the buck scenarios, I may move the signals declaration to chargeFunc. I worry this may cause issues with its naming, but it would further prove the reusability of concepts, including the declaration of signal types.

If possible, for clarity, I may add a specific error message in Workcraft for this error, but from the Concepts tool, not the parser.

@jrbeaumont Yep, I think this would be ideal.
Think about some circuit concept validation function that does roughly something like:
data ValidationResult a = Valid | UnusedSignal [a] | SomethingElseToBeAddedLater

validate :: [a] -> CircuitConcept a -> ValidationResult a
validate = ...

Then you can go ahead with the translation only if you get Valid as the validation result. Otherwise you report the corresponding error.

In the examples for the buck scenarios, I may move the signals declaration to chargeFunc

Yep, I think this makes sense. By the way, you can also call this interface, not signals.

@snowleopard I will change all this and add in validate.  A quick question, with regards to
validate :: [a] -> CircuitConcept a -> ValidationResult a

Would I need the [a]. Could I not simply perform validation on the CircuitConcept?

Would I need the [a]. Could I not simply perform validation on the CircuitConcept?

@jrbeaumont I think you need a list of signals, in order to go through them and check that none of them is Unused. At the moment I think there is no way to extract this list from a CircuitConcept. Maybe there should be.

Yes I realised while implementing validate.
It works correctly, returning an error stating that a signal hasn't had its type declared. Still working on how to say which signal.
Maybe there should be, but I fear we might need to add signals to the concept type specifically.

Still working on how to say which signal(s).

What do you mean? I thought validate will look something like:
validate :: [a] -> CircuitConcept a -> ValidationResult a
validate ss c = case filter ((==Unused) . interface c) ss of
    []     -> Valid
    unused -> UnusedSignal unused

So all you need to do is print the list returned by validate in UnusedSignal.

That's about what I've done but it's not enjoying the attempt at printing it. I'll try again in the morning and paste an error.

@snowleopard
signals with type not declared will now be output as part of the error.
I will add a helpful error message to Workcraft

@jrbeaumont I've added a couple of new comments. Please have a look and I think we'll be ready to merge this.

@snowleopard These changes have been made. Let me know if you've noticed anything else.
I'm a bit stuck with initial states. Are you free for 10 minutes this afternoon?

@jrbeaumont Thanks! Merged now.


Using Laravel with React - billable models not filling up after successful subscription.

Lemon Squeezy for Laravel Version
1.6
Laravel Version
10.10
PHP Version
8.1
Description
Like the title states, I'm using Laravel v10 as API, while using React on the frontend. So the way I have Lemon Squeezy set up, I get my users to click "Buy Now" - which sends a sanctum-protected API call to a custom endpoint, that eventually does:
Route::get('/subscribe', function (Request $request) {
        $user = $request->user();
        if ($user) {
            try {
                // Assuming you have configured LemonSqueezy SDK
                $checkoutUrl = $user->subscribe('xxxxxx')->url();
                return response()->json(['url' => $checkoutUrl]);
            } catch (\Exception $e) {
                return response()->json(['error' => $e->getMessage()], 500);
            }
        }
        return response()->json(['error' => 'User not authenticated'], 401);
    });

While in the frontend, I have:
import axios from "@/utils/axios";

export const subscribe = async () => {
  const response = await axios.get("/api/user/subscribe");
  if (response.data.url) {
    window.location.href = response.data.url; // Redirect to Lemon Squeezy checkout
  } else {
    console.error("Subscription error", response.data.error);
  }
};

So as you can imagine, my user is redirected to the signed Lemon Squeezy checkout, where he pays the subscription, now on success - I do have webhooks set up properly and I get everything back, including the "billable_id" - BUT, the docs state
When the customer has finished their checkout, the incoming SubscriptionCreated webhook will couple it to your billable model in the database. You can then retrieve the subscription from your billable model:

This is the bit that is not working for me. No matter how much I try, no data is saved into my database and there is no record of the subscription the test user just made.
Yes, I have appropriate test keys and test signed key in my env, and I am getting the full webhook object back, which includes the Billable model as well as all the other information about the transaction, but I'd really like the Lemon Squeezy x Laravel coupling to work, so I can easily do $user->subscribed() without going through the trials and tribulations of syncing transactions via webhook events.
Steps To Reproduce

Prepare a similar Laravel v10 + React Vite environment, coupled by Laravel Sanctum.
Setup Lemon Squeezy with Laravel, and prepare an API route (as I did) to generate subscription checkout, and have the React-end user access it (again, I believe I demonstrated it above in the description).
With the webhooks set up and the API routes working that redirect the React user to the backend-generated subscription checkout, complete a successful transaction.

Hmm this is odd. If the webhook is coming in properly it really should enter the subscription in your database. Do you might have the webhook payload for me to inspect?

Hmm this is odd. If the webhook is coming in properly it really should enter the subscription in your database. Do you might have the webhook payload for me to inspect?

Absolutely, here's the webhook payload I get back for subscription_created.
[2024-09-05 13:18:11] local.INFO: array (
  'data' =>
  array (
    'id' => '577993',
    'type' => 'subscriptions',
    'links' =>
    array (
      'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993',
    ),
    'attributes' =>
    array (
      'urls' =>
      array (
        'customer_portal' => 'https://sandapi.lemonsqueezy.com/billing?expires=1725546903&test_mode=1&user=450585&signature=20ddad3b9a6a819da518b9bc4a4b9351cc3be298e83b0891995b0a635216350a',
        'update_payment_method' => 'https://sandapi.lemonsqueezy.com/subscription/577993/payment-details?expires=1725611703&signature=350f0b1c94018afd239b011fbc8b44ca85db5f0298335caf9358ddea1bc563e1',
        'customer_portal_update_subscription' => 'https://sandapi.lemonsqueezy.com/billing/577993/update?expires=1725611703&user=450585&signature=c693b7f1bc7c06670cb2f21034f9213f75cddd02b8d2a73dacb329fb88a9f1fa',
      ),
      'pause' => NULL,
      'status' => 'active',
      'ends_at' => NULL,
      'order_id' => 3507360,
      'store_id' => 32480,
      'cancelled' => false,
      'renews_at' => '2024-10-05T08:34:57.000000Z',
      'test_mode' => true,
      'user_name' => 'Muhammad Roushan',
      'card_brand' => 'visa',
      'created_at' => '2024-09-05T08:34:58.000000Z',
      'product_id' => 345681,
      'updated_at' => '2024-09-05T08:35:02.000000Z',
      'user_email' =><EMAIL_ADDRESS>      'variant_id' => 509851,
      'customer_id' => 3636923,
      'product_name' => 'Individual',
      'variant_name' => 'Default',
      'order_item_id' => 3450766,
      'trial_ends_at' => NULL,
      'billing_anchor' => 5,
      'card_last_four' => '4242',
      'status_formatted' => 'Active',
      'first_subscription_item' =>
      array (
        'id' => 448394,
        'price_id' => 760160,
        'quantity' => 1,
        'created_at' => '2024-09-05T08:35:03.000000Z',
        'updated_at' => '2024-09-05T08:35:03.000000Z',
        'is_usage_based' => false,
        'subscription_id' => 577993,
      ),
    ),
    'relationships' =>
    array (
      'order' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/order',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/order',
        ),
      ),
      'store' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/store',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/store',
        ),
      ),
      'product' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/product',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/product',
        ),
      ),
      'variant' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/variant',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/variant',
        ),
      ),
      'customer' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/customer',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/customer',
        ),
      ),
      'order-item' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/order-item',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/order-item',
        ),
      ),
      'subscription-items' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/subscription-items',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/subscription-items',
        ),
      ),
      'subscription-invoices' =>
      array (
        'links' =>
        array (
          'self' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/relationships/subscription-invoices',
          'related' => 'https://api.lemonsqueezy.com/v1/subscriptions/577993/subscription-invoices',
        ),
      ),
    ),
  ),
  'meta' =>
  array (
    'test_mode' => true,
    'event_name' => 'subscription_created',
    'webhook_id' => '72ef449b-d684-43c8-8a8c-134b3e5e30a3',
    'custom_data' =>
    array (
      'billable_id' => 'bab4170e-7dd3-4369-b434-00c4ce4e30f7',
      'billable_type' => 'App\\Models\\User',
      'subscription_type' => 'default',
    ),
  ),
)

I really have no idea.. this all looks good. If the billable exists then the subscription should definitely have been created in the database alongside the customer record.

Exactly, which is what boggles my mind. I've spent over 6 hours looking for solutions but no luck so far. I've resorted to manually making DB rows via the LemonSqueezy models like
$order = Order::updateOrCreate(['identifier' => $attributes['identifier']], $orderData);

Its a lot of work but unless someone can come up with a possible alternative, that's my day.


remove caching allocator/vector and fix issues relating to inability to train large datasets

the caching device allocator caches device allocations in bins of different sizes, which can be reused for future allocations. however, this has regressed on xgboost's capability to train on large datasets
device memory cached by this allocator cannot be seen by other non caching allocators
as a consequence, types that use regular allocators (device_malloc_allocator and such) will attempt to carve out more device memory when needed, eventhough plenty may be available for use inside the caching allocators
bottom line: this kind of allocator choice can't be made in a piecemeal fashion

i have thus resorted to using a consistent allocator type across for now and fixed issues arising out of additional allocations introduced by #4554. in the process, the unit test failures have been fixed as well (it was hanging on tesla t4's earlier).
ideally, the core stock xgboost should use the regular device allocators, and use-cases that need sophisticated (de)allocation techniques should dynamically load device allocators via LD_PRELOAD or some dll injection mechanism on windows, quite similar to how one can replace the glibc allocator with jemalloc/tcmalloc/vespamalloc and its likes.
it is also possible to use a caching device allocator across entire xgboost; but first, its implications have to be well understood, including, but not limited to how the different allocation bins can be configured from within xgboost for different use-cases. from what i can see from the code, it uses (whose impact on performance is unknown at present):

a global mutex across all devices to retrieve and to cache allocations
it sweeps through pertinent bin to release all free blocks and retrying, when a request for device allocation can't be satisfied, which can be fairly expensive
it pads every device allocation request to a bin that geometrically progresses by the growth factor, thus entailing significant wastage (more for bigger device memory chunks)

my naive attempt to alias all device_vector types to a caching_device_vector failed as well (not investigated on this yet).
@RAMitchell @rongou - please review...

Probably shouldn't include rabit changes?

let me reopen another one. i do not know how those rabit related changes ended up here.


[onBlur] Breaking: do not emit value in onBlur

Fixes https://github.com/erikras/redux-form/issues/2768.
Some Complex fields cannot emit DOMevent with correct value of e.target.
Also, we couldn't identify a use-case where changing value on blur makes sense.
This PR cleans up blur action and removes value from the payload.  It also removes a bunch of tests. For asyncValidate it always emits with the last rendered value of the input field assuming that there was onChange preceding onBlur.
to: @erikras

Codecov Report

Merging #2791 into master will not change coverage.
The diff coverage is 100%.

@@          Coverage Diff           @@
##           master   #2791   +/-   ##
======================================
  Coverage     100%    100%
======================================
  Files          67      67
  Lines        1391    1383    -8
======================================
- Hits         1391    1383    -8

Impacted Files
Coverage Δ

src/reducer.js
100% <ø> (ø)
:arrow_up:

src/reduxForm.js
100% <100%> (ø)
:arrow_up:

src/actions.js
100% <100%> (ø)
:arrow_up:

src/ConnectedField.js
100% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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

PTAL @erikras

Closing for reasons explained here: https://github.com/erikras/redux-form/issues/2768#issuecomment-292770517


Missing instructions on how to compile

Hi there,
Here's my output:
~/abdecrypt $ go build .
go: cannot find main module, but found .git/config in /data/data/com.termux/files/home/abdecrypt
        to create a module there, run:
        go mod init
~/abdecrypt $ go mod init github.com/unkaktus/abdecrypt
go: creating new go.mod: module github.com/unkaktus/abdecrypt
go: to add module requirements and sums:
        go mod tidy
~/abdecrypt $ go mod tidy
go: finding module for package github.com/nogoegst/abdecrypt
go: finding module for package golang.org/x/crypto/pbkdf2
go: found golang.org/x/crypto/pbkdf2 in golang.org/x/crypto v0.27.0
go: found github.com/nogoegst/abdecrypt in github.com/nogoegst/abdecrypt v0.0.0-20180615210319-6bc60d0003de
~/abdecrypt $ go build .
~/abdecrypt $ ls
LICENSE  decompress.go  go.mod  header.go      masterkey.go
cmd      decrypt.go     go.sum  javastring.go  reader.go
~/abdecrypt $

Thanks you!

Hi, it is a very old tool I made, even before Go modules.
The tool is in ./cmd/abdecrypt, which you need to compile.


[Task]: Test case creation for Default Filters Table Widget

Description
This task is to assess the various test case scenarios for Default Filters
Is there an existing issue for this?

[X] I have searched the existing issues

SubTasks
No response

We have completed the test case document preparation for the default filters project. Please find below the relevant documents:

Test case document
Figma
PRD

NOTE:

The Flow column in the test case document, refers to the flow that are present in the figma document.


Static Web App's name can be same for two different Static Web Apps across resource groups and subscriptions

Static web apps can have the same name across resource group and subscription. The only restriction being there in the resource group i.e. Two azure static web apps resources present inside one resource group cannot have the same name. This is quite unique. I'm not sure if this is a feature or what but it's quite different from the azure web apps validation check where we are required to have unique web app name.

Yes, this passes our checks because the site is uniquely identifiable since it belongs to different resource groups. The difference between our service and web apps is that web apps uses the sitename to generate the default hostname for the website, so requires that every sitename be unique in order to generate unique hostnames. On the other hand, our default hostname is independent of the sitename since it follows the --.azurestaticapps.net format. Is it a problem to you specifically that you're allowed to create apps of the same name in different resource groups?

Hey @mkarmark, Thanks for updating me regarding it. I was curious to know if you had any plans of having unique names for the static web apps when it goes to GA. If the validation check is modified to have globally unique names for all the static web apps in the GA then it can be a reason of concerns for the existing static web apps which share the common name. I wasn't sure if it was a bug or functionality so created an issue here.

Hi @AshirwadSatapathi, there are no plans to utilize the resource name as the hostname. Creating a generated hostname was done purposefully and is not a bug. There are many resources in Azure that also follow this pattern. It is different from Web Apps so good to call out :)

Thanks @miwebst for the update. It was really helpful.


[v1 API Review] Remove the Unpacked status condition

The Unpacked status condition will be replaced by the Progressing condition implemented as part of #1292. Once it is implemented, we need to remove the Unpacked condition.
For more information, see the RFC

/assign

PR: https://github.com/operator-framework/operator-controller/pull/1309


Tock Studio Story builder V2

Implement a more intuitive story builder

story-builder-v2.pdf

story-builder-backup.zip


Getting an error when trying to approve token

Hi Team, I run "gateway approve-tokens uniswap_ethereum_mainnet WETH" to approve the token through docker env. of Hummingbot. But I am facing below error after run the above command. I have attached the screenshot.

Please help me. Thanks in advance for your support.

Hi @debanjanAqb good day,
As per error I would like to check whether I have a working node or ok internet connection. Another is we are missing out the details we need to investigate which is available on our bug report template. Please resubmit and make further look into it. Thank you


Add autogenerated files to the .gitignore

Files such as docs/rules.md are generated automatically on npm run compile so there is no need to keep them in the repository and track their changes.
I think all such files has to be removed from the repository and added to .gitignore
See related discussion in #373

The generated files are documentation for the user or devs. Thus removing it from git would cause problems with viewing this info.

@pjkaufman please elaborate. How does it create a problem for the devs if the file is automatically generated on npm run compile? For me it is similar as npm install that we need to call after we cloned the repo

The issue is not for the devs, but rather for non-devs that look at the Readme or the rule documentation on github instead of in the Obsidian app.


sunvox: Refactor, add myself as maintainer

Description of changes

Use autoPatchelfHook instead of manually patching Linux binaries
Support more platforms (ARM Linux, Darwin)
Patch more binaries (x86_64 & aarch64 has sunvox_opengl variant, other Linux platforms have others / even more)
Support JACK
Add myself as maintainer

Things done

Built on platform(s)

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

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

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

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

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

[x] Fits CONTRIBUTING.md.

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


Don't know where to run from and have found no answers. Also doesn't open.

For the Jar, where should I run it from for good results? Should I run it as a standalone .jar file, run it from somewhere inside LT, or run it from the LTSaveEd.zip folder?
I am asking because there are no clear answers from the description and README which just say to run it.
I'm also putting this as an issue because I don't know how else to ask.

J

Accidentally closed the issue, sorry. Also, it says that it cannot be opened when run as standalone. I also tested within LT and it said the same thing. I also tried running it in the terminal with both the instructed way and dragging into the terminal and it said "zsh: permission denied"
MacOS btw

You should only need the .jar file to run the save editor. Also make sure you have Java 14 or greater (you can check this by running java --version or using the full path to the java executable for Java 14+).
If the above does not work, you could try downloading the source code and compiling it manually (you will need to have JavaFx 16 or greater installed). Unfortunately, I have only been able to test the save editor on Windows and Linux.

I have been doing some research and checked privileges for the file. It turns out that I didn't have execute privileges for the jar. I gave myself these privileges and tried again but this time when run in terminal, it outputs "zsh: exec format error". I have been unable to find clear answers as to what this means. Also, what's the difference between JavaFx and java? I only have installed java.

JavaFx is the Java library I am using to build/control the GUI. As of Java 11, it is no longer bundled with Java, so you will need to download it separately if you would like to compile and run the source code.
The published .jar file for the save editor should already have JavaFx bundled in it for Windows, Mac, and Linux (I have tested this on Windows and Linux), so you should be able to run the .jar file without having to download JavaFx yourself.
Also how exactly are you trying to run the .jar file? When I tested in Linux (Ubuntu), I wasn't able to run the save editor with ./LTSaveEd.jar, but java -jar ./LTSaveEd.jar worked. If that doesn't work, you can try using the full path for Java14+ (e.g., something like /Library/Java/JavaVirtualMachines/jdk14.0.2.jdk/Contents/Home/bin/java -jar ./LTSaveEd.jar). I am not too sure by how much Linux differs from MacOS.


Fix Cross-Site Scripting

Fixed the RecordType and Reciprocal Relationship Cross-Site Scripting.
Critical Changes
Changes
Issues Closed
New Metadata
Deleted Metadata

@kofijohnson will you be adding more xss fixes to this PR?

No @njjc! I've checked the methods in the main controller STG_PanelHealthCheck_CTRL and it does not have any XSS fix. However the related controller methods like STG_PanelADDRVerification_CTRL.verifyAddressVerificationService, STG_PanelPaymentMapping_CTRL.verifyPaymentMappings, etc. may have some XSS issue, but it will need more investigations.
So my plan is we fix the current ticket issues first, then create a new one to do the investigation/fixes in other controllers.


Update Pyth integration with the new example

This PR adds the new example repository for Pyth integration with reading Pyth Solana price feeds natively and also updates the price feeds link.

@sukanyaparashar please review the PR with pyth's example changes and then let's update the code in this docs example.

After reviewing the content of the GitHub pull request, I noticed a few inconsistencies:

The title mentions "Update Pyth integration with the new example", but the file changes seem to be replacing the old example with a new one, rather than updating an existing integration.
The first few lines under the "TL;DR" section provide contradictory information. One line says "First call pyth.updatePriceFeeds", and the next line says "Next call pyth.getPrice", which implies that calling getPrice should come before updatePriceFeeds.
The "Boilerplate contract" section is empty, despite the heading suggesting that it should contain some boilerplate contract code or information.
The section "How to integrate with the Pyth contract" is duplicated, and the second instance is empty.
The section "Considerations for using Pyth on Neon EVM" mentions that the example is based on a specific repository, but the link to the repository is missing.
The "Step 2: Set Up MetaMask Accounts" section contains an image with a broken path (mm_p_key is not a valid image path).
The "What next?" section is immediately followed by another "Step 3: Compile Contracts" section, which seems out of place.
The "How to Deploy to Neon EVM" section is commented out, which is inconsistent with the surrounding content.

These inconsistencies might cause confusion for developers trying to follow the instructions or understand the integration process. It would be beneficial to review and address these issues to ensure a clear and consistent documentation.
If any of these inconsistencies should be the way they currently are than feel free to provide the relevant comment and I will merge the PR in that case.

After reviewing the content of the GitHub pull request, I noticed a few inconsistencies:

The title mentions "Update Pyth integration with the new example", but the file changes seem to be replacing the old example with a new one, rather than updating an existing integration.
The first few lines under the "TL;DR" section provide contradictory information. One line says "First call pyth.updatePriceFeeds", and the next line says "Next call pyth.getPrice", which implies that calling getPrice should come before updatePriceFeeds.
The "Boilerplate contract" section is empty, despite the heading suggesting that it should contain some boilerplate contract code or information.
The section "How to integrate with the Pyth contract" is duplicated, and the second instance is empty.
The section "Considerations for using Pyth on Neon EVM" mentions that the example is based on a specific repository, but the link to the repository is missing.
The "Step 2: Set Up MetaMask Accounts" section contains an image with a broken path (mm_p_key is not a valid image path).
The "What next?" section is immediately followed by another "Step 3: Compile Contracts" section, which seems out of place.
The "How to Deploy to Neon EVM" section is commented out, which is inconsistent with the surrounding content.

These inconsistencies might cause confusion for developers trying to follow the instructions or understand the integration process. It would be beneficial to review and address these issues to ensure a clear and consistent documentation.
If any of these inconsistencies should be the way they currently are than feel free to provide the relevant comment and I will merge the PR in that case.

@Vedad84 Thanks for the comments. This page has been completely refactored because the way this page was written for Pyth price feeds isn't required now. Previously the Pyth price feeds were used from Pyth network as pull service. But now we have found out that we can natively read Solana price feeds which is a push service and the users doesn't have to update the price before reading it from the Pyth network.

Yes, actually we are replacing the whole example with a new one for reading Pyth price feeds. I have updated the heading of this PR to "Replacing the Pyth integration example with a new one".

For all the next points you have mentioned, the inconsistencies are meant to be like this because this is a complete different way of Pyth integration. If you want to check all the details and the links that are mentioned in this document, then you can locally run it in your machine with the following steps and verify if everything works as expected.

Clone the main repository - git clone https://github.com/neonlabsorg/neon-evm.docs.git
Install the dependencies - yarn install (You need to have yarn installed on your machine)
Checkout to this PR - gh pr checkout 143
Start the local instance - yarn start

This will run a local instance of the website on port 3000 and you would be able to verify the whole PR.
Let me know if you have any other queries or need any help to run the local instance.


Implement non-function type alias support in language/co19 tests

This issue tracks support of the non-function type alias feature.  See the enclosing meta-issue for details.
cc @franklinyow @eernstg @mit-mit

The CFE implementation was considered complete as of https://dart-review.googlesource.com/175642.

@sgrekhov, @iarkh, what is the current status?

@eernstg we have non-function type aliases tests in co19. We simply need to enable these tests in .status files. Do you want me to do it now?

@sgrekhov, yes please!

https://dart-review.googlesource.com/c/sdk/+/185082

I'll make sure that we have language tests for cyclicity.


Port 25 usage in VNET Integration

Could the document inform the users of regional vnet integration that Port 25 is not available.

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

ID: a7a98803-1438-b1b5-f543-7dd88bc4294e
Version Independent ID: 37ff1d0f-ed8e-5e4d-1f4c-1b9f6cffb938
Content: Integrate app with Azure Virtual Network - Azure App Service
Content Source: articles/app-service/web-sites-integrate-with-vnet.md
Service: app-service
GitHub Login: @ccompy
Microsoft Alias: ccompy

@nelroosevelt Thank you for the feedback. We saw your email discussion with the PG. As a result, we will update the doc tomorrow once the Microsoft Ignite doc update is lifted.

@nelroosevelt We have gone ahead and merged a PR. The changes should be public within 24 hours.
We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


Add KSWIN as a concept drift detector

Changes proposed in this pull request:

Added new KSWIN concept drift detector based on Raab et al. (2020) with documentation
Added tests for KSWIN concept drift detector

Christoph Raab, Moritz Heusinger, Frank-Michael Schleif,
Reactive Soft Prototype Computing for Concept Drift Streams,
Neurocomputing, 2020

Checklist
Implementation

[X] Implementation is correct (it performs its intended function).
[X] Code complies with PEP-8 and is consistent with the framework.
[X] Code is properly documented.
[X] PR description covers ALL the changes performed.
[X] Files changed (update, add, delete) are in the PR's scope (no extra files are included).

Tests

[X] New functionality is tested.
[X] Tests are created for the new functionality or existing tests are updated accordingly.

[X] CI/CD pipelines run with no errors.
[X] Test Coverage is maintained (coverage may drop by no more than 0.2%).

Thanks for submitting this PR @ChristophRaab
Is this implementation the same as the one used for the paper?

Yes, the KSWIN detector is proposed within the publication. Feel free to look it up here: https://doi.org/10.1016/j.neucom.2019.11.111

Sorry, my question was not very clear. I meant to ask if the results reported in the paper were obtained with this implementation. This is to asses the correctness of the implementation apart from the functional tests already included in the PR.

No problem. Yes, with this implementation the results in the paper are obtained.
It is the same as in the repository of the publication:
https://github.com/ChristophRaab/rrslvq/blob/master/kswin.py

Sorry if i don't get it, but is there anything left for me to to?

Sorry if i don't get it, but is there anything left for me to do?

@ChristophRaab sorry for the delay, I will start the review and get back with some comments.

See 27cf7f8 for the change to the pull request.
The following table shows the performance of drift detectors on the concept drift streams.