Initial Research for Supporting GraphQL

Initial Task to discuss the development for GraphQL Support of Apache AGE. Please comment here to be assigned to the project.
https://spec.graphql.org/October2021/

to be assigned to the project

to be assigned to the project.

to be assigned to the project.

Looking forward to being a part of this project!

Welcome everyone so far, I have included a link to the most recent GraphQL specification that we will be attempting to implement. Please review this and leave any comments/questions issues either about that or anything else here.

Is there any specific timeline we should finish reviewing GraphQL specifications?

There is not a specific timeline. To be clear, we are not looking for you to memorize the entire standard. What we are expecting from you guys is, to look over the specification and have a general idea of how GraphQL works. Don't just look at this url. Also checkout the whole site as well: https://graphql.org/
What we need to do here is to create a dialog about how this can be implemented. There are several ideas the AGE team has on how to do it, but we want to know what you think as well. It might be useful to checkout an implementation or two, found here: https://graphql.org/code/

Hey Josh, I have a base understanding of GraphQL on the user-end side of things, at least at a high level. I'm wondering if you have some resources to better understand AGE to better grasp how this may differ from applying to a PostgreSQL or MySQL DB. This is all very new and I want to be time considerate and focus on the most important ideas before I dive deeper.

I took a look at the slides again that I saw you uploaded to the intro to AGE project. I’d love a 15min zoom call at any time just to clarify my understanding.
The big take away was there are three unique types to AGE: vertices, edges and paths, with the first two being JSON data types and the later being an array/list of alternates of the former two. They are stored in AGE labels.
DB complexity is something I am still tackling, so the purpose of these data types is over my head atm (something that zoom call mentioned above might clarify 😉).
Nonetheless, we are looking to integrate GraphQL on querying and modifying these data types, that I believe are only accessed through the cypress command. And GraphQL needs an initial schema to understand the relationships of data and how to find the eventual user’s query. The issue if I’m understanding correctly, GraphQL will interpret the cypress command as normal function calls as does PostgreSQL unless we intercept it to run the Cypress command which will provide AGE’s tables(labels) and data(vertices/edges/paths). Am I close to comprehending the problem?
Still digesting what the VLE is for aswell (did I mention I’m new?)

We are planning a webinar for a technical explanation as to how AGE works. But there are no dates set. I suppose we could setup a meeting before that if you have a list of questions. However, I will also try to answer your questions here.

