 Hello everybody. Good morning. Hey Mr. Mitchell. John Laswell, is this your first time in? Yes. Yes it is. Well welcome. Just so you know, well it doesn't really matter for much. We do kind of keep track of people's attendance and that's how you kind of get voting rights. If you're here for like a three out of the last four meetings and like that, and voting rights are based upon company. So if you'd like to be associated with a company, just let me know the company name and I'll add you to the tracker under that company. Okay. Do you want to do that now? Yeah, sure. If it's a name that I'm going to misspell, then just type it into the chat. Okay. Yeah. Thank you. Yeah, that one I probably would have gone wrong. Google I would get, but yeah. Yeah. Yeah. Okay. Well, cool. Thank you. All right. Hey, Eric. And ginger. Hello. It's so nice to be joined by everybody else considering for the last two weeks. It's just been me. Did you do it out of just bad habits or were you like hoping that maybe we had a call and Well, the first one was habit. Second one was that we'd have a call and I think Clemens was here and someone else and then. Yeah, so it's just a lack of intelligence of reading the notes. That's funny because I could have sworn Clemens was one of the ones you said he wanted to wait until the 14th. Apparently he bought last time. That's so funny. Let's see just see you there. Good morning. Lucas, are you there? Yes, I'm there. Hello, and Tommy. Tommy. Oh, there's my whoa. Thank you. And Thomas. Hello, everybody. Hello. Hello. Oh, Mr. Clemens. Hello. Yes, yes. We were just making fun of you. Of course. Of course. Doug was making fun of you. I was not. No, ginger started. I swear it was all ginger. Oh, you were talking about last week. Yeah. Yeah, we were, we were here while everybody else was not. Well, you were talking around about how we could have sworn it was you that said you did not want to meet last week. So, well, maybe I changed my mind and I forgot it. There you go. All right. Anybody else I'm missing out. Thanks. Hi, Daniel. I was still living in Seattle. I would have to have it. I would have a nice story to tell about not having power, maybe, but Did Seattle use power with the power? Yeah, the whole last since yesterday morning. They had, they have lots of power outages because they have had a little wind and how it is. Oh, wow. I didn't know that. It's 150,000 households without power. Well, okay, Remy Lucas, are you there? Yep, I'm here. All right. And I know someone has been flying by a niche. Hey, Doug. Hello and Christian Christian, you're there. Yes. There we go. Gotcha. All right. Hey, Doug. You had me marked down twice actually. Oh wait, did I have. Oh, there was okay. I'm sorry. Maybe I, okay. I was meeting you messed up with Chris. Maybe it was Christoph. I was getting mixed up. Yeah, it was Christoph. That was what I was getting mixed up with. Happy new year. Yeah. And Lou Dang. Hey, hey, dog. Hello. All right. And I'm missing anybody. Oh, H. Oh, I'm sorry. Hi. Oh, and it does mean well. Okay. Thank you. Yeah. Hi. H. A. Oh, are you there? Oh, yeah, that's how. Okay. Have you been here before? I can't remember. I apologize. How has been here once. And he's from Google. Google. That's what I, you can know what I wanted to ask. Thank you. Okay. Just want to make sure I get everybody associated appropriately. All right. Just one more minute. We'll get started. Oh, where's slinky? There's slinky. I was going to say it's going to be the slinky show at first. I want to make sure he's there. Hey, hey, hey. All right. Tell you what, there we go. Three after let's go ahead and get started. All right. So. I don't think there's anything worth mentioning there. Community time. Anything from the community people want to bring up. That's not on the agenda. All right. In that case. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. We get a 35 minute speaker session or maintainer track session. So as usual, we're looking for volunteers. If you are interested in speaking, please reach out to me. You don't have to be an old timer. You can be new to the group. Anybody's welcome to do it. This is just, you know, Brian overview of what the specs are about or in our status, nothing too deep, but it is a good opportunity to get face time for the community. If not, we may have to go back to the regular folks who do that, but I'm sure they have no problem letting new folks do it. If you guys want to. I would be very happy to yield to someone who's. Someone else is going to do it. There's enough video of me talking about it. I feel the same way. Yes. So please don't make us do this again. But actually that note, you know, if you are interested in doing it, we have lots of PowerPoint slide decks from previous talks. So a lot of it is just repeating the same thing we've already said, but, you know, some people's companies actually really care about those kind of things from tracking and performance perspectives. Hey, here's your opportunity to get out there. So just reach out to me. I think. Ginger, you tend to know this stuff. Do you remember where the deadline is for saying yes or no to this stuff? I know we have a little bit of time, right? Maintainer stuff is a February 7th, I believe. Okay, there you go. So we've got a couple of weeks. So I'll give it a week or two, but please reach out to me if you are interested. Okay. And I think we can have up to, I think for this kind of talk, two speakers would be the maximum, but one speaker is fine as well because it's only 35 minutes. Okay. Do you want to respond to that or do you want to separate email? Either you can do it to me in the chat if you want. Thank you. All right. STK. I don't see. Oh, there he is tumor here. I'm sorry. I got hit myself. It's not STK. I'm sorry. Okay. So we have an STK call this week, but last night checked, we have nothing on the agenda. So if you are interested in a topic, please add it. Discovery call will be next week. However, I would like to have a brief discussion. So if the STK call has no agenda items, I would like to have a discovery interrupt call immediately following this one. So please stick around. If you're interested in either one of those topics. Okay. Thank you. Thank you. Okay. Thank you. Thank you. Okay. Now, Timer, back to you. Anything you want to mention relative to workflow? Hey, first of all, hi, guys. Up in New Year. Hi, Doug. Yeah, we had a lot of last week. We were pretty busy. We were currently working on a number of things, probably moving from using JQ as far as the expression language goes. And we're looking at things like, you know, a lot of things, so that can be referenced by name throughout the workflow. And we're looking at a bigger things like. Dynamic condition evaluation and things like that. So there's a lot of movement going on starting this year. So I'm happy about that. And. Yeah. The community seems to be. Growing a little. Thanks. Cool. Any questions for class. For Timer. All right. Cool. All right. Now into the real work. So Slinky asked for some things to be moved up to the top because he wants to leave early. So Slinky query expression language. Yeah, so. I would love to start to hear with. Try to. To. To write down a spec for the expression language, which is similar to what. The. Climax proposed. And then I want to bring it to the community and. We can compare the two solutions we have in mind and. So. I still didn't do any work honestly. So I hope next week I can show you something. We had a, we had a lengthy debate last late last year. We had this versus sequel. And you want to go and take a look at the. The sequel. A message to like. Sorry. Yeah, I mean, I want to do that. I want to, I want to. I want to check it out what you proposed and try to write down something and. Okay, good. Yeah, that's what I wanted to do. Okay, great. I want to make sure we're on the same page. Yeah, yeah. I'm excited about the possible convergence here. So it's pretty good. All right. Any other questions or comments for slinky on the expression language stuff. All right. Summer of code. Slinky. Well. What I have to say here. Well, is there any update from your side? Cause I think. I think you were going to look into. I apologize. I don't know what we talked about that. I know. I recall you told me that you were going to look into that. Well, I did look into summer code. Cause I asked about, I'll say. I'm trying to point. Paging all this back in. And so. Google, I'm not Google. Clements had some concern about the. I like about a phrase, the IP. Or rules or whatever you want to call it around Google summer of code. And so I did reach out to the CNCF and. They said, it's okay if you do it, but they understand the concern that Clements had. And so they pointed me to this community bridge thingy. As an alternative, which I think was more. Open for lack of a better phrase. But I think that's as far as my investigation went. And I thought we had a brief discussion back around the Google summer of code thing, but I can't remember what that was to be perfectly honest. So let me ask you something different. Slinky. If we did something here. At all. Do you actually have a particular project in mind? Because I think that might be the first step, because if we don't even have a project in mind, then we shouldn't do either one of them, right? Well, I had a bunch of ideas for SDKs. I wrote somewhere, but. One idea was. I wrote it somewhere, right? In a previous. This. Yeah, exactly. Yeah. Yeah. Yeah. Compromise testing is one, the other. Thinking about new SDKs for languages that we don't support that. Should. Okay. Would it make sense then for you to look at the community bridge stuff to see if that would satisfy your needs? Because if. If Google summer code has some potential. Legalistic issues or just issues in general. It doesn't, but they get the same net result. Maybe we should look at community bridge. I can try to. Okay. Okay, cool. All right. Anybody else have any questions or comments on that particular topic? All right. Cool. In that case. Let's talk about this PR. You're up against linky. Francesca. Yeah, no, I was waiting for people to read it. Oh, okay. You want to quickly kind of summarize. Well, it's simple stated. I propose to remove the distributed tracing extension. Yeah, it turns out I have a, I have just talked to someone last week. Who's who was referring to that distributed tracing extension and using it uses it exactly in the way how we thought thought of it. And then it's end to end. So they're not using the transport level thing, but they're using this one. Well, as a write down at the end of the comment, if we don't want to remove this, I'm fine, but yeah, just, just let's make sure people understand this because so much time. I got these questions. But it was like, you know, the communities in this, in this case. So, I mean, at least let's give it a name that makes clear what, what's the goal of that extension. But it's literally that same functionality. You don't have to give it a different name, but it's end to end. It is, it is, it is intentionally blind to all the transport level stuff. And you haven't, you have an application a which is issuing an event and it has a, it has a context. And then there is some black box infrastructure of arbitrary complexity, which goes and pops out an event to a receiver and they then go and keep going with that tracing information at their level. And, and neither party cares about the internals of that, of that infrastructure that's carrying that event. The W3C tracing information is literally only for one transport path is literally just for for getting that event from the publisher stored into the store. And then it vanishes. That's all what this is, but functionally it's the same thing, but it's just end to end. But I have to, I have to trust that, that folks can deal with separate level of levels of abstraction. But if they can't, then I find it weird to go and take it away, take a feature away from people who can. Just, just go, it's lucky. No, I think that was me. I was saying, I was sorry, I've completely lost where the raise hand function. Yeah, I was going to comment. We're okay. It's in the reaction thing apparently, but I'm trying to find the reaction thing at least on my screen. Oh, it's on the bottom. Yeah. Okay. It's moved. I can see it now. Let me do this. I see it's part of problem here that it's just using the same attribute names. So, so people are sort of making the mental connection that it's exactly the same thing. I think that's the issue here. Yeah, the issue is the name and the name of the of the attributes. Right. I mean, get gets confused from that. Yeah, the same thing. It is. Yeah. Yeah, I mean, I know not. I would prefer it to stay, to be honest, because the problem you're going to get into is, Well, how does this work for MQP? How does it work for all these other sort of transports where the W3C standard doesn't, you know, isn't there. Well, but I stop you right now because we talked about that months ago that we shouldn't overlap with what other standard organizations are doing for developing tracing tools on each protocol. So we don't want to create an obstruction on that that we talked a lot of times about that. So, right. No, no, and I get that but so the question becomes why not leave it in them, because now you've sort of formalized from a cloud event perspective, how this thing is, you know, can work across all those different transports. Well, I guess my point is what what do you gain by removing it. Definitely gain that people doesn't get confused and don't prefer and don't develop bad implementations of that distributed tracing extension, which I think it's it's a problem people starts developing bad implementations. But it's the same concept. If you if you if you roll your suitcase in a dry in a moving train. Yes, you move forward, and both of you move forward, but the moving is completely independent of each other. So, it's the same concept that we are here we are moving we there's a there's a there's an underlying transport infrastructure, which we don't understand how that works. We can, we don't influence it, but we want to make sure that the functionality that is that is realized on top of it works independent of it. But that is relying itself on the same kind of tracing infrastructure. So the concepts and the frameworks and everything is the same. So, I mean, if you rename those things how do you then say, Oh, this ties into tracing. Ultimately, we want this to end up in the same in the same kind of infrastructure. We want this to be integrated in the same infrastructure it just end to end, but maybe maybe I'm either this too complicated or too simple for me. So, so if the biggest concern here is around possible confusion. Well, no, wait, never mind. I was going to say, so Slinky, are there, are there particular areas that you think are more confusing, or that are really, that are really tripping people up and maybe we can just focus on those particular things and see if we can address those, instead of, instead of just saying, we're going to try to kill the entire spec. Well, all people that came to me just told me a this is like w to see trace context. Yeah, I mean, should I should I use it, should I use it, should I use this or should I use WCT W to see twice context. Yeah, the answer is both. Well, that's that's the answer because why should I send both I mean, it's very easy because you're doing an HTTP request to a broker or to an endpoint. And you do an eight, you're tracing that HTTP request when the HTTP request is done that whole trace histories is over. But that event is then stored in wherever the HTTP request went to, and then you're starting another HTTP request from the other side to come and fetch that to fetch that message. And then you have another HTTP request, which has nothing to do with the prior one, right, and it's, and it's initiated by the client by another client. And that's where that starts. But then you have an event that has been published by someone, right. And you have the event that has been received by someone else. The relationship between those two, which is not represented by either the, the, the request that put that sort the event, nor the request that retrieved the event. They have a completely different relationship with each other and that is the customer has a new shipping address. Right. That is the event, and that was caused by some business activity. And now I continue that business activity with, I'm going to send that that customer, a piece of mail. That happens at that level of the app on the application level, and that activity, which is cause and effect. That requires tracing that has nothing to do with those two HTTP requests, nothing. So yes, it is exactly the same mechanism, but at a little different level of level of abstraction. That's why I'm saying both. You might be starting with the same context in the case where you're publishing a message, but one is just purely for the act of storing the event in the in the event infrastructure, and the other one is for end to end. So we're talking about two completely different levels in the application. This is for the end to end story. I'm wondering whether it's just a matter of adding additional text to explain. Yes, how to use this. So, I mean, we can, we can enrich this with with a clarification along the lines of what I just said. It seems like this paragraph comes off the close to what you were talking about, right. Yeah, that's, that's, yes. So so slinky. Is there anything that you can think of that we could do to make this less confusing. I mean, maybe, for me, examples and changing the changing the keys of the extension. I mean, definitely that's that's what will really make that clear that we are not talking about, even if it's, yes, it's tracing, but we are not talking about W2C trace count. But slinky, we're talking about exactly the same mechanism, the W3C tracing mechanism is an extensible one, which also has multiple protocol bindings. Okay, so then, so then what do we see to all that's my point I mean, yeah, when somebody that as a knowledge of W2C trace context comes to the cloud even spec and look at this say, what do I do now. So, well, it says that it's not intended to replace the protocol specific headers for tracing like the ones in the trace context. That's a point of clarification when you say it's the same mechanism. Do you mean it's the same conceptual mechanism or that it is actually it is actually the distributed tracing. It is actually the W3C tracing stuff just we're just doing it another level. Yeah, we're just doing it at the level above it. It's not just the same concept it is literally the same thing just we're doing it twice. The same thing a cloud events is it is an abstraction that rides on top of multiple transports, and we have explicitly designed it in multiple places, so that it's so that you can go and do a multi hop route from a device through a gateway to a cloud to a cloud gateway through a router to a router to a destination, which is whatever I just said, six different hops. We've done the transcoding work and we've done all of that stuff, right, and it should be possible. Once that event arrives at a edit this at a subscriber which wants it, that that subscriber then can go and create a tracing footprint, which originates at the device but doesn't but but doesn't have all the weird intermediary steps which are to be black box for most applications. In there, but it's just an end to end it's just you just look at it from the app perspective, you just go in and and and and tune out all the plumbing that's underneath it, and you only look at the app. I mean, we're ultimately we're, let me take one step further back right, we are the serverless working group. We should be interested in an abstraction, which is really ignoring all the weird group that sits out of the covers and is is taking care of getting the event from a to B, and provide something that then provides a pure perspective of for the on the application level, and don't think about doesn't think about the servers and how many hops the message had to have to go through. So that's, that's the goal of it. If we can go and improve that text and all for it. So, what are your thoughts monkey. Well, go ahead and improve the text. Next time I'll get, I get questions about this or I'll tell go ask Clements. So, I agree with you I understand the user case and completely okay with that. But the fact that creates confusion is still there. I'm okay with all you said, I mean, I'm not saying that this doesn't make sense or whatever. I'm just saying that this creates a lot of confusion. And I saw, I agree, but implementations where this was implemented wrong. Yeah, but I just think I just think putting a bullet bullet in the neck of the feature is not the right way to deal with it. So, so let's, let's, I'll take, I'll take the homework to go and write some, some three, three extra paragraphs in that spec to hopefully improve this and then you'll, you'll be the reviewer. So, I think Clements, Francesca, I know it might be hard, but if you happen to have slack messages emails with the exact text of the questions that people asked you that might help Clements come up with some text to try to preemptively answer those questions before people ask you again. Correct. Yeah, because obviously if they just, if they just voice their concerns she may not remember the exact wording but if you have, you know, emails and stuff like that. If you can pass those long the Clements I think that might help him. Yeah, we also have some issues in different SDKs, like one SDK just recently. Yeah, that'd be great if you just paste the URL to those things inside this issue or inside this PR so Clements can have those and use those as reference. That'd be great. Okay. On this particular topic that people want to bring up. Oops, I forgot. Oops. All right, cool. Thank you, Slinky. All right. Just in case you run out of time, these next, these three PRs I believe are technically waiting on updates from people. So I think this is Lance. I think this is Clements. I think I can remember who this one is but if you want any of these three please work on those updates because I think they're at least outstanding comments if not just action items to do something. Yeah, my time freed up so now I'll be able to go and deal with them. Okay, cool. Thank you. Okay, what I wanted to do was to talk about this PR. Now this one. Actually, hold on, I think I already have it here. This PR was opened up as a result of this issue where there was some confusion between, especially config and protocol settings, and I opened up this PR to try to address that and I'm not going to try to do a vote or anything on here. Because I want people to take time to read it. But what I did do is a couple of things, and I apologize if my thought process here isn't linear, it's going to bounce around a little. But what I did in the PR was talked about how there are three conceptual phases that a subscription manager goes through. I actually went back up, sorry. As I said, there was a confusion around subscription config and protocol settings in the subscription API spec. So that's the spec we're talking about subscription API. What I did is I said there are basically three conceptual phases and I purposely use the word conceptual because how you choose to implement this is up to you. But I thought there was three phases one was the event generation phase. Okay, then there was the event filtering phase, and then there was transmitting the event to the sink. As I said, obviously, you could choose to do all three and one you could choose, you know, however you want to code this up is up to you. But I think as you're coming up with these various options between config filters and protocol settings, I think most people, I think anyway have these three phases sort of in mind, and that's why we had three different configuration settings. Okay. And so what I tried to do is talk about those three phases and says Oh, by the way, you want to modify something that goes on in this phase, here's the property to use to modify that particular phase. At the end, though, I talk about how it's possible that one particular flag actually influences more than one of those phases, and that's okay. It's it's as I said it's in inflation detail, but the key thing is that inside the service description. It needs to be very clear. When someone reads the service description needs to be very clear which particular flag influences which part of the event processing. So for example if I define a configuration option that influences a filtering and event transmission, the definition of that configuration option needs to explicitly state that someone so they know which flag to use when regardless of which particular bucket these things go into, because I'll be honest with you. And as I was thinking about this issue over the Christmas break. Part of me jumped to well is this really that different from our extensions thing where we everybody kept saying well we need to have buckets for extensions right, and possibly different buckets for different things. And at one point my mind jumped to well let's get rid of all these three things right and just have the idea of just add your random quote extension to define your own flag and you tell us what that means. But we need some consistency. So for example, we don't want everybody to find their own filtering thing right we want to be able to have an extensibility point through dialects and stuff like that. Right, because but the base filtering concept needs to be well defined. So that's that that's why I ended up saying okay we can't kill off the idea of the buckets. So we need to be very clear in terms of how they're going to be used as people use them or define them in their service subscription or sorry yeah service this service description. Okay, so take take the time read this see if it's on the right path. I'll take any wording changes people want to make even the idea of killing three conceptual phases maybe that's wrong I don't know, but take your time and look through it and see what you guys think. I'm excited. This is great. Okay. Yeah I was going to ask at least that right now let me know if you guys all top your head think it's headed in the wrong direction or not. I think I think you captured it was right. Okay. So, take your time read through it. Let me know. Now, the other thing that related to the other gets me positive. Any other questions or comments before I move on to a slightly related topic. Okay, cool. Thank you. Please take your time to read that. It is, this is a change for the subscription API spec but I actually think this may be better suited for a primer, if we ever do create one. I think it's, I think it's not quite specky enough, but that's a separate discussion. Okay, so the next thing I want to talk about related to this is, as I was working through this entire thought process around this, I decided to walk through a very concrete set of examples just to sort of get my mind around this. And what I wanted to do was to focus on GitHub, because I thought GitHub presented some interesting challenges for us. Okay, so first of all the scenario here is a user wants to subscribe to the, the issue created event, as well as the repo push event. Okay, now I phrase these in terms of the types that we define in our GitHub adapter. Obviously, these are not the strings that get up itself knows about and we'll talk about that in a minute but this is the general scenario that I sort of walk through. Okay, now, if I was to create a GitHub subscription manager today, what I would probably do is make it to the script subscription looks something like this. Okay, so following our spec, we're going to talk about ACP. You need to specify a secret so that you're reached so that the sink and verify that this thing's actually coming from GitHub as opposed to some random endpoint on the web. You can specify the sink, and then you specify some options in particular the owner, the repo, and then the events that you want. Okay, now, I tried to write this up with as few changes to get a processing as possible, meaning I just wanted to write a very thin sort of veneer on top of what GitHub does today, which is why I did not use filters, because the idea of filters, at least, they don't talk about them as filters, right, they talk about just what events do you want to see. And I'll talk about later about how we actually could use filters to do that, but keeping this to the minimal, I decided skip filters and just put this all in config. Okay, and it and GitHub expresses these things as three separate entities owner repo and then list of events. So this is would be my first pass as trying to write a subscription manager for GitHub. Okay, and now this presented some interesting aspects first filters don't mean anything in my opinion to get up. Okay, now it is possible that they implemented the idea of which events you want to see as filters. But I decided to say nope, they didn't, and they chose to do it the exact same way as they're doing owner repo and have a little more of a hard coded nature to it. I think it's perfectly allowable for someone to actually code up their subscription manager that way. Okay, so my, the first thing I came to, and this was filters needs to be optional for subscription manager to support. I have one. So here's, here's a question that I have related to what you just said is, where's the source. Because the, the, the notion that we have in with source is, that's the thing that raises the event, which means that implicitly also means that that source has a subscription manager, and that's the thing you talk to. And then, within that source, you then further qualify the thing that you want the things that you want and you would go and filter on them. So there is a, because we have we have to two mechanisms here in cloud events that kind of compose with the subscription model. We have, we have the source that you can go and subscribe on. And my assumption is that that discovery will effectively enumerate all the services slash sources that you can go and subscribe on and then we'll give you the subscription address effectively for each of these sources, which can yield events. And then within those sources. There's a substructure. So, you could say that for, for GitHub, the top level is the source is GitHub cloud event spec. That is the thing you're interested in you're interested in events about that repo. That repo starts giving you events of all the kinds of things that may happen in that set repo and you issue is being created, and you pull requests is being created, etc. And then with a filter, you can then go and further constrain. What exactly is it that you want. That's how that's how I think about the relationship and then then effectively the, the, the what is that event is then expressed in the event type as well as in the subject, so that you can, that you can distinguish between. So you would have effect if a new issue is being created, you would have to have an event type new issue. And then you have a subject which, which points to issues slash issue number. It's relative to the, the root URI, which is the source. Because you're missing, you're missing our, our cloud events concepts of source and subject here. Right, and I'll get, I see you class on any, but let me let me try to honestly answer everything you said there, but rather one of the things that we can clear to me as I was walking through this exercise was how much of an implementation choice do you want to make for some people. Right, because this very first example as I said I tried to keep the changes to GitHub as minimal as possible, because at some point in the future I'm hoping we approach GitHub and say hey, you want to support a subscription API and they may say sure what do we need to do. And I want to be able to say almost nothing. Right, but the minute you start talking about well your subscription manager really should have been tied to the source which I think you may have been implying somewhere in there. That's, that's a different model already than what they have. Right, because they had a single endpoint that accepts a subscription today. The interesting thing is when once you do that with GitHub, you might be talking to me. Well, maybe, but but but you get my point right right because do we want to force someone to say no you have to have a subscription manager per source, or can you have a generic endpoint that handles everything. Do you make the source have to be quote a filter, or it could be a config option right and my mind immediately jumped to well, we want the spec to be as widely adopted as possible. So therefore we should allow for all these variants. And that's why I came down to this result this possible issue of should submit it before support filters or not. I think there's a there's a. The question here is, what is the subscription manager scope to because I might believe is that the subscription manager is managing subscriptions for a source. So there is not one subscription manager per system, but there are a system might have 10s of thousands of them, conceptually right virtually, you may have one implementation but really you can you can subscribe you can walk up to an object you can walk up to a resource in in on a site. And can ask the resource to subscribe. So I'm really thinking of that if you if you think about this in HTTP terms. I'm really thinking about this in a very extremely rest of fire in way in where literally a a you have a discovery you're a resource graph, which tells you, in this graph, there is these and these and these objects can raise these and these and these events. And then you just walk up to those objects and say, I want to go and subscribe. Here's some parameters. And that's what your sources are. And then your, your owner and repo parameters are already implied because you're already talking to that thing. Yep, I get that. I completely understand that model. I'm just, my mind is isn't there yet that says that has to be the model, as opposed to a single subscription manager that supports multiple sources. That's that's where I'm struggling with all this, but let's go to the queue since people have other hands up class I think you were first. Yeah, so just some thought that came to my mind when when looking at this. Quite interesting. It reminded me a bit of, we added this, I think it's called source template or pattern to the discovery spec. And then we had those parameter values that could be added. And I think for this example, they would exactly correspond to those config values you have here. So you would have then source pattern like github.com and then owner and curly braces and slash repo and curly braces. So you could even describe those config values in the discovery data with this. Hold on a minute. I was trying to find the link. Let's see what we have in here. Where was that you remember sure it's in all the examples. This isn't the specification of the source I think but it was the discovery spec or the subscription spec, the discovery spec. Okay, so where was that was similar to what you have for there it is source template. Right, but what's interesting is, I agree with you that when you're specifying the source, this kind of thing would be very useful, but I'm not sure that necessarily answers the question of the scope of the subscription manager itself. Yeah, maybe, but it's kind of describing how those config values relate to the source attribute. Yeah, I would agree with that. It's not, I haven't thought it through it was just an observation I wanted to make. No, it is good point. I can get and thank you for mentioning it because I actually completely forgot about this. I'm not sure how that fits into it but I'm sure it does somehow, but it. Okay. So, source needs to show up in your world it doesn't. Well, you said it sounds like maybe you're saying, but it may say source needs to be the, are you saying source needs to be the destination for the post or source needs to show up in here or one of both. So, one, either or. And I don't. And I don't think we, I think both, I think both are possible. So what I just explained was the already said that that's a very rest of far in view is everything can have a resource that can have a subscription manager of course you can also have the simple review of having a single endpoint for subscription management. But then you would then you need to go and pass the source as a parameter. What's, what's, what's a little, what's a little strange for a generic mechanism here. What's really strange is that you have in your in your config, you have concepts that are specific to the target service right owner and repo and events. You basically have to know those and we have, we have abstractions for those in the form of source and subject. True. So that's an event types. So, so the event, the event type. That's represented by events and I think the owner and the repo is really with the source you want to go and and and talk to. So whether the sources indicated in that in the subscription message, or whether it's implied by the address that you're talking to is something that we can make such that both are options you can use. Right, and to be honest, I always thought that if source was going to be part of this, it actually would show as a filter, because you may want to do a subscription across sources. I don't think you can. But isn't that an implementation choice. Right, because you may say the source maybe say a GitHub issue, but you're subscribing to the repo. Yeah, but then you're subscribing to the read uses with GitHub. It's actually a very simple example, because it's a strict hierarchy. You could subscribe to GitHub. And then get everything it's related to everything in GitHub and just filter it down, or you can go and subscribe to a repo and then you get everything is related to the repo and filter only that down, or you could go and subscribe to everything that happens to a particular file. And then you might go and filter just some subset of those, those events down. Oh, yeah, okay, so I'm sorry, my mind jumped to all of you specify source somewhere in here you're only going to get events for that source but I forgot you can get events for innocence sub sources. So, yeah, okay never mind. Okay, let's let's go back to the queue. Anish. I don't know where to start. So filters. I thought filters was always a section where we specify a cloud event attribute in matter to receive the events or to filter the events for the consumer. Right. So if you want to filter what a subscriber needs. It's usually based on a cloud event attribute. Right. And coming to the questions of GitHub like for example now GitHub is just not GitHub.com there are thousands of enterprise Github's. So, if we don't mention a filter criteria based on source. I see that as a problem because filter was always like, I don't know whether that's still in the case of for example, K native K native introduces source as a filter type as a filter criteria. So are we completely going to ignore that now. So my perspective was I think source should be about thing you can filter on. Okay, so I do I do agree with you on that, on that point however, as I was walking through this I realized that there may be things that you need to filter on that don't necessarily show up in the image. And therefore I thinking we need to support the idea of filtering on those non cloud event attributes or non event attributes. I'm not sure 100% related to what you're saying but you maybe you reminded me of that particular realization I had as I was going through the analysis. And also the conflict thing is is also a bit confusing because conflict can not only be in terms of the event delivery it can also be let's say introducing properties in order to in order to communicate with the sync. I don't know if the sync was protected by some sort of client credentials. And you want to also, so conflict becomes this huge generic envelope where you want to just stuff everything or what. So I'm also kind of doubtful on the term conflict over here again. I know I down here I talked about how on the previous PR how any one of these could influence many different things or, or everything right. But, and that's when I was starting to struggle because as if I'm implementing this thing I don't necessarily want this specification to force me to change my implementation. Right. So, anyway. Okay, amid your next. Let's go back to the allowed values for source and where we want to put it. One question I have is that are we, for example, supporting expressions for source as well. And this is something we're discussing earlier what if the subscriber is interested in receiving, you know, some patterns of source when subscribing. For example, I don't know all the files in a GitHub repo that have this specific extension name, where we do that if we, if we use sources as part of the endpoint or, you know, make some other assumptions. So correct me if I'm wrong here but Clemens I think when you start talking about if, if the if this post was sent to the source that we would still allow them to specify a source as a filter. And at that point you can do wildcards or whatever kind of filter expression we have, right. I mean you would. So we have a. So think about. You subscribe to the GitHub repo. And so that's your source so you walk up to you walk up to the GitHub repo go to its subscription endpoint. So let's say under get up.com slash slash cloud event slash spec. There is a slash dollar subscription endpoint that you can talk that you can talk to. And then you would walk to walk up to that and you would go and subscribe and now you go and specify a filter and the filter is a prefix filter on subject. Main slash tree. No, sorry slash tree slash main. I don't know exactly forget slash whatever file. And so you specify a specify a file path, and then events are giving raise but only the ones that are that are related to a particular file prefix would then be would then be given to you, and that filter would be on the subject property. So what if what if they are part of the source. I mean that's that's something we were discussing earlier right we can have some sources and what if you know it's a structure is like the same thing. If you, you can still use source as a as a property there. But if you are subscribing on. If you are subscribing on a particular scope, only subscopes can be can be there but you can absolutely go and do a prefix filter on on on a subsource. If, if that's, if that's what's being given but my assumption is for event delivery. There's a difference mechanism in general, when you are, when you are going to a source and you're subscribing to events that are happening from that source. It's also the source that is raising those. It is just to understand your, your thinking better. So it means for example for me to for the customer to subscribe to the, you know, most common ancestor, for example, and then further filter. For all those subsources is that what you're saying that this the split we have in the structure is in the metadata structure is we have source and subject. And think of that as sources the scoping for why you subscribe, and then subject is the path to the object about about which the path to the object within that scope, to which the event actually applies. So, so the way how we do this in so very without without going into hypotheticals concrete example of how we do this in in Azure in event grid is if you're subscribing to the blob store for events when blocks are being created. You're subscribing on a content on a storage container, containers are our directories where you can go and store blogs. That's why you, that's why you subscribe that's yours. That's your scope and effectively that's also the subscription manager used to be talked to. And then that thing is raising events where it gives this the container as its scope as its source. And then it gives you the path the path to that file as the subject. And then you can do a prefix filter, or you can do a suffix filter or you can do both. So you can go and do on the subject you can go and do a suffix filter for let's say dot JPG, and then you can only get events raised if a JPEG file has been created somewhere in that path. Or you can also or and you can also create a prefix filter you say, I'm only interested in files which are coming from this particular sub directory. But the scope is always the container and then you with a subject, which composes with that container name, you then get to select which of the events scope to which sub object inside of that container. You're getting events for and that's, that's a model that's working for a ton of different scenarios from, you know, the block source the simplest one, and then keeps working for, you know, all kinds of other things like the resource events that are being raised. And for all the other tech, technical things in Azure, and then we have a bunch of ISVs, which are also doing that for business objects, we subscribing on a particular item inside of an application, like a customer in a CRM system. And then you're getting these events raised for various aspects of that customer, and they, you can go filter them by their hierarchical structure with a with a prefix filter. Okay, I'm going to have to, we have three more other hands up, or 200 ends up, and we're running low on time obviously this this conversation is not going to end today but I want to at least get to the people have their hands up so amid, are you, are you done or do you have more things you want to raise. That's fine let's let's move on. Okay, we will continue. Yeah, this is not going to end anytime soon. Yes. Okay, Scott, you're up next. I think the conversation is kind of working that way but I just want to make sure that we're thinking about the. So just in a way that you can propagate up or down depending on how you look at the architecture, all of the discovery API pieces that we can do the same thing for subscriptions so I intended this in my usage to be the sort of forwarding events so middlewares can forward or aggregate up subscriptions to the correct endpoints as they get more and more specific to the producer. So is that being considered when people are talking about this. I'm not sure. I'm not sure. Can you give me more concrete example of what you're like I want to subscribe to say GitHub events. I'm not going to subscribe to GitHub though I'm going to subscribe to the, the provider that I interact with to get me those events. So, to me I wanted to I want to be able to support both I want to be able to support them talking to I think you're talking about say Canadian infrastructure versus talking directly to get up. I want to be able to support both scenarios. So, this, this idea that there is a tiered infrastructure. Right, I'm not actually talking to get up I'm talking to some intermediate like K and a native. Yeah, okay. Yes, that's that's I think that's where we were in the middle of the conversation was like, it should be able, it should be possible to, to, to have the subscription manager to be outside and inside. I would agree. Okay. Remy, I think your hands up. Yeah, I think I'm pretty aligned with what Scott said, like my goal as a manager like the full idea of the company is basically to have those kind of tier like middle tier where I connect all the external service to mine, and then I will give access to a subscription to my internal like my employees. And with some restriction permission that is managed directly on that subscription API. And I think that's the difficulty that you were raising do I think we should try to not enforce too many things because otherwise it's going to be hard to apply to all the different use case. Yeah. So I guess this might give a question back for you Remy and I think actually Scott this may be for you as well in the cases where your subscription manager is a piece of middleware or it's outside of the event producer itself. So imagine in those scenarios, you don't have the notion of one subscription manager per source. It may be one subscription manager actually handles not just multiple sources but potentially multiple event producers as well. So that's my thinking because like let's say Github so I manage Github on like the top of the enterprise of Github. So I get all the events from our repo but then I want to dispatch it and filter it for each team inside the company so we are not like we are a small company like we're 200 people. So compared to the size of the other gentlemen it's really small. When you do that. That means I have keys to get all the events from Github but I don't want people to have access to those keys or to be able to get those so they won't be able to subscribe the same way I will be able to subscribe by managing the company. Right. And what's interesting about that scenario is how does the person doing the subscription tell you as this piece of middleware which event producer or which source they want the events from because that information may not necessarily show up in the event itself. So to ask to say oh well that becomes a filter right it may not necessarily be the right answer and and the shape of that subscribe may look very different when you're talking to your piece of middleware then it would be if you're talking directly to the event producer. Correct. Like typically internally I can push for like a certificate authentication while connected to Github using their token systems usually so I can have a break of authentication and security between my middleware where it's connected to and what he provides my internal customers. So that's that was my goal. I think I tried to explain in the past probably buddy I still have to write a better document about that. But that's my overall thinking and why I joined this group. Sometimes I get lost. Okay. So, oh sorry go ahead. Yeah for me that as you aggregate that subscription up the chain to the more and more specific producer. The thinking was filters kind of roll off. So the broker would you would filter on a specific source and then as that aggregates up the chain that when you delegate to the next layer you would remove some of the filters because they don't really apply anymore. Right but see. Time this is a great conversation that would you know conceptually Scott I would agree with you but the problem that I run into is okay fine. If that's true, when you if we actually do support something like SQL query thing right I can imagine this query, also including a subject, right, as part of the condition or part of the part of the condition right. What I said is like okay that means someone needs to analyze this SQL query and remove the subject or remove the equivalent of the event producer from this condition, before he passes it up the chain, and removing that from this SQL query can be very complicated without without ensuring that you don't lose the desired semantics. And that's when I start thinking oh my gosh, we're overcomplicating this thing. Well, this was all part of the previous discussions anyway, we're taking out of time, obviously, as I said this conversation is going to keep going, but this this doc is linked in in this issue seven seven to four down here with some of my thoughts of things I wanted to discuss with people before I went through the pain of opening up a PR that may not be valid. But I do want to continue the discussion in future calls. So please, when you get a chance, look at this doc, add comments to it and stuff like that because I think the answering some of these questions as I was walking through this I think is going to help us clarify the way the specs should be written. I think there are a lot of things we haven't even thought about yet. Okay. Alright, technical overtime I apologize. Brian, are you there. Okay, did I get it did I miss anybody for attendee I got, I think, I think I got everybody. Just here's the quick list. Okay. In that case. Thank you for joining. If you are interested in the SDK or the discovery interop please stick on the call. I know Scott you have to leave so I will make it but I did want to talk very briefly about the interop stuff, just for five seconds or so. Okay, so thank you everybody for joining we'll talk again next week. Who added this. That would be me, the new guy, the new guy. Okay, who gave you the right to add topics. Okay. That's fine. Let's just give people a minute to leave and then we'll start talking about it. I'm still here for the discovery. Interop stuff because I am now committed to writing some code. Cool. Yeah. Okay. Well hopefully this will be short, and then we can switch over back to the interop stuff. Yeah. Okay. And I'm just hanging out. Yeah, anybody can hang out no big deal. All right, tell you what, let's go ahead and get started. That was john right. Yes, sir. Okay, go ahead and raise your topic. Yeah, so I just wanted to raise the existence of the PHP SDK I know that there hasn't been a lot of traction on there. I did look in the cloud events SDK slack channel and they're really only a few messages around the history of just searching for PHP. So at our organization, we're currently utilizing Laravel, which is a common PHP framework on top of Lambda. And some other AWS services and we see that, you know, there's, there's a need within our organization for allowing us to use a PHP SDK for cloud events, and then to also be able to use that alongside some, some other languages and services that we have. So I know that, like I said, the new guy raised this topic, but also I'd like to figure out how I can support that I don't know if there's an active maintainer or point of contact there. But I have set up a fork myself and read through some of the governance there. I just want to make sure that if we do get this rolling that I can help set a good foundation for this because I think that the PHP community would really benefit from cloud events. I think they'd really benefit from a lot of the CNCF projects and so any, anything I can do to help bring cloud events on board in that community I'd really like to help participate in whatever you all think is the best means of that. Okay, well cool. Well, again, thank you for joining. As you, as you know, there's really isn't much there today. So this is wide open and anything you want to throw at it, we're all for. In the past when someone new came along and said hey you guys don't have it for this language I want to do it. They would immediately become a maintainer because no one else is doing it. So it made perfect sense. I need to go back and double check because we just recently introduced a whole bunch of governance rules about how maintainers are created. And I need to go back and refresh my memory about how we do maintainers for brand new languages. So now we're going to this isn't technically new repo but for all intents and purposes, it is new right. But chances are, you will be able to make you maintainer, and then feel free to do pretty much whatever you want as long as it's headed in the right direction. I would look at the other SDKs to get guidance in terms of how they operate or what they've done in terms of design choices. We do have an SDK read me or a MD file and the root of our repo that people would add to occasionally to provide guidance for other SDK authors if you want to look at that. But otherwise, to be honest, it's kind of a free for all for you right now. We're excited to have you, but we don't have a whole lot of guidance in terms to tell you what to do other than make it so. Okay, sounds good. I know there's a lot of really great examples. I use go in my day to day, and I'm a big, you know, I'm a go for so I plan to use that SDK as a good example is because I really like the API there. As well as I know that there are those conformance tests that are available. I don't know if those are part of the spec repo or somewhere, but I've got that bookmarked so I like to go ahead and just use kind of the go and maybe even the rust SDK as good examples, and just try and maintain the good work that's already been done in those SDKs as part of the PHP step just to bring it along. So so long as it's a good plan, I'll start making some progress there and pinging people. Sounds great. Anybody else have any comments or recommendations for john as he moves forward. Okay, the only thing that popped in my head as we're talking about this is sometimes people have often when they look at situations like this they try to say oh well we should have tried to have commonality across the SDKs. And their definition of commonality will vary right some people say we want to make sure we support similar features, while other people actually go as far as I say well let's make the user experience similar. And that could get kind of tricky right because I think where we've landed. Please other SDK guys speak up because I'm not technically an SK person but I think what we've landed is first and foremost, the user of an SDK wants the SDK we want the SDK to feel like a natural extension of that particular language right so for example it'd be a mistake to introduce go lang isms into a PHP SDK, unless a PHP user would be feel perfectly natural with that particular mechanism. So, commonality across desired features and semantics, but not necessarily commonality in terms of the exact design because every language may have their own idiosyncrasies that makes sense. Yeah, that makes perfect sense I'll keep that in mind as part of this. Because we don't want a PHP developer to feel out of place by think look at the same oh my gosh this is go why is it in PHP right. Yeah, for sure. So we have a few internal devs who are pretty much full time PHP so also kind of kick the tires around internally, since we're wanting to use this as a daily driver. I'll get feedback from some people internal and of course, you know, look for any feedback from the community on making sure that it's PHP centric. Okay, cool. All right, anybody else have any other comments questions about that topic or guidance. Okay, any other topics for SDK stuff. All right, in that case, let's switch over to the interrupt thing for a sec. There were basically a couple of objectives that I wanted to, or that I have in terms of having this call today, even though it's not scheduled for next week. First is, we originally talked about having interop event in November. Obviously that did not happen. And I know everybody was busy and I'm not, I'm not pointing fingers, because I know everybody myself included just got swamped and it just didn't happen for variety of reasons. However, I do think we need to push ourselves and nag ourselves to make something happen here now. I think going through this type of exercise is going to be a great in terms of trying to flesh out the spec. I think that's all well and good. And I, at the same time, though, I do think having some sort of interop, even though I do think it may be a little premature given some of the huge design discussions that we're having today. I do think it would be useful to have at least the start of people coding to help expose even more design gaps. Okay. And so what I did was over the last couple of days is I wrote down very quickly what I would expect a implementation of a discovery endpoint, a implementation of a subscription manager to look like or to support from a testing perspective. For example, if you're going to participate in the interop, your discovery endpoint needs to do this right it has to be able to support you know up to at least 100 different services in there so we can get pagination testing going right but not necessarily all the time maybe have a flag that tells you how many you want right. These are all the various things I thought people should be forced to try to implement as part of their interop coding efforts and then the tester or the client who right or the person who writes up the client. They should test various things so I started just quickly jotting down what I thought they should test, and then I did the same thing for description manager right so for example, I think we need to have common services, so that clients don't have to change their code, may subscribe for every single endpoint rather we have common subscriptions or common services available, right so people can get similar semantics. One of the things that I thought we need to sort of agree upon as part of interop thing, and what I wanted to do was to mention this today. So you guys can take a look at it, and start iterating on this list. That way people have a little bit more concreteness to what they're supposed to be coding, because I think one of the reasons it was hard for us to make for progress here was, it was a little bit nebulous in terms of what people were coding up right always basically said is here, go back, go code it. And you can do that to some extent but I think it's easier when you have something very concrete in mind. And that's what I was trying to do was give very concrete scenarios that we expect to be tested in the interop event. And maybe that helped jumpstart some of the development efforts. And that or people would hopefully just need to find time. Anyway, that was it I just wanted to bring this up as a nagging reminder for all of us myself included to start taking this little more seriously because we got to start making some progress here. Any comments in my my off base is this completely insane for me to head down this path. Just looking for feedback here and how we can speed things up here. I think it's good. Sorry. It was worth saying the same things. Okay. Yes, giving, giving a direction and something that everybody kind of needs to go on and implement is useful. We're, I think since we're since we're working a bit in the abstract necessarily since we're just doing basic plumbing. I think this is required. I think ultimately what will help is once we are a little bit further ahead of having some mechanics working is to do what we did for cloud events in the beginning, like the airport scenario thing. Where we get we can probably go and just take that same basic scenario, and just, and just make it extended with that functionality. I mean we probably don't have to use the same, the same code but we don't have to go and introduce a new scenario I think that was that was pretty nice. No, I do. I like the idea of extending that one. Just in case you guys haven't looked at it or if you don't remember, we did actually have very concrete sort of high level scenario in mind for example the circular discovery endpoint kind of thing. It just never panned out and I think it's because it was still a little too abstract. So I do like your idea then is to make it more concrete, go back to our airport scenario. I think, in fact, the other Doug did pay us over vacation, I think wanting to see how we can move along in that direction as well. And actually Clemens or as a reminder, check your email I think he sent I think I copied you on an email back to him because I wanted to get your take on something. It was sometime over Christmas. Okay. Just start by D. But yeah okay. Yeah, so I'll have I have plans to start coding Monday, and then have have something I mean that at this point, the most important thing is that we have multiple people writing code that can then see whether you know the spec makes sense. But of course I'm going to write this kind of with some product ideas on the back of my head, but it's going to be a very simple C sharp. I don't know if it's a command line at or or what what goes to that. Yeah, or added functions or an added function or something like that. It makes sense and just let you know, there already are some implementations of discovery and points out there. So I'll be we can add you to the list or you could do if you're writing more of a client kind of a thing or this is there anybody not just Clemens. To play with, I'm not sure how far along they are. I think, for example, Scots has all local URLs for things so you can use subscriber mean initially work stuff like that but some of them are different stages so give it a try. Okay. Anyway, that was it was it was more of a nagging thing more than anything else. Okay. Any other questions, comments on the discovery stuff. Okay, before we adjourn just a question for you guys going back to the entire discussion that around this stuff. I love today's phone call right I love I think diving deep into walking through very concrete examples like this are going to help expose gaps in our design or thinking. Do you use the weekly phone call is the appropriate spot to have this discussion or do we need to set up a dedicated like possibly two hours or more dedicated time to have a deep dive virtual whiteboard session because my fear is that one hour isn't enough and and we need what basically that's it we one hour just isn't enough a week to make real progress and we need dedicated time to sit down and pass through the stuff and one gigantic session kind of a thing. This is the, this is the, I think this is the thing where we're really missing the face to face conference meetings because that's what you would ask that sort of stuff out. So, I think, I think, given that it's unlikely that we're going to have that this year to be realistic. We should go in and figure out how we can go into a virtual face to face with lots of time. Okay, because I was I was thinking about suggesting that during next week's phone call but I want to make sure that I wasn't the only one thinking that. So, okay. Ultimately, we need to have, we need to have some some some time where we can also without speaking about particular documents and wording, etc. Just someone goes on and talks for a little while to to explain things without things being rushed and so we can. We should go and have a day where we can have ample time and just work work through those things. Okay, I will add that to the agenda and see what kind of reaction we get and see what happens should have a cloud event demo scene party. Yes. All right, any of the topics anyone bring up on anything since we're all here, or some of us are here anyway. I have to rush to a meeting that it's late for but good to say I don't have a speaking role in that one but I have to leave. Okay. Well, thank you Clemens. Anybody else have anything that they want to bring up. All right, not hearing it. I think we are adjourned. Thank you all for joining. We'll talk again next week. Bye bye. Thanks.