 Good morning Doug. Hello. How's it going? Okay, how's everybody? Oh, actually I'm five minutes early. Sorry, sorry, I didn't even recognize that. I thought I was just going from one thing to the other and I saw the notification. Yeah, usually if I see a notification, I don't jump over it then I'll forget that I'm late. So. Well, you're much more prompt than I am, at least for this one. You're ahead. So. All right. Hey, John. How's it going? I'm doing okay. How are you? Pretty good. Good. You guys done with all the crazy frigid weather? And it's funny you should ask. It was starting to get really nice like last weekend and then to this week we got down into like what felt like like almost snow weather and we have a rainy day today. Apparently we're beginning hurricanes or tornadoes or something today. It's like crazy. Well, sorry I asked. Well, it keeps the exciting, you know. Where are you actually located? Are you in California? Yeah. Yeah, I'm in the Bay Area. Okay. So what's it like out there? Are you guys getting warm yet? It is schizophrenic. So it'll be nice and warm and then like today is the same thing. Overcast and you know, we'll probably drill through a little bit. People all hung over from St. Pappy's Day or something? Well, we are a little early. So although Clemens can't make it. So, you know, speculate however you want on that one. You, Tommy. You. Hey, Ginger. Hey, Doug. And Eric. Hey, Doug. So, Ginger, I heard a rumor that Austin or Texas, I guess, is getting some interesting weather today. Is that true? Not in Austin, thankfully. Really? I got to know from somebody saying, hey, Doug, can you do this for me? Because the guy they normally go to is in Austin and he heard that they may be having some kind of weather like snow or something on there. But I guess maybe they were mistaken. I'm sure as heck hope so because I still have PTSD from the last storm. So, it's supposed to be sunny and 80 today. So. Oh, nice. Okay. All right. Let's see who's there. Jennifer, are you there? I am here. Excellent. All right. And Jim. Hi. Yeah. Hello. Tim. Hi there. Hello. Hello. Hello. And Remy. Don't worry, Jennifer. I would not forget your last name. I know there's not as many Jennifer's these days and probably not attending this meeting, but you never know. Usually I only add people's names at the end when there's the possibility of a duplicate. Even though we really only have like one David and one John recently, they're common names that I don't run into it too often. But Jennifer, you're right. We only have one Jennifer. And frankly, I think we only have two girls. So there you go. That's another aspect. Yes. This makes you guys also special. All right. Jesse. Hey, Mark. Hey, Doug. Hey, Doug. Good morning. Oh, hello. Hi. And Manuel. Is that you in there? Yes. Hey. Hey, that's what I thought. Okay. Cool. Lance. Mr. Lance, are you there? Oh, Slinky. Hello. Oh, hey, Slinky. And Lance, you will come off mute yet? Lance having issues. How about Klaus? Hello. Hello. That's what I thought. Okay. Hey, Lance. I got you. While we're waiting, last time I checked, excuse me, there were no topics for the Discovery Interop call today. So if you have any, go ahead and add it before the end of the primary call. Otherwise, we're going to have a very short meeting. And hey, Scott. All right. One more minute. Then we'll get started. All right. Three after. Let's do this thing. We have a short agenda today. All right. Let's see. I don't think there's any way to nag about reminders or AIs. Okay. Community time. Anything from the community if you want to bring up this, not on the agenda? I did have one, Doug. I don't know if it's relevant now. Just related to the correct handling of, let's say, malformed events. And I think it's applicable to SDK writers and it's come up in the context of an issue I found with the Java SDK. So I think we need a bit of guidance on expected behaviors. Okay. Tell you what, since that's a very specific technical issue, I suspect we'll have time. You okay with us putting that at the end of the agenda? Whatever works for you. Okay. Cool. Yep. Thank you. So let's do this. I'm actually, hold on. Whoa. Is that what I meant to do? All right. Cool. Thank you, Jim. Any other possible topics? All right. Moving forward then. We had an SDK or we were supposed to have an SDK call last week, but we didn't have any topics. We skipped that. As I said, interrupt discovery call this week. If you have a topic, please add it to the agenda. Okay. Moving forward. I guess I dropped it already. I don't think there's anything less for us to do for KubeCon, other than Remi, I know you're working on your presentation. So when that's ready, we'll make that available for the group to review. I think that's about it. Unless someone can think of something related to KubeCon, we need to mention. Okay. Not hearing any. Tim, or anything you want to mention from the workflow spec? We're just still preparing for the next release, hopefully this week, and also working on the slides for our presentation for the updates. Okay. Cool. Any questions for Tim or? All right. Moving forward then. Oh, there's my KubeCon section. Sorry. Yeah. Ginger, you didn't notice any notes about sending it for office hours yet? Did you attend to miss these things? No. Tim had just sent out a reminder that it was due, I think, requests were due in today. Right. Either today or tomorrow. I just confirmed with her that she actually got it, because I don't know if they copy us on the request. Okay. Yeah. I did notice that, and I did actually double check with them as well to make sure that they got our request. So I think we're all set. Okay. Cool. Thank you. All right. Okay. PRs and stuff. Let's go ahead and jump right into it. So Slinky, you're up first. I haven't noticed any updates here. And as we talked about last week, we were hoping to get this one merged as the first official draft of the specification. Is there anything you wanted to mention, Slinky, about this one? Nope. Let's go for it. Okay. Any questions for next week? Yeah. I want to just one thing. That now, next step, to Lionel and I will work on the grammar using the antler format, which is a pretty famous format. And yeah, while developing that, if we find any issues with this back. All right. Cool. All right. Any questions for Slinky before I ask about merging? All right. Any objections or concerns with merging this PR? Excellent. I'm not sure who's typing there, but I'm going to just wipe it. All right. Thank you all for that. I don't see grant on the call, so let me go ahead and bring this up. And if I remember correctly, I believe we talked about this one last week about possibly modifying our process a little to make it a little easier to call out significant changes that are worthy of a, what's the word going for, release notes type of document as we go through the various releases. So he actually made some changes here. I think we could ignore that for right now. I think this is basically the bulk of what he's suggesting here is to use the, this commits conventional thingy. I think Lance, you guys use this and at least the JavaScript SDK, I believe. Yeah, we do. Okay. Any questions or comments about this? Any concerns in this direction? I suspect the biggest, if you want to call it pain is that people now have to just adhere to it as opposed to just randomly opening up PRs and stuff. But I don't think it's a huge burden, but to be honest, I haven't actually used it myself. So if anybody wants to chime in and good or bad about using this, I'd love to hear your feedback. Nothing? Okay. Does anybody need more time or want more time to think about this before we consider merging it? I would love to have more time to review it. Okay. Fair enough. Thanks. Yep. I don't think we're going to rush. That's fair. Okay. So we will hold off till next week. Thank you, Jennifer, for speaking up. And where's that one? Here we go. All right. Cool. Any other questions or comments on this one? The other change is I think this is just indenting to clean up the table of contents. And I guess you just wanted to do some linting stuff to ensure that you actually follow the conventions, I think. But I'm not sure. I haven't actually looked at it. Anything, any other questions, comments? All right. Moving forward then. All right. So on last week's call, we talked about there are two different issues out there. One was how to handle or how to interpret a get to a discovery endpoint where suddenly a service vanished. How do you interpret that? And then there was a second question about do we want to introduce some sort of lifecycle around the services in the discovery endpoint? And we decided to split those two up. And I took the action item to go ahead and create at least one PR, which was around the missing service and the get response. And basically what I did is down here in the get services response, I added this sentence here. So any service previously turned to a client that does not appear in this result can be assumed to be deleted. Okay. So I think that's consistently what we talked about last week, which was you really have no choice but to assume it's gone. And granted this, this has nothing to do with the case of you get back some other error condition. This is you get back to 200, you get back a list of things. And this one's just missing, right? How do we actually interpret that? So this PR is about just adding that one sentence. I do have another PR, which I think we need more time to think about, which deals with the full lifecycle thing that we talked about about possibly introducing a deprecation type field and stuff like that. But this is just about to handle the missing entry and a get. So any questions or comments on this one? Okay. Does anybody want more time to think about this one before we consider merging it? Okay. Any objection then to approving? All right. Cool. Thank you. All right. So this one, I think may require a little more thought, especially since someone made a comment in there, which I haven't responded to yet. So I think it's premature to merge. Let me hide the comments first. All right. So what I decided to do here was to take what I consider to be the simple approach, which was start out with just adding a removal time. And the presence of this attribute in a service description indicates two things. One, is that it's deprecated. And two, obviously specifies the time at which it will be removed. It's not allowed to be removed before that time, but it can live longer after that time. So there's no guarantee that it will be around anywhere after that. But you could include it if you wanted to, or you could live on for a while. It makes no, this definition places no burden in terms on what it means for existing subscriptions, right? Whether they're still valid or not. I figured we could talk about that later if we want to at all, or if we even want to, because that's a whole different wall of wax, basically. But anyway, that's basically it for the initial proposal I put forward just to get the conversation going. Now there was a comment in there by somebody, I can remember who it was. I guess it was Tom. He was wondering whether we need to allow people to specify not just the time, but an alternative, meaning point to another service to say, hey, this one's going to take its place. And I'm assuming, yeah, based upon what he wrote here, he wants it to be optional. I haven't thought deep about that, whether I like it or dislike it. I just think it's an interesting way to go. At first, I was a little hesitant to it, but then I realized that's not that uncommon. We do things like 301 for redirects and say, go look over here kind of stuff. So it's not weird. I just got a little worried about whether that's introducing a whole new layer of complexity into the model, as opposed to just a simple timestamp thing. But the more I kept thinking about the more I was warming up to it. So let me go and pause there and see if there are any questions, comments, how people feel about either of these directions or ideas. Somebody has to pick up. Otherwise, I'll pick on somebody and I already have somebody in mind. All right, let's start with some J's. Jennifer and or Jim. Because I know, Jim, you're whooping up one of the issues. And Jennifer, I know you spoke on this before in the past. Either one of you want to chime in here. Any thoughts on this? I'll let ladies go first. There you go. Jennifer. You want to chime in or not? You don't have to. You don't want to just I'm just buying myself time, obviously. That's right. Stahl, Stahl, Stahl. Jennifer, you still around or she might have stepped away. I'm still here. Oh, there you go. Okay. Silence means you're you don't want to speak or it means that my four year old just walked in and I got I got distracted. Okay. I'll give you some chance to think about I'll pick on Jim then you're looking for any possible feedback on this proposal for adding a removal deprecation removal time and possibly a point or two alternative. So, Jim, any thoughts on this one? That seems reasonable, I think. Yeah. So we're saying it's going to be removed on this time and replaced by so what do you consider would go in that alternative? Is it appointed to something else or is it just text? Yeah, I don't know. Tom did not say I was kind of assuming it would be obviously something unique, right? So it could be I can't remember we have IDs here, right? Yeah. So it could be just an ID because I think that's the only thing that's guaranteed to be unique and immutable. So that might be the obvious answer, but to be honest, I haven't thought about it. Right. Okay. I mean, actually, sorry, go ahead. No, it's going to say, I mean, if there is an alternative, then presumably you should reference it through its ID, that would seem to make sense. And presumably the lack of that means well, we've decided just not to offer this anymore at all in any shape or form. Yeah. That'd be my interpretation. Yeah, the only downside to using ID that I can think of would be if you wanted to point to a different service discovery endpoint. I don't know whether that's interesting a layer of complexity again, that's too much or not. Yeah, I guess it depends what you expect this to be humanly readable or machine, you know, humanly interpreted or machine interpreted, I guess. Right. Yeah, I was kind of thinking if it is in a different place, it could be a URL, right, but then still ID based. But yeah. Anyway, John on your hands up. Sorry. Go ahead, John. No, it's like the URL that's the URL to the service, isn't that? Wouldn't that work? Yes. Yeah. If we use that and I'm thinking, yeah. Is that relative to this particular discovery endpoint? It's not relative. I believe I don't have to double check it. I think it is supposed to be a full URI and I think it's probably immutable since the ID is immutable, but I'll double check on those because that might be the safest way out of there. Yeah. But in principle, yes, I would buy into that change. Okay. John, your hands up. Yeah, I guess in reverse order, yeah, I think the unique URL would be better. The question about the alternative piece is, like, what does that say if it's there or not there? Like, what are the guarantees if we're making it optional? Does that mean that the new service or the replacement service or whatever this alternative is? Does that have to exist before the end of the time? Is it only going to exist after? Is it completely unspecified? Like, what are the, you know, sort of, it might not be guaranteed, but what's the expectation in the model here for having that? Good questions. Hey, I'm useful for once. Hardly. Hardly for once. Oh, my. Okay. I'm trying to remember, was it just the guarantees for when it's going to be available? Are there other questions in there you brought up? I would say plus one, the, like being really clear about expectations, is alternative, would that be something for the machine or for the human? Would it be like, if you see an alternative, you as a human and it will change and update what you call, or would the, should something follow the alternative URL? Right. When you say something should follow, can you elaborate on what you meant by that? Not follow, but, like, use that URL instead. So, like, is it, is it, like, what is the expectation around alternative? Like, alternative, I don't know that I understand exactly what, and I know it's just like a guidance, but what would be the recommendation there? Like, if, how would we, how would I, how should I interpret alternative? Right. Yeah. And for example, like, well, do I, what does that mean around discovery and subscriptions? Do I have to, like, is it, well, I just go start a new subscription. Does my subscription carry over? Like, there's, there's a bunch of potential assumptions around that stuff that could be quite confusing. The question, how would I deduplicate across those two potential streams? How do I do the transition? Yeah, exactly. Transition. Holy moly. That's not right. There's an M in there somewhere, I knew it. Okay. Any other questions, comments? Okay. Cool. Just a transmission, as opposed to transition, sorry. Transition. Yeah, going from one of the streams to the other, particularly if there, if it's a new version of the stream, so it's maybe offering a new attribute or something. And that new service is, I don't know, if there's version and service change, then how do you deal with anything that might be different in correlating the events across the two. So let's say it's a bank account balance change. I don't want to process the same deposit twice, right? So I need to know, how do I identify it anyway? That's kind of the space that I'm trying to, you don't know, you need to go into detail. Yep. Okay. Lots of good questions here. And these are the complex things that I was worried about. And just to be clear, like all of these questions all exist whether or not the, this alternative thing is added to the spec, right? These are all issues around timing anyway. It's just if we're putting alternative or whatever in its spot, we're making it more official. So we're going to have to be a little more, I don't know, descriptive. Maybe, right? Because it's also possible for us to say we're not going to say anything. Yes. But that's a just being explicitly descriptive, whether we're prescriptive about the behavior or not. Yeah, that is true. Yes. Okay. Any other questions, comments, thoughts? Okay, clearly can't resist one. So I guess we'll keep moving forward then if there's no more discussion points on that one. All right. Now, Clemens could not make the call. I'm wondering if anybody had any thoughts on this one yet? Anybody come up with an alternative aside from these two that he mentioned? Does anybody want to chime in in terms of where their head is at currently in terms of which direction to go with this? I know if I'm wrong correctly, I think in last week's call there was some leaning towards B and kind of being a bit hand wavy about the fact that yes, technically it's a breaking change, but we can consider this a big mistake that we're just fixing and that you can probably get by with maybe a 1.1 instead of a 2.0 for the next release, but I'm not sure how people thought about that. So Klaus, did you want to speak up? I talked to the folks who did the implementation for us and turned out that the implementation is actually incomplete and doesn't send origin. So they fixed it, they could then just use that request origin and wouldn't be a breaking change for us really. Okay, anybody else want to chime in? Is it fair to say that that's where most people's heads are at is looking at a variation of B? Okay, you guys are awfully glad today. Okay, I'm going to assume that's true and then we'll wait for Clemens to come back and maybe poke on him to create a PR if that's the direction you want to go. Hold on, let me take some notes here. I'll nag him about that one offline. Oops, okay. Well, wait a minute, that's the wrong section. I apologize for that one. Okay, anything else on this one people want to bring up? All right, yes, I agree with you Lance. Hopefully that there aren't any very many implementations out there we have to worry about, but still, it's a little worrisome. All right, in that case, we're technically at the end of the formal agenda. Any other issues or PRs people want to bring up? All right, in that case, Jim, would you like to reintroduce the issue that you mentioned earlier today? Sure, and thanks. Just really a convention that I'm looking for clarity on. So the scenario is that I sort of discovered that the Java JSON binding in the Java SDK was not sort of completely in the spirit of the specification. And where it was having a problem was in its handling of numeric attribute types. If you look at the cloud event spec, it says that only integer numeric types are allowed for context attributes. The JSON format spec also then goes on to say that it's numeric, but limited to integers. But the implementation as it stood actually allowed decimals and floats and other sort of native numeric types to flow, whereas they should have been represented as strings. So the question becomes, what's an SDK or a consumer expected to do if it receives a non-conforming payload? I think it's more of a potential issue for maybe JSON rather than the proto spec, because the proto spec won't, by its very nature, doesn't allow you to create attribute values that are against the specification. But theoretically anybody could create a JSON document by hand and define an attribute with a decimal number value or a long number value. And so the question becomes, what's the handling expectation there? Is an SDK expected to coerce that to a string? Or is it meant to ignore it, drop it? So that's really the concern, because I suspect this might apply to other SDKs as well. Probably not just Java, rather. Anybody want to chime in? I assume SDK folks might want to speak up. I think I already answered in your PR. For me, it just, it must fail. I mean, there are some errors that even fails the parsing. So if there's something like, your example is the numeric, the decimal numbers. If there's a decimal number, it must fail. That's it. So in fact, the D-shear you underlined was an overlooked for me. Okay. That's cool. Slinky, since you're in multiple SDKs, is that the way all the SDKs that you're played with operate? They reject the request? Well, numeric, the numeric thing. To be honest, I think in SDK code, we don't check it. And even in, I don't know, I need to look at it again. But I think the JSON parser in SDK code doesn't check numeric and just sets every kind of numeric value. And maybe it's the same SDK here as well. Okay. What do you guys do with like malformed timestamps? Do you check those at all, or would you reject the request? No, no, no. These are currently checked. I mean, if it can pass the timestamp, it fails. It fails. Okay. Only for the time field, though. Yeah. Yeah. Yeah. Makes sense. Okay. John is asking, I know it might be slightly off topic, but John is asking this in the chat, is this checked in the conformance tests? Do we, where do we stand in the conformance test, by the way? We don't. We have some cucumber-based testing. It needs to be filled out more. Do they check for this type of thing? Is that across languages? Or... You have to write the interpreter on your language specific side. So it's run, I think, in Java, JavaScript and Go at the moment? No, in Java there isn't. There was a PR, but it was never completed. I never had time to. Okay. Then just JavaScript and Go. Cool. Lance, what does the JavaScript one do? Do you guys reject or...? So, this comes up a lot. We, if an event is created through a process, if it's coming across a wire, right? If an event is coming across the wire, then we don't necessarily throw an exception if it's malformed, as long as we can parse it. And then there's a validate method that the user can call to validate that event, and validation will cause an exception to be thrown. But we want to be loose about what we accept, because we know that some event providers may have malformed events. And this actually was, this happened in some implementation of some stuff that we were doing. We were getting some events from Camel that I don't remember exactly what the issue was. They didn't have a data content type field, maybe. I can't remember. But we made the decision to be loose in our validation on receiving events over the wire. But if you create a new event that's malformed or has bad fields directly, then that's strict validation, and it will throw an exception. Okay. Thank you. John, your hands up? I had a question for Lance. Since you're separating this validation step, so is validating doing conformance tests, or are you separating the conformance from the, you know, oh, this is totally missing a field and things like that? Like, is there a model there that we should try and support across the board, I guess is the question? By conformance, you're talking about like field types and stuff? Yeah. Yeah. So we use a JSON validating parser called AJV, I think. And so we feed the schema into that parser, and, you know, it's based on the existing schema, and it does the validation based on type. Yeah. Just curious, and this might be a great topic for a future SDK call, but should the SDKs be somewhat consistent here? I mean, like, should we all, or should all the SDKs fail, or should all the SDKs follow the JavaScript model and be, you know, loosen what they accept, within how a separate validation step that someone could ask to validate it and get an error message back that way? Or should SDK, each SDK make its own decision about this? How important is consistency on this? Just curious what people think. I don't feel like it's that required, right? Like, JavaScript is kind of known for being slightly more loose about types and data content than, say, like, C. Okay. So I would kind of expect to be able to make it go in JavaScript, but absolutely break with Proto. Okay. Fair enough. Jim, did you want to chime in there? Well, I just say that, presumably, you know, I somewhat agree with the being flexible on what you receive, sort of semantic, but we should be extremely spec compliant on what we produce. Yeah. So you shouldn't be able to produce an event that violates this back. And that's how we do it in JavaScript. You can't produce one. Actually, you can. It's a flag, but it defaults to strict validation. But the interesting thing is that the JSON schema, because there are no attributes that take in values, for instance, so there's no constraint in that schema that says, you know, a particular field must be an integer. I think that has to be done in the SDK itself, I think, to disallow sort of creation of numeric attributes that are bigger than an int. And I assume that would apply in the Go use space as well. Yeah, you're right. I mean, the JSON schema validation is just, like, number. Yeah, whatever number value the language will support. So, Jim, did you get the answer you're looking for? I don't think I, well, I mean, based on slinky sort of comments, you know, if we're from a Java SDK, it sounds like we would reject that. Is that what I'm hearing? I believe so. So that's fine from a Java perspective. But I mean, does raise that consistency question across SDKs, I guess. On the Go side, there is an opportunity for you as the receiver to handle an error and do manual parsing if you want to. But it's not going to do all the magic that the current SDK does. So of any Skype hatch mechanism? Yeah. But you can't use all the magic client pieces, you have to kind of drop down and you have to be aware of what protocol you're actually using because you're going to have to go and produce the cloud event yourself. Slinky, your hands up. Yeah, sorry for interrupting. As I said, we can, and I think this is something that can be applied in other SDKs too, we can have a more loose parsing mode where we parse something even if it's not very super valid, let's say. But again, for me, default should be extremely strict. And like as a Jackson user, so the Jackson is the Java JSON parsing library, Jackson actually has this feature. So being a little bit stricter or loser when parsing JSON. So choosing, for example, between the types, the numeric types and so on. So it's also, let's say, idiomatic for a Jackson user. Okay. All right. Any other questions, comments, discussion points around Jim's question? All right. Any other topics that I hope you want to bring up? Okay, in that case, did I miss anybody for the attendee list? I think I got her ready. All right. And before we adjourn, I don't see any topics for discovery. So last chance. Any topics for discovery stuff? Just a reminder, we are planning on doing interop at the end of the month. So we're, you know, about two weeks away. So hopefully people are coding away feverishly. All right. In that case, I believe we're done. Thank you all for joining. Talk to you again next week. Thank you. Bye, everybody. Cheers.