As you mentioned, there are three unique data types are used to represent entities in a graph, and there is a second aspect for how it is stored in Postgres. The second part of that presentation.
For the datatypes, the openCypher specification works in such a way that the existing datatypes in Postgres could not suit our needs. So we created Agtype, which is based on JSONB (one of postgres's two implementations of the Json standard).
 The issue if I’m understanding correctly is, GraphQL will interpret the cypress command like postgreSQL, as normal function calls unless we intercept it to run the Cypress command which will provide AGE’s tables(labels) and data(vertices/edges/paths). Is that correct?
GraphQL is a query language, like cypher. We have already implemented cypher and GraphQL should not handle a cypher command.
Personally, I see two ways to do this:

Create a function like cypher and create a second query language in AGE. The reason this works the way it does is the third section in the webinar.
Create an API that accepts GraphQL commands and converts them to Cypher Commands, and is an intermediate between a client and the server.
There may be several other ways to do it as well.

Hello Josh and everyone!
In terms of your two ways to implement the GraphQL query language, I think the first way is better because we won't need an intermediate language to run the GraphQL Language.
Most of the time, I expect the query to run in the hug data.
Also, if there is a bug in the Cypher, it could make the query fail to run or give an unexpected result. This makes the first method much safer because it runs as a separate component and is much easier to troubleshoot.
Implementing GraphQL along with Cypher also makes an advantage of using AGE because it allows for more than one query language to be used with Graph DB.
This is my personal opinion!

https://github.com/tarekbouzayani

to be assigned to the project

to be assigned to the project

to be assigned to the GraphQL project

To be assigned to this project.

Please assign this to me as well.

Hello everyone who was assigned today. Please follow the instructions laid out above and try to catch up to where the conversation is so far. We be moving forward with more discussions shortly, but for now try to follow what has been discussed so far, ask any questions you have or give your input to the discussion.

Hello, looking forward to be a part of the project.

to be assigned this project.

Hi, I have a question.
is there any plan for the methodology that will be used to implement GraphQL?

@malzubairi Do you mean software development methodology such as Agile?

Hello everyone,
Sorry for the sudden change, but would you be able to join our discord server? After some discussion we determined that a GitHub issue isn't the best place for discussions and we needed a place for the team to hold conversations.
https://discord.gg/s6dpF6qZ

Yes, @JoshInnis

Also, please comment here your preferred method of communication, discord or slack. if you think another method is better, please provide it
https://www.reddit.com/r/apacheage/comments/xlgueu/which_is_better_slack_or_discord_for_project/

Looking forward to being a part of this project!

This is my GitHub account: "https://github.com/aligbakhtiyar"

Looking to contribute in the development for GraphQL Support of Apache AGE project!

Glad to be here !!!, ready to contribute to this project .

to be assigned to this projects, thanks.

Also, it appears I have reached the limit that Github allows to assign to a single issue. Please join the Discord

I look forward to being involved in this project!

Interested to be a part of this project.

@JoshInnis  when I try opening the discord link it tells me "the invitation may have been expired"

@JoshInnis  when I try opening the discord link it tells me "the invitation may have been expired"

@JoshInnis  when I try opening the discord link it tells me "the invitation may have been expired"

@JoshInnis  when I try opening the discord link it tells me "the invitation may have been expired"

@JoshInnis  when I try opening the discord link it tells me "the invitation may have been expired"

@JoshInnis Discord Invitation link is expired. Could you please re-update it? Thanks for your time and consideration

https://discord.gg/VD4drHrh

To be assigned to the project.

For the purpose of general utility and attracting users to AGE, look at what users will want to do with GraphQL. The majority will be building APIs choosing it as the favored option over a REST on account of all of GraphQL's benefits.
That means they won't just want graphQL. They'll need:

Authentication and authorization
Audit / logging
Custom business rules.

All of the above are typically provided by a middleware application layer. Simply have AGE expose a graphQL endpoint would deviate from this. Plus how would you specify which schema to use for which use-case(s)?
I strongly encourage for the graphQL layer to be implemented as part of the ecosystem products, outside of the main database. Doing this allows growing a bigger community around AGE with focused skillsets (same as we do with viewer) but this is not the main reason.
If we look at following Neo4j's example, they initially exposed a graphQL endpoint, then moved to having an ecosystem library, that allows integration into other middleware components - clients can use their preferred security, audit, etc.
In my view a good graphQL solution:

Parses the schema
Generate the custom CRUD automatically
Allow for providing custom queries and mutations for certain use-cases where the user can provide their own hand-tuned CYPHER.

In the above openCYPHER is king because :

It is the defacto query language in the graphDB community. More is not always better. I would focus efforts on strongly adhering to the standard - giving uses confidence to join from other parts of the graphDB ecosystem.
https://maxdemarzi.com/2020/05/25/declarative-query-languages-are-the-iraq-war-of-computer-science/ <-- If we look at Max's article, we can see that the reality is, on a complex mission critical app, there will be times where custom tuning of a qery will be necessary.

Looking forward to join the Apache Age project, thks

To be assigned to the project.

Are we trying something similar to this? Or did I understood it wrong?
https://neo4j.com/product/graphql-library/?utm_campaign=GraphQL+3.0.0&utm_content=UI&utm_medium=social&utm_source=LinkedIn&utm_tag=&utm_term=Image
https://neo4j.com/docs/graphql-manual/current/

i think this post is quite good representation post for why replacing graphQL and graph database.
'https://medium.com/grandstack/five-common-graphql-problems-and-how-neo4j-graphql-aims-to-solve-them-e9a8999c8d43'


Write some tests ✔

Summary
write some tests to ensure that changes don't break the lib and there aren't unforeseen issues when using the lib.
Todos

[x] Create tests for the action functions
[ ] Create tests for the init function
[ ] Create tests for the queue code

I've decided to remove the queue code for now in favour of a simple async/await pattern. For example, let's say you want to add items to cart, and then return the new cart value.
let cart = new Smolcart();

const addToCart(items) = () => {
  await cart.addItems(items); // adds items to cart
  return cart.getCart(); // gets newly updated cart
}

// currentCart will now equal the new cart value
const currentCart = await addToCart([ /* ...items objects  */ ])


Added K3s to installation instructions

This PR adds K3s to the installation instructions for the current develop branch.
I also simplified the quickstart guide to avoid unnecessary redundancy. Quickstart now focuses on GKE and K3s as the primary options.
Preview quickstart: https://deploy-preview-559--keptn.netlify.app/docs/develop/quickstart/
Preview Install: https://deploy-preview-559--keptn.netlify.app/docs/develop/operate/install/

May I ask you to add the "K8s cluster setup" part also to the quickstart: https://github.com/keptn/keptn.github.io/blob/master/content/docs/develop/quickstart/index.md
+add K3s to the note: "Note: For a Minikube setup, use option --platform=kubernetes"

I've updated my commit.


Added shipper test that validates if shipper supports tsdb snapshots.

Signed-off-by: Bartek Plotka<EMAIL_ADDRESS>

Aside from other comments looks good 👍


Implement $XDG_STATE_HOME in xdg_directories

Use case
There is a single base directory relative to which user-specific state data should be written. This directory is defined by the environment variable $XDG_STATE_HOME.
Proposal
Add a stateHome directory getter to the xdg_directories package.

Adding source here: XDG_STATE_HOME is defined on https://wiki.archlinux.org/title/XDG_Base_Directory:
Where user-specific state files should be written (analogous to /var/lib).
Should default to $HOME/.local/state.

This is not something the Flutter team is likely to directly implement, as we don't currently have a use case for it in path_provider, but I'd be happy to review a PR adding it.


ReactiveUI v7.0 and Xamarin.iOS failed to run on iOS device.

Do you want to request a feature or report a bug?
bug
What is the current behavior?
I create a simple test project with share code and iOS UI. I try to use reactiveUI (v7) command to test binding.
It can run on Simulator. But whenever I compile and run on real iOS device. It crashes.
If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem
You can get the source code here: TestReactiveUI.zip
What is the expected behavior?
Error log is below:

System.ExecutionEngineException: Attempting to JIT compile method '(wrapper delegate-invoke) System.Func3<System.Reactive.Concurrency.IScheduler, System.Reactive.Concurrency.Scheduler/Pair2<System.Reactive.Linq.ObservableImpl.ToObservable1/_/State<bool>, System.Action2<System.Reactive.Linq.ObservableImpl.ToObservable1/_/State<bool>, System.Action1<System.Reactive.Linq.ObservableImpl.ToObservable1/_/State<bool>>>>, System.IDisposable>:invoke_TResult_T1_T2 (System.Reactive.Concurrency.IScheduler,System.Reactive.Concurrency.Scheduler/Pair2<System.Reactive.Linq.ObservableImpl.ToObservable1/_/State<bool>, System.Action2<System.Reactive.Linq.ObservableImpl.ToObservable1/_/State<bool>, System.Action1<System.Reactive.Linq.ObservableImpl.ToObservable`1/_/State>>>)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.

at (wrapper unknown) System.Object:gsharedvt_out ()
at System.Reactive.Concurrency.ImmediateScheduler.Schedule[TState] (TState state, System.Func3[T1,T2,TResult] action) [0x00014] in <ab76b1b1678341d69f8fc2c1f68d0bf5>:0   at at (wrapper unknown) System.Object:gsharedvt_in ()   at System.Reactive.Concurrency.Scheduler.Schedule[TState] (System.Reactive.Concurrency.IScheduler scheduler, TState state, System.Action2[T1,T2] action) [0x00042] in :0
at at (wrapper unknown) System.Object:gsharedvt_out ()
at System.Reactive.Linq.ObservableImpl.ToObservable1+_[TSource].Run () [0x0007f] in <d0067ed104ac455987b6feb85f80156b>:0   at at (wrapper unknown) System.Object:gsharedvt_in ()   at at (wrapper unknown) System.Object:gsharedvt_out ()   at System.Reactive.Linq.ObservableImpl.ToObservable1[TSource].Run (System.IObserver1[T] observer, System.IDisposable cancel, System.Action1[T] setSink) [0x00010] in :0
at System.Reactive.Producer1[TSource].SubscribeRaw (System.IObserver1[T] observer, System.Boolean enableSafeguard) [0x00083] in :0
at at (wrapper unknown) System.Object:gsharedvt_out ()
at System.ObservableExtensions.SubscribeSafe[T] (System.IObservable1[T] source, System.IObserver1[T] observer) [0x00036] in :0
at at (wrapper unknown) System.Object:gsharedvt_in ()
at at (wrapper unknown) System.Object:gsharedvt_out ()
at System.Reactive.TailRecursiveSink`1[TSource].MoveNext () [0x00197] in :0
at System.Reactive.Concurrency.AsyncLock.Wait (System.Action action) [0x000a2] in :0

What is the motivation / use case for changing the behavior?
The code should work on real iOS device.
Which versions of ReactiveUI, and which platform / OS are affected by this issue? Did this work in previous versions of ReativeUI? Please also test with the latest stable and snapshot (http://docs.reactiveui.net/en/contributing/snapshot/index.html) versions.
Xamarin Studio Community
Version 6.1.2 (build 44)
MacOS - Sierra 10.12.1
Test device: iPad iOS 10.1.1
Other information (e.g. stacktraces, related issues, suggestions how to fix)
I read and tried all suggestion on the web related to "Attempting to JIT compile method". All of them are failed.
If anyone has any suggestion please share with me. Thanks you a lot. I love this framework :)

@phamhieu thanks for getting in touch.
I've just tried your project on my iPad and it worked as expected.
My setup is different though as I use VS on Windows (connected to a Mac mini).
What Xamarin channel are you on? Latest stable?

Yes I'm on stable channel. Below is my Xamarin version in detail.
FYI: I also try to use VS for Mac Preview 2 to build the project. It still fails on real device.
Thanks so much for your info. I will try to setup VS on Windows and give it a try.
Xamarin Studio Community
Version 6.1.2 (build 44)
Installation UUID: 0d020193-a554-4362-9e93-5708a5135f4e
Runtime:
Mono 4.8.0 (mono-4.8.0-branch/f5fbc32) (64-bit)
GTK+ 2.24.23 (Raleigh theme)
Package version: 408000344
NuGet
Version: <IP_ADDRESS>
Xamarin.Profiler
Not Installed
Apple Developer Tools
Xcode 8.1 (11544)
Build 8B62
Xamarin.Mac
Version: <IP_ADDRESS>0 (Xamarin Studio Community)
Xamarin.iOS
Version: <IP_ADDRESS> (Xamarin Studio Community)
Hash: 62816dd
Branch: master
Build date: 2016-11-15 06:24:02-0500

I'm having the same issue, still trying to figure out what is causing this.
Have you solved this @phamhieu ?

After updating my Xcode to 8.2 and Xamarin as the log bellow shows, it's all working now.
Two different projects, both had the same problem, both solved now.
`Xamarin Studio Community
Version 6.1.2 (build 44)
Installation UUID: 6d7f9291-aad8-4a9d-933b-26af792e3ad4
Runtime:
Mono 4.6.2 (mono-4.6.0-branch/08fd525) (64-bit)
GTK+ 2.24.23 (Raleigh theme)
Package version: 406020007

NuGet
Version: <IP_ADDRESS>
Xamarin.Profiler
Version: 1.0.2
Location: /Applications/Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler
Xamarin.Android
Version: <IP_ADDRESS> (Xamarin Studio Community)
Android SDK: /Users/giusepecasagrande/Library/Developer/Xamarin/android-sdk-macosx
Supported Android versions:
4.1 (API level 16)
4.4 (API level 19)
5.0 (API level 21)
6.0 (API level 23)
7.0 (API level 24)
SDK Tools Version: 25.2.2
SDK Platform Tools Version: 24.0.3
SDK Build Tools Version: 24.0.2
Java SDK: /usr
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Android Designer EPL code available here:
https://github.com/xamarin/AndroidDesigner.EPL
Xamarin Android Player
Not Installed
Apple Developer Tools
Xcode 8.2 (11766)
Build 8C38
Xamarin.Mac
Version: <IP_ADDRESS> (Xamarin Studio Community)
Xamarin.iOS
Version: <IP_ADDRESS> (Xamarin Studio Community)
Hash: e02d272
Branch: xcode8.2
Build date: 2016-12-12 23:00:41-0500
Xamarin Inspector
Version: <IP_ADDRESS>
Hash: 1f3067d
Branch: master
Build date: 11/15/2016 7:13:59 PM
Build Information
Release ID: 601020044
Git revision: 0ccfcd52b95305ebd5b7eca0d88c1017035910ae
Build date: 2016-10-28 15:12:43-04
Xamarin addins: a39a869d8a78d87bdc6775f696c13a4cc9024501
Build lane: monodevelop-lion-cycle8
Operating System
Mac OS X 10.12.2
Darwin JARVIS 16.3.0 Darwin Kernel Version 16.3.0
Thu Nov 17 20:23:58 PST 2016
root:xnu-3789.31.2~1/RELEASE_X86_64 x86_64
Enabled user installed addins
MFractor 2.06.00
NuGet Package Management Extensions 0.11.1
Xamarin Inspector <IP_ADDRESS>
XamlStyler 1.0.3
`

@GiusepeCasagrande Thanks for your advice. Confirm that updating Xcode to 8.2 and Xamarin Studio fixes the build problem for iOS.
=== Xamarin Studio Community ===
Version 6.1.2 (build 44)
Installation UUID: 0d020193-a554-4362-9e93-5708a5135f4e
Runtime:
Mono 4.8.0 (mono-4.8.0-branch/aca1492) (64-bit)
GTK+ 2.24.23 (Raleigh theme)
Package version: 408000382
=== NuGet ===
Version: <IP_ADDRESS>
=== Xamarin.Profiler ===
Not Installed
=== Apple Developer Tools ===
Xcode 8.2.1 (11766.1)
Build 8C1002
=== Xamarin.Mac ===
Version: <IP_ADDRESS> (Xamarin Studio Community)
=== Xamarin.iOS ===
Version: <IP_ADDRESS> (Xamarin Studio Community)
Hash: e02d272
Branch: xcode8.2
Build date: 2016-12-12 23:00:41-0500
=== Xamarin.Android ===
Version: <IP_ADDRESS> (Xamarin Studio Community)
Android SDK: /Users/phamhieu/Library/Developer/Xamarin/android-sdk-macosx
Supported Android versions:
5.0 (API level 21)
6.0 (API level 23)
SDK Tools Version: 25.2.2
SDK Platform Tools Version: 25.0.0
SDK Build Tools Version: 25.0.0
Java SDK: /usr
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Android Designer EPL code available here:
https://github.com/xamarin/AndroidDesigner.EPL
=== Xamarin Android Player ===
Not Installed
=== Xamarin Inspector ===
Version: <IP_ADDRESS>
Hash: 1f3067d
Branch: master
Build date: 11/16/2016 5:13:59 AM
=== Build Information ===
Release ID: 601020044
Git revision: 0ccfcd52b95305ebd5b7eca0d88c1017035910ae
Build date: 2016-10-28 15:12:43-04
Xamarin addins: a39a869d8a78d87bdc6775f696c13a4cc9024501
Build lane: monodevelop-lion-cycle8
=== Operating System ===
Mac OS X 10.12.2
Darwin Phams-MacBook-Pro.local 16.3.0 Darwin Kernel Version 16.3.0
Thu Nov 17 20:23:58 PST 2016
root:xnu-3789.31.2~1/RELEASE_X86_64 x86_64
=== Enabled user installed addins ===
EMDK for Xamarin <IP_ADDRESS>
Xamarin Inspector <IP_ADDRESS>


ASPxSpreadsheet tests're fixed in Chrome and IE

/cc @AlexanderMoskovkin @AndreyBelym
need some change in testcafe-hammerhead

can we add a functional test for this here?

ok

For IE we need to wait for https://github.com/DevExpress/testcafe-hammerhead/pull/821

@testcafe-build-bot /retest

@testcafe-build-bot \retest

Unstable test which will be fixed in https://github.com/DevExpress/testcafe/pull/842

@testcafe-build-bot \retest

@testcafe-build-bot \retest

@testcafe-build-bot \retest

@testcafe-build-bot \retest

FPR @AndreyBelym

@VasilyStrelyaev please check test name


bots-guide.md: Describe Zulip Botserver setup with supervisord.

Fixes python-zulip-api #7

I merged a version of the first commit that was restructured a bit to have the description of what the botserver is come at the beginning.
For the second commit, I think we want the description to not require that the user be familiar with "supervisord".  So the instructions should probably include e.g. apt-get install supervisord and the suggestion to put the code in /etc/supervisor/conf.d/zulip-botserver.conf.  Also, we might want the zulip_botserver package to ship a file you can just copy into place (though I like having the example config in the docs, so that would be in addition).  Can you work on a revised version?

@timabbott udpated. The revised version contains a file link to the (non-existent yet) config file. https://github.com/zulip/python-zulip-api/pull/100 adds that config file.

Building failing because of casper flakes?

No, failing because the file it links to doesn't exist yet?  Merged, with e996579045df5bb319a401d276913873d863eb5d added on top.  Thanks @derAnfaenger!


fix cam in tensorboard

Hi @kaylode, the script to write an image to tensorboad in trainer.py  (image below):

passes a matplotlib.figure, not a numpy.ndarray. I saw an error so i tested and changed it to:

oooh nice thank you very much :>


replace some eltype with genetic typing, use isone and iszero for typ…

replace some eltype() usage with generic types
use iszero for if n == 0 and isone for if n == 1 for more type stable code
remove multiline string in error() calls

@Kevin-Mattheus-Moerman - Sorry for flooding, it may have much time to review all the things.


docs - add component READMEs

Description
each component README has

a link to the top level README
installation steps with npm
sample jsx showing the usage of the component

Motivation and context
the current README files were empty and need something in them so that people can consume our components
How has this been tested?
i created a react app and pulled in all the components and tested that they showed up in the browser.
Types of changes

New feature (non-breaking change which adds functionality)

Checklist

[x] Renders and functions properly in all supported browsers
[x] Automated tests written and passing [n/a]
[x] Accessibility and inclusivity considered
[x] Rendering performance (initial load time & 60fps) and perceived performance considered [n/a]
[x] Documentation created or updated

How does this PR make you feel?

i wish i had a way to template these READMEs...

We want to keep the Archetype readme as it will serve as the template for starting new components in the future.


stream_topic_history: Update history to only store acked message ids.

Commit 1: Extract waiting_for_ack and waiting_for_id into separate echo_state.ts module.
Commit 2: Add message to stream_topic_history only if it is acked, according to the proposal in https://github.com/zulip/zulip/pull/31167#discussion_r1699112981

CZO thread

Self-review checklist

[ ] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[ ] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[ ] Each commit is a coherent idea.
[ ] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[ ] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[ ] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

I ended up rewriting https://github.com/zulip/zulip/pull/31167#discussion_r1699112981 with a proposal that I think presents a cleaner way to fix this that should also simplify migrating echo.js to TypeScript; @LaPulgaaa @afeefuddin FYI.

@zulipbot add "buddy review"

@LaPulgaaa would you like to have a look at this, since you seem to be more experienced around these?

@roanster007 looks nice modulo some small comment on types :)

@zulipbot remove "buddy review"
@zulipbot add "mentor review"

@prakhar1144 could you have a look at it

We're using the term "stream" in variable names, let's update the PR to use "channel" instead. Looks good to me otherwise.

We're using the term "stream" in variable names, let's update the PR to use "channel" instead. Looks good to me otherwise.

Updated!

I merged the first commit as e104fed6ef36e2afde85735f96942ee472f700bb, since that looked good and is the main part that might merge conflict with other work.

I redid the comments and variables in the second commit message, including adding a new TODO comment that I think we might need to resolve before we can make much use of this refactor. I think it's worth your paying some attention to the naming changes, since they reflect policies:

No msg abbreviations, part of our general no-abbreviations policy.
Import entire modules, not individual functions; this really helps git grep foo.bar to find how something is used.
Trying to consistently use local_ in names related to local echo.

diff --git a/web/src/echo_state.ts b/web/src/echo_state.ts
index f13864e278..83c49b8971 100644
--- a/web/src/echo_state.ts
+++ b/web/src/echo_state.ts
@@ -34,8 +34,8 @@ export function _patch_waiting_for_ack(data: Map<string, Message>): void {
     waiting_for_ack = data;
 }

-export function get_max_msg_id_in_topics_waiting_for_ack(channel_id: number): Map<string, number> {
-    const max_message_id_in_topic = new Map<string, number>();
+export function get_waiting_for_ack_local_ids_by_topic(channel_id: number): Map<string, number> {
+    const max_message_id_by_topic = new Map<string, number>();

     const channel_messages_waiting_for_ack = [...waiting_for_ack.values()].filter(
         (message) => message.type === "stream" && message.stream_id === channel_id,
@@ -44,11 +44,13 @@ export function get_max_msg_id_in_topics_waiting_for_ack(channel_id: number): Ma
     for (const message of channel_messages_waiting_for_ack) {
         assert(message.type === "stream");
         const topic = message.topic;
-        const existing_id = max_message_id_in_topic.get(topic);
+        const existing_id = max_message_id_by_topic.get(topic);

+        // Here we're accessing message.id === float(message.local_id),
+        // since these are all local message IDs.
         if (existing_id === undefined || message.id > existing_id) {
-            max_message_id_in_topic.set(topic, message.id);
+            max_message_id_by_topic.set(topic, message.id);
         }
     }
-    return max_message_id_in_topic;
+    return max_message_id_by_topic;
 }
diff --git a/web/src/message_helper.ts b/web/src/message_helper.ts
index 944e335bf9..ca11347306 100644
--- a/web/src/message_helper.ts
+++ b/web/src/message_helper.ts
@@ -62,8 +62,9 @@ export function process_new_message(raw_message: RawMessage, deliver_locally = f
         }
         assert(topic !== undefined);

-        // We try add messages to stream topic history only if they have
-        // a non float id (acknowledged by server).
+        // We add fully delivered messages to stream_topic_history,
+        // being careful to not include locally echoed messages, which
+        // don't have permanent IDs and don't belong in that structure.
         if (!deliver_locally) {
             stream_topic_history.add_message({
                 stream_id: message_with_booleans.stream_id,
diff --git a/web/src/stream_topic_history.ts b/web/src/stream_topic_history.ts
index 1b34a7e8af..436160cfc1 100644
--- a/web/src/stream_topic_history.ts
+++ b/web/src/stream_topic_history.ts
@@ -1,7 +1,7 @@
 import assert from "minimalistic-assert";

 import {all_messages_data} from "./all_messages_data";
-import {get_max_msg_id_in_topics_waiting_for_ack} from "./echo_state";
+import * as echo_state from "./echo_state";
 import {FoldDict} from "./fold_dict";
 import * as message_util from "./message_util";
 import * as sub_store from "./sub_store";
@@ -230,44 +230,42 @@ export class PerStreamHistory {
     }

     get_recent_topic_names(): string[] {
+        // Combines several data sources to produce a complete picture
+        // of topics the client knows about.
+        //
+        // This data source is this module's own data structures.
         const my_recents = [...this.topics.values()];
-
-        /* Add topics whose messages are not yet acknowledged, hence
-         * not present in our stream_topic_history cache. */
-        const unacked_topics = [
-            ...get_max_msg_id_in_topics_waiting_for_ack(this.stream_id).entries(),
-        ].map(([topic, message_id]) => ({pretty_name: topic, message_id}));
-
-        const unacked_topic_names = new Set<string>(
-            unacked_topics.map((message_topic) => message_topic.pretty_name),
-        );
-
-        /* Add any older topics with unreads that may not be present
-         * in our local cache. */
+        // This data source is older topics that we know exist because
+        // we have unread messages in the topic, even if we don't have
+        // any messages from the topic in our local cache.
         const missing_topics = unread.get_missing_topics({
             stream_id: this.stream_id,
             topic_dict: this.topics,
         });

-        /* We try to prioritize local ids of unacked messages over
-         * already acked ones in recents. Hence, we first sort the
-         * topics with no unacked messages, and then add all the
-         * topics with unacked messages before them. */
-        let recents = [...my_recents, ...missing_topics].filter(
-            (message_topic) => !unacked_topic_names.has(message_topic.pretty_name),
+        // This data source is locally echoed messages, which should
+        // are treated as newer than all delivered messages.
+        const local_echo_topics = [
+            ...echo_state.get_waiting_for_ack_local_ids_by_topic(this.stream_id).entries(),
+        ].map(([topic, local_id]) => ({pretty_name: topic, message_id: local_id}));
+        const local_echo_set = new Set<string>(
+            local_echo_topics.map((message_topic) => message_topic.pretty_name.toLowerCase()),
         );

-        recents.sort((a, b) => b.message_id - a.message_id);
-        recents = [...unacked_topics, ...recents];
-
-        const names = recents.map((obj) => obj.pretty_name);
-
-        return names;
+        // We first sort the topics without locally echoed messages,
+        // and then prepend topics with locally echoed messages.
+        const server_topics = [...my_recents, ...missing_topics].filter(
+            (message_topic) => !local_echo_set.has(message_topic.pretty_name.toLowerCase()),
+        );
+        server_topics.sort((a, b) => b.message_id - a.message_id);
+        return [...local_echo_topics, ...server_topics].map((obj) => obj.pretty_name);
     }

     get_max_message_id(): number {
+        // TODO: We probably want to migrate towards this function
+        // ignoring locally echoed messages, and thus returning an integer.
         const unacked_message_ids_in_stream = [
-            ...get_max_msg_id_in_topics_waiting_for_ack(this.stream_id).values(),
+            ...echo_state.get_waiting_for_ack_local_ids_by_topic(this.stream_id).values(),
         ];
         const max_message_id = Math.max(...unacked_message_ids_in_stream, this.max_message_id);
         return max_message_id;

And for the first commit:
diff --git a/web/src/echo.ts b/web/src/echo.ts
index 1f8e3689ef..2841862575 100644
--- a/web/src/echo.ts
+++ b/web/src/echo.ts
@@ -237,10 +237,8 @@ export function build_display_recipient(message: LocalMessage): DisplayRecipient
     return display_recipient;
 }

-export function patch_local_message(message: Message): void {
-    if (message?.local_id === undefined) {
-        return;
-    }
+export function track_local_message(message: Message): void {
+    assert(message.local_id !== undefined);
     echo_state.set_message_waiting_for_id(message.local_id, message);
     echo_state.set_message_waiting_for_ack(message.local_id, message);
 }
diff --git a/web/src/message_events.js b/web/src/message_events.js
index e427d227dd..02a1240fdc 100644
--- a/web/src/message_events.js
+++ b/web/src/message_events.js
@@ -11,7 +11,7 @@ import * as compose_state from "./compose_state";
 import * as compose_validate from "./compose_validate";
 import * as direct_message_group_data from "./direct_message_group_data";
 import * as drafts from "./drafts";
-import {patch_local_message} from "./echo";
+import * as echo from "./echo";
 import * as message_edit from "./message_edit";
 import * as message_edit_history from "./message_edit_history";
 import * as message_events_util from "./message_events_util";
@@ -240,11 +240,11 @@ export function insert_new_messages(messages, sent_by_this_client, deliver_local
         unread_ui.update_unread_counts();
     }

-    // If it is a local echo, we try to patch the messages to the
-    // data structures in `echo_state` before we update the stream
-    // sidebar.
+    // Messages being locally echoed need must be inserted into this
+    // tracking before we update the stream sidebar, to take advantage
+    // of how stream_topic_history uses the echo data structures.
     if (deliver_locally) {
-        messages.map((message) => patch_local_message(message));
+        messages.map((message) => echo.track_local_message(message));
     }

     unread_ops.process_visible();
diff --git a/web/tests/echo.test.js b/web/tests/echo.test.js
index aa06e966a3..39555fd1d3 100644
--- a/web/tests/echo.test.js
+++ b/web/tests/echo.test.js
@@ -373,7 +373,7 @@ run_test("test reify_message_id", ({override}) => {
         draft_id: 100,
     };
     echo.insert_local_message(message_request, local_id_float, (messages) => {
-        messages.map((message) => echo.patch_local_message(message));
+        messages.map((message) => echo.track_local_message(message));
         return messages;
     });

With those changes, I think this is good to merge. Thanks for making this happen @roanster007! It's the kind of sensitive code where it's important to have well-written comment documentation, because it'll be a pain to debug problems later without that.


Use histoire for demos

Hi there, another fresh idea, we could use https://histoire.dev/ for the examples instead of a local vite server.  ;)
R3F does the same with Storybook. I think is a brilliant idea because It comes with a nice interface to embed and organize all the examples and can be deployed as a static page.
If you are interested I can create the PR

Good idea, love this thought! Does it still support local-only dev? That's my main concern as far as demos - I want it to be as easy to start up and work with a new demo locally as possible, so if that could happen (and if npm run demo:create still works to create and scaffold a new demo) that'd be ideal. Would definitely love to take a look at a PR for this, thanks!

Yes, you can start it locally, I will create a branch so you can take a look ;)

(wontfix, new version - thanks though!)


Site is difficult to follow for a newbie, especially for someone looking for resources other than books

Your site has wonderful resources, and I really appreciate everything that has gone into it. Unfortunately, I found the organization more difficult to follow than it needs to be. I did make one PR, but don't have time to make others, so I am leaving these suggestions, to use or ignore as you see fit.

It is not clear whether the site is for "books" or "resources". I vote for making it "resources." Then the sections would be Introduction, Books, Online Courses, Interactive Programming Resources, Problem Sets, Podcast - Screencast, Programming Playgrounds (though could that be combined with "Interactive Programming Resources"?)

At the very least, "View the English list" should say "View the English list of books".

The pages for "Online Courses", "Interactive Programming Resources", "Programming Playgrounds" are just labeled "Index" so it is impossible to know what you are looking at. They should be titled "Index of Programming Playgrounds", e.g.

My PR was about online programming playgrounds, and @eshellman  raised the question of whether frameworks (React and Angular) should be listed separately, or under JavaScript as is done in books. I agree that it would be good to organize all the pages the same way, and it probably makes sense to list frameworks under languages. However, it would be good to indent the frameworks on the full list, rather than have them as top-level entries the way they are here. I understand that it may not be easy to do that in Jekyll. I see that the titles are
s. Maybe the subsection titles could be
s with some css to indent them. It would be OK to just indent the subheader, if it turns out not to be easy to indent lists under subheader.

Thanks for keeping up such a great resource, sorry I don't have time to do the PRs myself!

https://pages.github.com/
Should we improvise this repo with a front-end Github Webpage? That would be more 'presentable' than a README.md

you mean like https://ebookfoundation.github.io/free-programming-books/ ?

Yeah, well:
The points mentioned above are for the README file, but I think that we should make the .io page a liitle more Navigate-friendly.


Add test for querying all images in the database

Current tests check POST and GET for individual images. We should also test doing GET at the main endpoint that should return all images.

Should we put this part in a new test case?

Yes that would ideally be a new test (using the same data), and a new PR.

Hi Chris, It would be really helpful if you could show me the source code of GET & POST. I don't quite understand what GET and POST will do in this API.
For querying all images:
with GET, I can only get 25 results while I POST 84 json files.
In the localhost/scenarios page, under meta tag, it shows:
<_meta>
  <max_results>25</max_results>

I thing your code snippet got truncated.
The reason you get only 25 results is probably because pagination is turned on (which is good). See http://python-eve.org/features.html#pagination

Hi Chris, I'm confused about querying all images in database

how to do that?
how & what to test?

For the first question:
As I may run the test several times, so the database would contain duplicate json files -- testing data. Should we return all the files, or return unique files?

I think I'm confused because I don't quite understand what POST & GET would actually do in this API. Would you have any suggestions such as source code in this API?

A GET on the main API endpoint (without specifying entity ID as you are doing in other tests) should give you paginated list of all entities.
One good test would be to check if the expected total number of items is correct (see "total" inside "_meta" of returned response)
Its here: https://github.com/poldracklab/mriqcwebapi/tree/master/dockereve-master Have you talked with @394822740?

Deduplication would be desirable (checking 'md5sum' and 'version' should be enought), but that would be a separate feature. Otherwise it would be nice to wipe the database (or use a test database) between tests. Mongo does that for their testing). However, you should not run into this issue with Circle since each time you spin a new database.

Great, thanks!
I'll read the documentation and work on this.


Cannot Send Empty Message

Your system broke it now registers everything as an empty message.

yeah I have the same issue


Omit devDependencies installation

Current dependencies on/for this PR:

main

PR #57   👈

This stack of pull requests is managed by Graphite.


Slayer helm check

Quick function to get helmet name then a check before returning baseMax to see if the player has a slayer helm/black mask equipped, and if so multiplying baseMax by 1.1667

The creator of the plugin kinda gave up on it I am not sure he will every add it.
Btw you are not checking if the helm is imbued for ranged/mage dmg right?

The creator of the plugin kinda gave up on it I am not sure he will every add it.
Btw you are not checking if the helm is imbued for ranged/mage dmg right?

Ah that's a shame, might be worth remaking this plugin tbh this bug is very annoying...
And nope, just did the bare basic check, figured this usecase was good enough for most scenarios as you can always remove the helm to remove the bonus and it doesn't add any other max hits (?)


[Bug] Ble-thread Pairing is failed in automated yaml script.

Describe the bug
Ble-Thread pairing is failed  with the below error during the commissioning

Test Suite Error: Error occurred during setup of test suite.FirstChipToolSuite. Border router does not start properly for nrfconnect/otbr:9185bda

Steps to reproduce the behavior

Edit the pairing_mode to ble-thread in Project config.
Select the test case from SDK yaml Tests
Advertise the DUT
Run the test-case

Log files
dgthread.log
PICS file
Thread Network Diagnostics Cluster Test Plan.zip
Screenshots

Environment
TH version :2.10+spring2024
Sha: 5f28838
Note:  Python and Manual way of ble-thread pairing is working fine only issue with  yaml automated script

I believe we resolved this issue by rewriting the RCP board firmware. Could you please confirm that you no longer have the problem?


Update Runtime OAS

Description:
Add  x-code-samples for each REST API resource to the YAML file (en/docs/catalogs/runtime-api.yaml) in order to get Sample cURL commands to render in the Runtime API catalog.

Closing this issue as the PR has been merged


Release 7.0.0 compass

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Type of change
Please choose appropriate options.

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

How Has This Been Tested?
Please describe the tests that you ran to verify your changes in the below checkboxes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

[ ] Ran Test A
[ ] Ran Test B

Test Configuration:

Software versions:
Hardware versions:

Checklist:

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in downstream modules

The changes are merged as part of the below PR hence closing this.
https://github.com/Sunbird-inQuiry/player/pull/75


Accessibility should be a goal

          Accessibility should be a goal

Originally posted by @morganhah99 in https://github.com/aron-s/mywebclass-agile-docs/pull/1#discussion_r1127898884

Fixed in document branch.


Teleop thruster articulation

Addresses this issue: https://github.com/osrf/vrx/issues/262
Updated config file for joy teleop node, added more instructions to the wiki [[https://github.com/osrf/vrx/wiki/driving_teleop_tutorial]] and verified that both keyboard and gamepad teleop support thruster articulation examples.

@M1chaelM @caguero - I'm going to be offline for a couple weeks.  If you have a chance to give this PR a look today, I'd hope to merge and close the PR along with the associated issue.

Thanks! I should be able to review it today

Minor suggestions for the tutorial:

We could update the instructions for launching sydneyregatta.launch
I think the H fixed configuration doesn't apply anymore as we always have the articulated thruster.

Done - good suggestions.


ui fixes

Description

Short description here *

closes #4322
Self Check:
Strike through any lines that are not applicable (~~line~~) then check the box

[ ] Attached issue to pull request
[ ] Changelog entry
[ ] Code is clear and sufficiently documented
- [ ] Sufficient test cases (reproduces the bug/tests the requested feature)
[ ] Correct, in line with design
- [ ] End user documentation is included or an issue is created for end-user documentation (add ref to issue here: )

Reviewer Checklist:

[ ] Sufficient test cases (reproduces the bug/tests the requested feature)
[ ] Code is clear and sufficiently documented
[ ] Correct, in line with design

Please connect issue in Zenhub ;)

Please connect issue in Zenhub ;)

it is connected :D

Processing this pull request

Merged into branches master, iso5 in b5bb9247f18eb518ad722aa5b0a855eb92bedd7f


test-branch/execute-job/comment-from-wrong-user-on-pr/092a00f7-56f4-4fdb-a783-75b55ac7625b

PR for testing 4e7946d1405c782cba11559f354ca9e33dbe5e9c

/canonical/self-hosted-runners/run-workflows 4e7946d1405c782cba11559f354ca9e33dbe5e9c


[ios, add to app] Flutter engine can be created only when application is being debugged

Steps to Reproduce

Clone Flutter samples https://github.com/flutter/samples.git
Build and run IOSUsingPrebuiltModule on an iPhone (I have iPhone 13 Pro Max, 16.0.2)
Disconnect phone from macbook
Launch IOSUsingPrebuiltModule from iPhone's app library
Try to click Launch Flutter ViewController (this will fail, it won't open it because Flutter engine is `nil´).

I also created a simple Objective-C app, and instead of creating an engine inside AppDelegate, I was creating it inside the action handler, and if I attach a debugger after I launch it from iPhone's app library, the engine initializes just fine.

flutter doctor -v
[✓] Flutter (Channel stable, 3.3.5, on macOS 12.6 21G115 darwin-arm, locale en-FI)
    • Flutter version 3.3.5 on channel stable at /Users/user/Downloads/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision d9111f6402 (11 hours ago), 2022-10-19 12:27:13 -0700
    • Engine revision 3ad69d7be3
    • Dart version 2.18.2
    • DevTools version 2.15.0

[!] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at /Users/user/Library/Android/sdk
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] Android Studio (version 2021.3)
    • Android Studio at /Users/user/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/213.7172.25.2113.9014738/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] Android Studio (version 2021.2)
    • Android Studio at /Users/user/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/212.5712.43.2112.8815526/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] VS Code (version 1.72.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.48.0

[✓] Connected device (4 available)
    • Tuna iPhone (mobile) • 00008110-00065DCE0EE9801E            • ios            • iOS 16.0.2 20A380
    • iPhone 14 (mobile)   • 220B863D-5BC2-4A96-B468-760E0C2941B1 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-16-0 (simulator)
    • macOS (desktop)      • macos                                • darwin-arm64   • macOS 12.6 21G115 darwin-arm
    • Chrome (web)         • chrome                               • web-javascript • Google Chrome 106.0.5249.119

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

Hello @sergiy-sc. Is this issue reproducible on a simulator?

Hello @sergiy-sc. Is this issue reproducible on a simulator?

No, it seems to work fine with the simulator.

Hi @sergiy-sc
I can reproduce the issue, also on the latest Flutter master channel, this is a duplicate of https://github.com/flutter/flutter/issues/74633.
Please read https://github.com/flutter/flutter/issues/74633#issuecomment-767066922 for more details.
Closing as duplicate.


Can't reproduce the redult of the paper

Hi, team.
I am very greatful you provide the code and data splits for your CPC audio paper "https: //arXiv.org/abs/2002.02848".
First I tried to pretrain Mod. CPC on libri-100 and frozen the features for common voice 1-hour ASR task, I got avg per of 45.2% on 5 languages (es, fr, it, ru, tt), which is reported as 43.9% in your paper (Table 3), I think my results is close (-1.3%) to what you reported, which seemed reasonable.
But when I test the pre-trained features on 5-hour common voice ASR tasks (es, fr, it, ru, tt), I just got a avg per (frozen features) of 42.5%, which had a big gap (-3.7%) with the reported per (38.8%, Table 5 in paper); when finetuning features, the gap was even bigger, the avg per was 37.2% (in the paper it is reported as 31.0%).
Unfortunately, the 5-hour common voice ASR experiments also perform badly when training from scratch, a avg per of 43.2%, far behind 38.3% reported in your paper.
I will be very thankful if you kindly provide more detailed hyper-parameters to help me reproduce your results.
Especially, I noticed you have set a optional argument --LSTM in ./eval/common_voices_eval.py to add a LSTM layer before the linear softmax layer. I think it would significantly increase the model capacity and may lead to better performance, did you use it?
Thnk you very much!
For now I used the default hyper-parameters on common voice ASR transfer experiments:
--batchSize 8
--lr 2e-4
--nEpoch 30
--kernelSize 8
......

Hi @zz12375,
I am also not able to reproduce the results.
Could you please let me know what is the PER you are getting on fr alone?

Hi @zz12375,
I am also not able to reproduce the results.
Could you please let me know what is the PER you are getting on fr alone?

Evaluated on 300 epoch pretraining model, the PER tuned with 5-hour fr is 46.49% (frozen features) and 40.05% (finetuning features).

Evaluated on 300 epoch pretraining model, the PER tuned with 5-hour fr is 46.49% (frozen features) and 40.05% (finetuning features).

Thanks.
Here are some PERs on the french test set:
This model:

Training Data: 1 hour French
Feature Extractor Frozen: Yes
CPC Model Checkpoint: https://dl.fbaipublicfiles.com/librilight/CPC_checkpoints/60k_epoch4-d0f474de.pt
CPC Model Training Data: Libri Light 60k Hours
PER: 45. %

Wav2Vec [Paper]:

Training Data: 1 hour French
Feature Extractor Frozen: Yes
Model Checkpoint: https://dl.fbaipublicfiles.com/fairseq/wav2vec/wav2vec_large.pt
Model Training Data: Librispeech 960 hours
PER: 42. %

ConvDMM [Paper]

Training Data: 1 hour French
Feature Extractor Frozen: Yes
Model Training Data: Librispeech 960 hours
PER: 46. %

Note: I did not use this toolkit to get PER, but I wanted to be consistent with the CTC phone classifier that this repo is using so I copied the following class in my codebase:
https://github.com/facebookresearch/CPC_audio/blob/b98a1bdf1fe9ea219816db7a6c28115d404a3510/cpc/eval/common_voices_eval.py#L128

Thanks.
Here are some PERs on the french test set:
This model:

Training Data: 1 hour French
Feature Extractor Frozen: Yes
CPC Model Checkpoint: https://dl.fbaipublicfiles.com/librilight/CPC_checkpoints/60k_epoch4-d0f474de.pt
CPC Model Training Data: Libri Light 60k Hours
PER: 45. %

Wav2Vec [Paper]:

Training Data: 1 hour French
Feature Extractor Frozen: Yes
Model Checkpoint: https://dl.fbaipublicfiles.com/fairseq/wav2vec/wav2vec_large.pt
Model Training Data: Librispeech 960 hours
PER: 42. %

ConvDMM [Paper]

Training Data: 1 hour French
Feature Extractor Frozen: Yes
Model Training Data: Librispeech 960 hours
PER: 46. %

Note: I did not use this toolkit to get PER, but I wanted to be consistent with the CTC phone classifier that this repo is using so I copied the following class in my codebase:
https://github.com/facebookresearch/CPC_audio/blob/b98a1bdf1fe9ea219816db7a6c28115d404a3510/cpc/eval/common_voices_eval.py#L128

Thank you very much for sharing your results.
You mean increasing the number of epochs during the down-stream finetuning stage (CTC loss), or pretraining stage?

Thank you very much for sharing your results.
You mean increasing the number of epochs during the down-stream finetuning stage (CTC loss), or pretraining stage?

I meant during downstream CTC phone classifier training.

I meant during downstream CTC phone classifier training.


test: HACBS-1045/ReleasePlanAdmission-AutoReleaseLabel

Description
Please include a summary of the changes and the related issue. Please also include relevant motivation and context. List any dependencies that are required for this change.
Issue ticket number and link
https://issues.redhat.com/browse/HACBS-1045
Type of change

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
Checklist:

[x] I have performed a self-review of my code
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] I have updated labels (if needed)

Just created a PR for e2e testing to cover auto release feature in releasePlanAdmission- Release service perspective (test development)
https://issues.redhat.com/browse/HACBS-1045
Updated the following:
the happy-path tests :

ReleasePlanAdmission-AutoReleaseLabel is true or missing --> release pipelineRun is created and run
ReleasePlanAdmission-AutoReleaseLabel is false --> release pipelineRun is not created

the failure tests :
ReleasePlanAdmission-AutoReleaseLabel has an invalid value --> ReleasePlanAdmission isn't created and release PR is not created
Since I don't have a valid working cluster couldn't run the test
Will continue to solve the conflicts mentioned in the PR

Hi @naftalysh  ,
the CI configuration in main branch of e2e-tests repository was recently updated and it no longer uses pre-kcp branch of infra-deployments for bootstrapping appstudio on OCP cluster. Now it uses main branch, which leverages kcp.
Since appstudio/hacbs services are not fully integrated with kcp yet, lots of tests implemented in this repo can't be run successfully against it.
To address this, a branch "pre-kcp" was created in e2e-tests repo and can be used for adding/updating tests that can be run against "pre-kcp" version of appstudio.
Once we are able to run e2e tests for all appstudio/hacbs services successfully, the plan is to merge back all changes done in pre-kcp branch back to main.
If your PR is intended to update test used for "pre-kcp" version of appstudio, please update the base branch in your PR like this:

Thanks!

@naftalysh @kasemAlem are these PRs still necessary? They've been sitting here for some time

It's not relevant anymore


Wizard Stepper Icons need to be vertically centered

Can we please vertically align the stepper wizard icons so they are centered to the Details and description. Currently they are centered to the top field and it causes the icon to protrude too high.

The placing is correct. If the placing of the icon shifts it will be off placement when there isn't a description.

Hi @Lukeybooi i see your point above and you are absolutely right. Thank you for pointing that out and I will close this ticket.


Genabio 1st validation round CSV file

Please see https://cdc.sharepoint.com/:x:/r/teams/USDSatCDC/_layouts/15/Doc.aspx?sourcedoc={038FCFA9-ABEF-40FD-B8F2-7C7314AC428D}&file=Genabio message20220812 (1).csv&action=default&mobileredirect=true for the test file.
Once this ticket is assigned, @BerniXiongA6 please add the developer to the email thread with Genabio.

@MauriceReeves-usds I'll forward you all the emails in Outlook between us and Genabio. cc: @sarahnw

Responded on Friday afternoon (26-Aug-2022) to Genabio with the following feedback requesting they update their file to the correct schema and fill in some missing fields.
A few things to note:
1. I apologize for this up front, but we have a different specification we would like you to use to send us data. The original schema that you were directed to is for senders who are going to be using the manual CSV upload functionality, but you are going to be sending directly to us via the API. Therefore, please format your CSV files according to this specification instead: https://github.com/CDCgov/prime-reportstream/blob/master/prime-router/docs/schema_documentation/direct-direct-covid-19.md

I can generate an Excel file data dictionary for the data above if that is easier for your team to digest. Please let me know.

2. Per the existing file you did send, there are some errors that will still be errors regardless of the schema you use. I am listing them below:
  - Patient ID field is missing. If we need to communicate with you about specific messages that may require correction (for example, a state we send the message to has questions about the data) we would like to communicate that via the Patient ID or the Accession Number (which is also missing). This allows us to coordinate without leaking PII
  - Accession Number is missing, as noted above. Please provide this as well
  - All of the ordering provider information is missing including state, city, first name, last name, phone number, and their ID. Many states require this field, and we will have difficulty getting states to accept the data without it
  - Similarly, all the testing lab information including CLIA, city, state, zip are missing. We would like that provided
  - The fields provided for patient ethnicity are truncated. If possible, please provide the full value. For example, for the first row, the value provided is “Not Hispanic or “. Please provide the full coded value. If you refer to the link above for the direct covid 19 schema you will see what values we expect

Additional notes
For the date fields you are sending, please format the dates in the ISO format: 2022-08-02T14:35:00-0400 or 2022-08-02T18:35:00Z. Either is acceptable. The first one includes the time zone offset, the second is the date and time encoded to UTC. This allows us to provide more reliable information to the public health agencies we report to

Note: if these are strictly OTC tests, and you don’t have the ordering physician information, please let me know, and we’ll mark that on our end as a warning instead of as an error. Please *DO NOT* put the patient information in those fields, as that can cause leakage of PII, and we do not want to inadvertently expose patient information.

@MauriceReeves-usds
Please review Juehua.yu updated file.  You should have received an email with the CSV file, please let me know if you'd like me to forward to you.
Also, they had one follow-up question regarding OTC data.


Added contract related schemas

part of APPSRE-4788
This is an implementation of the accepted proposal from @maorfr in https://gitlab.cee.redhat.com/service/app-interface/-/merge_requests/32536.
It adds the link to the SRE checkpoint schema. This is optional for the moment, I will make it mandatory once I have updated all the checkpoint files.
Signed-off-by: Rafa Porres Molina<EMAIL_ADDRESS>

I think my proposal was to add a link to a contract version from an app file?
This makes sense as well, so perhaps both?

Wouldn't that be redundant? In order to get the last checkpoint we can just use the app reference and sort by date.


chore: add nil check for ListOptions receivers; update useragent value

Codecov Report
Attention: Patch coverage is 0% with 43 lines in your changes are missing coverage. Please review.

Project coverage is 15.75%. Comparing base (e5ca1b1) to head (61cf019).

Files
Patch %
Lines

crowdin/model/projects.go
0.00%
11 Missing :warning:

crowdin/model/string_translations.go
0.00%
10 Missing :warning:

crowdin/model/source_files.go
0.00%
6 Missing :warning:

crowdin/model/translations.go
0.00%
6 Missing :warning:

crowdin/model/source_strings.go
0.00%
4 Missing :warning:

crowdin/model/translation_status.go
0.00%
4 Missing :warning:

crowdin/model/branches.go
0.00%
2 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #20      +/-   ##
==========================================
- Coverage   16.13%   15.75%   -0.38%
==========================================
  Files          23       23
  Lines        1054     1080      +26
==========================================
  Hits          170      170
- Misses        852      878      +26
  Partials       32       32

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Warning: Operand of null-aware operation '?.' has type 'WidgetsBinding' which excludes null.

This warning is shown using Flutter 3.0 and above

same issue, in flutter 3.0.3

Sorry about that guys, as I am using flutter 2.10 I did not notice that issue until now that you flagged. I have approved the PR with that change, will go on the next release.

Successfully uploaded https://pub.dev/packages/another_xlider "1.1.2".


Update scale-requirements.md

update the supported worker node VM sizes for 23H2

@sethmanheim
Can you review the proposed changes?
When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off


updating rest tests for new restParam option

Hey,
I'm a bit late on my promise, but here is the PR that updates the rest tests and fixes some issues that appeared after the code cleanup. (also it fixes an issue with includeRoutes method as it did not include the rest routes)
I still need to have investigate why the blueprint tests fails... probably will do it over the weekend
Also as a side note ,  I will add support also for https://github.com/swagger-api/swagger-spec/blob/master/versions/1.2.md#525-response-message-object in a separate PR
Seb Calbaza

Hey,
I rebased and cleaned up the branch.  Should be suitable for merging.
Thanks,
Seb Calbaza

Hi

We do not use abrv names - could you rename msg to message.

I wonder if we should not lose the rest prefix as this is rest only, eg restParam -> param, restResponseMsg -> responseMessage, and so on.

I think we should add some java fluent builder to make it easier to set those accepted values as a var ags, so you dont have to wrap them into a List instance, so it can be
acceptedValues("1", "2", "3")
or something as easy as that.

Sure, will do

@sebi-hgdata did you have any chance to work on this?

Will try to wrap it up today

Hey,
Check latest commit. Let me know if you need anything else

Thanks a lot @sebi-hgdata the code has been merged. Do you mind closing this PR.
Also we need to update the rest-dsl with this new functionality. Are you able to help with that?
http://camel.apache.org/rest-dsl

Sure. Can you point me to the files that need to be updated?

Yes its this page
http://camel.apache.org/rest-dsl
But for editing docs you need to file a ICLA and follow this guide
http://camel.apache.org/how-do-i-edit-the-website.html

Still trying to find some time to do the above...


"disableLocalStrategy: true" still asking for email or nickname

Environment Info
    "next": "15.0.0-canary.104",
    "payload": "beta",
    "nodejs": v18.20.4

Describe the Bug
I want to create a custom auth for trainees that can login with their firstname, lastname and trainee_id. There is no need for password, email or nicknames. I've find out that disableLocalStrategy set to true is ignored and still requires email/nickname and password. If i'm doing something wrong, please tell me how to fix it?
Reproduction Steps
import type {CollectionConfig} from 'payload'

export default {
	slug: 'trainees',
	labels: {
		singular: 'Azubi',
		plural: 'Azubis',
	},
	auth: {
		disableLocalStrategy: true,
		strategies: [
			{
				identityField: 'trainee_id',
				name: 'custom-strategy',
				async authenticate({headers, payload}) {
					const {docs} = await payload.find({
						collection: 'trainees',
						where: {
							name_first: {equals: headers.get('name_first')},
							name_last: {equals: headers.get('name_last')},
							trainee_id: {equals: headers.get('trainee_id')},
						},
					})
					return {user: docs[0]}
				},
			},
		],
	},
	fields: [
		{
			name: 'name_first',
			label: 'Vorname',
			type: 'text',
			required: true,
		},
		{
			name: 'name_last',
			label: 'Nachname',
			type: 'text',
			required: true,
		},
		{
			name: 'trainee_id',
			label: 'Matrikelnummer',
			type: 'text',
			required: true,
		},
	],
} as const satisfies CollectionConfig

is called by
	const result = await payload.login({
		collection: 'trainees',
		data: {
			name_first: 'Hassan',
			name_last: 'Altay',
			trainee_id: '43523452345',
		},
	})
	console.log(result)

causes
dock-payload   |  ⨯ node_modules/payload/dist/auth/operations/login.js (56:1) @ loginOperation
dock-payload   |  ⨯ ValidationError: The following field is invalid: email
dock-payload   |     at async $$ACTION_0 (./src/app/logic/actions.ts:52:20)
dock-payload   | digest: "1954918542"
dock-payload   | Cause: {
dock-payload   |   collection: 'trainees',
dock-payload   |   errors: [ { field: 'email', message: 'This field is required.' } ]
dock-payload   | }
dock-payload   |   54 |         // cannot login with username, did not provide email
dock-payload   |   55 |         if (!canLoginWithUsername && !sanitizedEmail) {
dock-payload   | > 56 |             throw new ValidationError({
dock-payload   |      | ^
dock-payload   |   57 |                 collection: collectionConfig.slug,
dock-payload   |   58 |                 errors: [
dock-payload   |   59 |                     {

hi ,
you are reading headers in custom headers ?!!

hi , you are reading headers in custom strategies ?!!

yes, i can pass my own headers as you see
name_first: {equals: headers.get('name_first')},
name_last: {equals: headers.get('name_last')},
trainee_id: {equals: headers.get('trainee_id')},

but this parameter disableLocalStrategy: true doesn't have any effect, the payload still requires email/nickname and password field

hi,
i didn't see that your setting headers, it seems strategy are an array so they are fired one after another till any of them fulfills the record , i am build a custom strategy, looking forward to a solution too

I think the custom strategies is not supposed to use with login auth operation. It's for accessing the API directly without doing the login auth operation. I ended up just create custom login root endpoint based on the source here https://github.com/payloadcms/payload/blob/v2.28.0/packages/payload/src/auth/operations/login.ts#L43
import { CookieOptions, Response } from 'express'
import jwt from 'jsonwebtoken'
import { PayloadRequest } from 'payload/types'

const getCookieExpiration = (seconds = 7200) => {
  const currentTime = new Date()
  currentTime.setSeconds(currentTime.getSeconds() + seconds)
  return currentTime
}

export async function handleCustomLogin(req: PayloadRequest, res: Response) {
  const { payload, body: credentials } = req

  const user = ... // get user here

  if (!user) return res.status(401).send('User not found')

  const { config, secret } = payload
  const collectionConfig = payload.collections['users'].config

  const fieldsToSign = {
    id: user.id,
    collection: 'users',
    email: user.email,
  }
  const token = jwt.sign(fieldsToSign, secret, {
    expiresIn: collectionConfig.auth.tokenExpiration,
  })

  const cookieOptions: CookieOptions = {
    domain: undefined,
    expires: getCookieExpiration(collectionConfig.auth.tokenExpiration),
    httpOnly: true,
    path: '/',
    sameSite: collectionConfig.auth.cookies.sameSite,
    secure: collectionConfig.auth.cookies.secure,
  }

  if (collectionConfig.auth.cookies.domain) cookieOptions.domain = collectionConfig.auth.cookies.domain

  res.cookie(`${config.cookiePrefix}-token`, token, cookieOptions)

  const result = {
    exp: (jwt.decode(token) as jwt.JwtPayload).exp,
    token,
    user,
  }
  return res.json(result)
}

Please be aware that I strip a lot of function from the upstream source, so it might cause some unintended effect


feat: support using http api upload license

Coverage remained the same at 73.971% when pulling 15bcc363cd3e6cfa8d2af199e0783122816dd81d on Gala-R:update-license-by-config into 032f8c659d28b4d262cc1ac1d305006e23c8942e on emqx:main.

We need to find a way to cover this part of the code with test cases


net: RX packets are sometimes used in the TX path

If we want to have a sane IP stack, we should not allow RX packets (and thus RX buffers) to be used in the TX path. Or if we allow that, we should just use a common pool for both TX and RX. This just makes additional constraints on the drivers and increases the minimum RX buffer requirements.
This happens where net_pkt_copy() or net_pkt_copy_all() are used, and most notably the icmpv4 and icmpv6 code. A possible fix is to pass the slab to use as an argument of those functions.

Or if we allow that, we should just use a common pool for both TX and RX.

So, we exactly want to allow to have a dedicated, even adhoc RX pools. E.g., pools in memory-mapped NIC controller memory, which can be used for nothing else but RX packets (and which, being overflowed, leads to problems, so we should not hold onto packets from that pool for long, like send the TX path, whatnot).
Thanks for submitting this ticket!
cc @jukkar, @tbursztyka

Actually, that issue does not exist anymore. I changed the core while applying the new net_pkt API so it would not reuse the RX pkt to TX. (originally icmpv4 and v6 in their respective echo request handler)
There are indeed legacy function still (like net_pkt_copy/net_pkt_copy_all) but these are not used in the core anymore. Actually I could remove these 2 in my PR #12989
Besides that, I do have plans - old ones actually - to use only 1 unique pool for all. The split was originally made for wrong reasons.

Indeed it is now fixed, sorry. I encountered the issue 2 weeks ago when working on the GMAC driver, and since them kept on my TODO list to submit a bug. Sorry for not checking properly the new code, I didn't notice the _new version of net_pkt_copy.
It means we can now revert https://github.com/zephyrproject-rtos/zephyr/commit/afbee4c96abedfdca842e5a7be0330f2ca8575

@aurel32 no worry, the changes I brought are quite broad, it changes a lot of things packet flow in the net stack. this issue helped me to notice net_pkt_clone/net_pkt_copy legacy functions could be removed actually.


The background service may not yet be available if you just started Kodi

Bug report
https://paste.kodi.tv/aworoniqic.kodi
Your Environment

Netflix add-on version:

1.1.0

Operating system version/name:

Devuan Beowulf (Debian 10)

Device model:

Used Operating system:

[ ] Android
[ ] iOS
[ x] Linux
[ ] OSX
[ ] Raspberry-Pi
[ ] Windows

Describe the bug

Expected behavior

Actual behavior
Netflix Add-on Error upon Starting

solution was found here
https://github.com/asciidisco/plugin.video.netflix/issues/665

this sound more like a hack
it looks like you installed a wrong module
I think it would have been better try uninstall all crypto modules installed
and install again pycryptodomex

could be,
installed kodi + kodi-pvr-iptvsimple or similar through deb-multimedia.
did not install any crypto modules by myself, maybe they got added in the process?

i do not know the others addon i use only netflix and youtube

since you found a solution anyway,
i close this issue

this sound more like a hack
it looks like you installed a wrong module
I think it would have been better try uninstall all crypto modules installed
and install again pycryptodomex

Hi, i am facing the same warning after an installation of Netflix on my Kodi (Raspbian). On my Kodi in Windows everything is fine. How can I fix this issue? What exactly do you recommand?

sudo apt install build-essential python-pip python-dev libffi-dev libssl-dev libnss3
sudo pip install setuptools wheel pycryptodomex
Solved it for me. Sorry for the previous post :-)


Update active-directory-reporting-activity-sign-ins.md

Fixed typo

@laschultz,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot

@MarkusVi Please review these proposed contributions. Thanks.

#sign-off


authenticateWithCordova: no way to attach event handler to the close event for the inappbrowser window

As far as I can tell, there's no way to attach an event handler to the close event for the inappbrowser window that's opened when one calls Dropbox.authenticateWithCordova().
If the application is showing a modal "loading"-type indicator while Dropbox authentication is happening, and the user closes the inappbrowser, there's no way to attach an event handler to close the loading indicator.

For that matter, it would also be nice to be able to pass in the various options inappbrowser supports on the open method.

Thanks! I'll send these requests along to the team.


Documentation for shipping server logs/metrics via alloy

Once this is setup, there is an OTLP endpoint for collecting logs/metrics. That said, there isn't really an end-to-end setup for how to configure this with Alloy. Would it be possible for someone to write a short tutorial on how to do that?

Hey there @josegonzalez, thanks for reaching out! 👋
We have a similar tutorial here: https://grafana.com/docs/alloy/latest/collect/opentelemetry-to-lgtm-stack/
Could you take a look and see if it answers your question?

Somewhat? It's not super clear how to grab the actual log data (or even stuff like server metrics) to ship over, or if alloy is even the correct way.
I only point at Alloy as the grafana agent is deprecated in favor of it.

Hi, I've found the docs helpful, but they seem to tackle different specific hello-world-esque use cases.
I have been reading through the Collect Kubernetes logs documentation, which demonstrates how to do so with Loki components. This is also the recommended way of retrieving logs from infrastructure per the Choose a component page. However, these guides fall flat as only an OTEL collector for GRPC and HTTP is exposed in otel-lgtm container.
I've played around, trying to forward Loki logs to the otel-lgtm docker container, thinking that the HTTP OTEL endpoint might serve /loki/* routes (Ie,  so that we can push to http://host:4318/loki/api/v1/push, but no cigar. Hence I ended up here looking for some guidance!
I get the feeling that we may be able to do the following;

Expose port 3100 from the container in order to ship logs to Loki (Possibly not recommended?)
Convert Loki formatted logs into OTEL format and push those via 4318 (Also possibly not recommended?)

There is a otelcol.receiver.loki which receives Loki log entries and converts them to the OpenTelemetry format. I managed to ingest OTEL logs using it, and my collector alloy config looks like this (It's missing a few key labels, like the OTEL mandatory service_name:

It would be great to know which of these means of ingesting Loki logs is preferred, and perhaps a brief note in the README of this project would go down a treat to help inform people moving forwards! :-)
In all transparency, I'm a bit new to OTEL, so there's a lot of learning going on, just hoping to make that journey easier for others where possible!


support Bakery's Baked Normal Maps mode

will be useful if you dont use Indirect Specular

you can use baked normal by changing settings of bakery manually. nice


Upload a layer to be included in the manifest

There is a base64 enoded string which, when decoded, contains a tarball.
This is uploaded as a blob and then included in the "layers": []
section of the manifest. Some registries were rejecting the manifest due
to an empty layers section, so this fix should resolve that issue.
Resolves #118

@jonjohnsonjr
Will this be sufficient to get GCR to accept the manifest upload?

@jonjohnsonjr @mikebrow
This PR enables GCR to pass the pull workflow

@mikebrow couple thoughts-
The spec doesn't explicitly state the acceptable/required number of layers for upload. That being said, a single layer appears to meet the requirements of all registries, and seems like a reasonable expectation.
I'm in favor of doing only one test - either as is (0 layers) or this change (1 layer). I dont find it useful to add a flag here to disable a no-layer test as it complicates the test matrix even further. Now instead of 4 categories, one of the categories (push) would be broken down further.
I suggest we remove this as a configurable option, and modify the spec language the say something along the lines of "registries MUST accept one (1) layer, but MAY provide zero (0) layers or multiple layers".
If the spec will end up reading that accepting 0 layers is required, then we should just do both tests and GCR considered non-conformant for push.

@mikebrow couple thoughts-
The spec doesn't explicitly state the acceptable/required number of layers for upload. That being said, a single layer appears to meet the requirements of all registries, and seems like a reasonable expectation.
I'm in favor of doing only one test - either as is (0 layers) or this change (1 layer). I dont find it useful to add a flag here to disable a no-layer test as it complicates the test matrix even further. Now instead of 4 categories, one of the categories (push) would be broken down further.
I suggest we remove this as a configurable option, and modify the spec language the say something along the lines of "registries MUST accept one (1) layer, but MAY provide zero (0) layers or multiple layers".
If the spec will end up reading that accepting 0 layers is required, then we should just do both tests and GCR considered non-conformant for push.

4x1 matrix? I just assumed/imagined a test tree with branches for the cases where a MUST is not specified than a matrix with 4 big switches and only test paths that are the exact same for all registries.
I don't see much use for the zero layers containers test .. One could argue there can only be one "scratch" I guess.  My point was why delete a test that successfully found an issue/differences between the registries.  Flag it ... comment it.. todo it.. Just not a fan of deleting tests unless there is clear documentation / specification that the test is wrong. More a general thought process around testing than anything else.
Cheers, Mike

Since distribution can be used for more than images, I would like to add that we do use zero layers to store config only artifacts.
Layers are an overhead when you want a single JSON config blob that can be used as configuration or metadata in the system.

Since distribution can be used for more than images, I would like to add that we do use zero layers to store config only artifacts.
Layers are an overhead when you want a single JSON config blob that can be used as configuration or metadata in the system.

Interesting.. thx.

@mikebrow
I just pushed an update that accomplishes 2 things:

Use the structs from image-spec
By default, run two tests: one with a layer, and one without. If OCI_SKIP_EMPTY_LAYER_PUSH_TEST=1 is set in the environment, it will skip the empty layer test.

This should be good to merge. By default running both 0 layer and 1 layer, with the ability to skip the 0 layer test via OCI_SKIP_EMPTY_LAYER_PUSH_TEST=1

This one needs a rebase after merging the other pull PR

@dmcgowan Just rebased it, should be good to go now

@dmcgowan Can we get you to approve again? I think the rebase undid your approval. Should be good to merge now!


Allow passing the Node methods are called on to the DialogueManager

Is your feature request related to a problem? Please describe.
A common trope in RPGs is to have a pathway blocked off until certain conditions are met. Usually trying to navigate through these blocked pathways will present the player with dialogue telling them to turn back.
I made a reuseable 'DialogueTurnback' component (Area2D with CollisionShape2D child) and placed it into my scene. This component has the following code:
extends Area2D

export(Resource) var dialogue_resource: Resource
export(String) var dialogue_title: String

func _on_DialogueTurnaround_body_entered(body: Node) -> void:
	DialogueManager.show_example_dialogue_balloon(dialogue_title, dialogue_resource)

func turn_back() -> void:
	# Add code to turn the player back around here.
	pass

An example dialogue would be:
~ stairs

You don't need to go up there right now.
do turn_back()

The problem is the turn_back() method is being called in the active scene, not the component that initialized the dialogue.
Describe the solution you'd like
I'd like to pass the component that do methods call to the DialogueManager. Something like so:
DialogueManager.show_example_dialogue_balloon(dialogue_title, dialogue_resource, self)

Or alternatively it'd be nice to be able to yield the dialogue balloon so when dialogue finishes, I can perform an action in the component I'm in. Something like:
yield(DialogueManager.show_example_dialogue_balloon(dialogue_title, dialogue_resource, self), "dialogue_finished")
turn_back()

Describe alternatives you've considered
I could perhaps try a do emit() which could be listened to in the component. Problem with this is all other DialogueTurnaround components in my current_scene will also hear it.

I've added a third argument to show_example_dialogue_balloon for extra states as an array so you would do something like:
DialogueManager.show_example_dialogue_balloon(dialogue_title, dialogue_resource, [self])

Wow, thank you very much!

I think this is an awesome feature, this feels to me like a good way to organize code and resources. I only wish it was documented better.
I did not find this feature until I read this issue.
To me it would make sense to add a description of this under: https://github.com/nathanhoad/godot_dialogue_manager/blob/main/docs/Writing_Dialogue.md#mutations .
(Awesome addon btw, thanks a lot!)

Now I see it is documented under the API documentation but I think it would make sense to add it under the mutations description as well. Also the description under API docs makes sense from API and addon development standpoint but I skipped right over it when I was looking for info on how I can run do and set commands on custom nodes because there is no reference to this.

@Norodix I've updated the mutation docs to mention being able to pass extra_game_states when requesting dialogue lines.

@Norodix I've updated the mutation docs to mention being able to pass extra_game_states when requesting dialogue lines.

could you give an example of use, both in code and in .dialogue files?