FHIR Chat · versioning profiles · conformance

Stream: conformance

Topic: versioning profiles


view this post on Zulip Simone Heckmann (Sep 29 2018 at 21:31):

With the arrival of the new packaging feature in Simplifier, we have reopened the discussion of how to handle versioning of profiles.
The precise use case is that we are maintaining national profiles, that are still immature, so they we expect to have occational breaking changes in the future but people are already starting to derive their profiles from our profiles and need a way to be able to reference a stable version.
Packages give us a way to do this. but the question we're still undecided about is whether we also need to maintain version numbers in the canonical urls, e.g. .../Patient-core/1.0 followed by .../Patient-core/2.0 in the next release.

The only reason (we're aware of) why we would want to do this is that it allows an instance of a resource to calim conformance to a specific version of a profile.
However, it's a big effort to maintain this (just imagine having to update all references to Patient in your IG/package...)

So the question is:
1. What are good reasons why instances need version specific profile.meta references?
2. Are there reasons why they shouldn't ?
3. Why was the use of canonical ruled out for profile.meta, that would have allowed an optional addition of the version in a pipe-separated notation such as .../Patient-core|2.0?
4. How are other IG authors handling this?

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 21:34):

Erk. Um, I don't know why meta.profile doesn't allow canonical. I know I've got implementation guides that use it that way...

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 21:35):

Certainly wanting your profile reference to be version-specific is a reasonable thing to want. @Grahame Grieve, is this something that would be an allowed change in a future version or are we now stuck?

view this post on Zulip Patrick Werner (Sep 29 2018 at 21:46):

i can see benefits for both ways: specifying the profile including the version, and without.
With uri as profile datatype in meta you can't do both. With canonical as profile dataType this would be possible and much easier.

view this post on Zulip Simone Heckmann (Sep 29 2018 at 21:46):

"Certainly wanting your profile reference to be version-specific is a reasonable thing to want."
@Lloyd McKenzie , can you give me some reasons why?

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 21:51):

Because there's no expectation that different versions of a profile will impose the same constraints or be compatible

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 21:52):

So when you declare conformance, you want to be specific.

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 21:52):

But you don't necessarily want the canonical URL to change.

view this post on Zulip Simone Heckmann (Sep 29 2018 at 21:59):

Why is it important for the client to declare version specific conformance?
Couldn't the instance by chance still be conformant with a newer version even if a breaking change has been made?
(Like a newer version has added a requirement that has already been voluntarily satisfied by the client implementation).
Should a server reject a resource solely based on version mismatch in the declaration even if the resource validates against the server's requirements?
Should servers rely on a client's conformance claim without running validations against their own profiles?

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 22:02):

Client declaration gives a hint as to what validation a server should perform. It's costly for servers to validate against all possible profiles - or even all possible versions. A client declaration isn't an indication of everything they're conformant with, but is an indication of what they believe they're conformant with that they believe recipients are likely to care about/use

view this post on Zulip Simone Heckmann (Sep 29 2018 at 22:06):

Why would a server support more than one version of a profile at the same time?

view this post on Zulip Simone Heckmann (Sep 29 2018 at 22:09):

I‘m not saying that it shouldn’t, I just don’t see a real world use case that’s 80% enough to convince me of the necessity for versioned canonicals (especially considering the pain that comes with them)

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 22:14):

Servers support multiple versions because the clients don't all move at the same time

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 22:14):

I've got a couple of clients already doing exactly that.

view this post on Zulip Simone Heckmann (Sep 29 2018 at 22:47):

Couldn‘t this be addressed by attempting validation against the preferred version and - if that fails - try any supported older version before refusing the resource?

view this post on Zulip Simone Heckmann (Sep 29 2018 at 22:48):

Do you have an example of an IG that uses versioned canonicals?

view this post on Zulip Simone Heckmann (Sep 29 2018 at 22:50):

Is there any tooling for publishing versioned canonical IGs or is that manual labor?

view this post on Zulip Lloyd McKenzie (Sep 29 2018 at 23:41):

No public IGs. Two private ones. The server doesn't want to validate against more than one version. It wants the client to tell it what it's claiming and then to check that and process it or reject it. There could be 3 or 4 versions in use at any given time.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 08:21):

One of the problems of profile (canonical) versioning is that profiles don't live in isolation. And once resources start conforming (meta.profile) to individual versioned profiles, they will also have to start versioning all references.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 08:23):

Profiles can evolve at different speeds. And so it's very easy to create incompatible round trips. Something now suddenly the client will have to solve.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 08:24):

And they won't

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 08:28):

And a resource is likely to conform to a range of profile versions that are backwards compatible. But I don't see resources having semver ranges and wildcards in their url.

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 11:26):

Generally the dependencies are managed at the IG level, not the profile level. And IG relationships are always version -specific. Profiles inherit their version from the IG they're released in.

view this post on Zulip Stefan Lang (Sep 30 2018 at 11:47):

Even if they didn't change since the previous IG version?
We currently do the same for the German base profiles, but doing this manually, including changing all the IG internal references to the profiles (e.g. targetProfile), is a lot of work and prone to error. Therfor the question about tooling.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 12:07):

The power of the packaging draft we have now is that it uses npm SemVer ranges to manage backward compatibility. We've have implemented this in our package manager client. And sofar the results are promising. This issue is not new. It has been solved already in various degrees of success in the 'bigger' programming languages. nuget in C#, npm in js. etc. Just replace profile with 'class'.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 12:31):

The problem is: we have to decide now whether we version our URLs or not and whatever we decide, we will have to maintain it and live with it forever. So we really would like to hear as many opinion and experiences as possible.
IMO the ideal solution would have been the canonical notation which makes the use of versions optional (unless a profile indicates otherwise) and removes the requirement to maintain the versioned URLs independently or struggle with reference integrity.

But it seems this option is out of the game. Was it a conscious decision or an oversight that profile.meta is not canonical?

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 12:47):

Yes. The profiles get versioned whether they changed or not (and whether the changes were substantive or breaking or not)

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 12:49):

It's not mandatory to do that when you use the IG publisher, but I believe all of the HL7-published IGs do so and all the clients I've worked with have used that approach. It also ties into the package-baged publication approach for IGs

view this post on Zulip Simone Heckmann (Sep 30 2018 at 13:09):

I'm not sure if we aren't artifically lowering interoperability when servers expect a certain version, but get another and reject it, when in fact the profiles didn't change at all. (...or maybe just added a new required field, that the client has always been populating anyway)
I'd much rather have the server to at least make an attempt to validate the instance and then decide upon the result wether to reject or accept it.

I would also expect (many?/most?) servers to have additional constraints to whatever profile they support (like e.g. a maximum number of addresses per Patient or additional required fields) so it would have to test the instances anyway regardless of their conformance claim.

If servers don't validate incoming resources but simply try to run them through whatever processing they do, the processing might either succeed or fail. So why not just try regardless of profile version and accept or reject depending on the outcome?

view this post on Zulip Stefan Lang (Sep 30 2018 at 13:12):

I think that openness may be one valid behavior, while in other cases you definitely want to bind your instance to an explicit version of a profile.

view this post on Zulip Stefan Lang (Sep 30 2018 at 13:13):

canonical with pipe notation would (would have?) allow(ed) that

view this post on Zulip Simone Heckmann (Sep 30 2018 at 13:15):

True, I'm just not sure yet, how "corner" these cases are and if they could not be solved with a version-extension on profile.meta (assuming that pipe notation is out) and not burden the rest of the world (both IG authors and implementers) with this added complexity.

view this post on Zulip Stefan Lang (Sep 30 2018 at 13:23):

Agreed on a core extension as a possible solution for the instance profile version claim.

Another issue in this context is that derived profiles definitely need to be able to tell the exact version of the profile they derive from. Everything may result in any kinds of strange behavior.
SD.baseDefinition is of type canonical, so that's fine from a spec point of view. Maybe the importance of using [URL]|[version] here should be pointed out somewhere.
Asking the Toolsmith: @Michel Rutten Does/will Forge support automagically adding "|version" into baseDefinition?
Also the reference server need to support that

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 13:51):

I agree that servers requiring profile declaration of any sort isn't super-friendly, but it's a relatively cheap thing for clients to do and it means a considerable saving on the server side. It does mean that servers have to be in a situation where they can demand changes to a client instance - and that won't always be the situation.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:00):

@Stefan Lang but that's exactly the problem that packaging solves quite neatly. The only thing packages don't solve is the declaration in the instance...

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:01):

True. If everybody uses packages ...

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:10):

Still, as far as I understand it, once a package is loaded into a FHIR server, every profile stands on it's own.
The FHIR server does not know anything about package versions (...if they are not identifical to SD.version ...). Sound like an indeterminancy here?

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 14:19):

In most cases a fhir server will have an implicit a "scope" or "context" that has several packages. I can imagine that such a context deserves it's own endpoint. Because that is a much more natural language for a FHIR client and far less hassle.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 14:20):

Client software having to keep track of canonical URL versions is hard to enforce and error prone.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 14:26):

Because it's the client defining it's own rules on the server.

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:30):

Yes, Grahame and I were just shortly discussing this: it is true that the complexity is now on the client. The instance the client pushes would have to be explicit about the version of the structuredefinition. But it does not stop there. That structuredefinition should then also be explicit about the SDs it itself references. So, when uploading a StructureDefinition, the client should be explicit about the versions in the canonical references, if multiple can exist on the server. That does not sound attractive. One solution is that when you POST a StructureDefinition, the server knows about the versioning context and resolves it at that early point. Another would be that you somehow specify the context the moment you call $validate.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:42):

Actually, I wasn't thinking about Clients posting SDs, I was thinking about Clients posting Resource Instances which conform to a specific version of a profile... e.g.: a Patient resource conforming to http://fhir.de/StructureDefinition/patient-de-basis in the version 0.8

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:43):

Right now, the client doesn't have a way of saying that it's 0.8

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:43):

(apart from having the version as part of the SD's canonical url, that is ...)

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:44):

Yep. but as I understand it, the whole point of packaging is to avoid just that.

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:44):

Yes, but before that there was at least some entity that installed those structuredefinitions on the server - that's what I meant with "client" here. The moment you submit a set of conformane resources to a server, you could resolve all canonicals to make them explicit about the version they refer to.

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:45):

Right now, the client doesn't have a way of saying that it's 0.8

Patient.meta.profile= "http://mysource.org/fhir/mysd|0.8" you mean?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:45):

Yes, we can't do that because meta.profile is of type uri, not canonical

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:46):

I mean "http://mysource.org/fhir/mysd/0.8" or similar, since meta.profile does not allow for "|"

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:46):

well, uri is a superset of canonical, so you can.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:46):

uh? is it?

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:46):

But does any server support that?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:47):

I thought we had introduced canonical because uri didn't allow pipes....?

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:47):

"The canonical type differs from a uri in that it has special meaning in this specification, and in that it may have a version appended, separated by a vertical bar (|)."

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:47):

That implies url does not allow pipe

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:51):

That bit of text is from R4, where Meta.profile is a canonical, so that's not a problem. Note that we should not forbid a pipe in a url - but there is already a ballot comment to fix that formulation.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:52):

Nope: http://build.fhir.org/resource.html#Meta it's uri

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:53):

sound like black magic:
pasted image

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:54):

;-) Are you sure you are looking at build.fhir.org?

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 14:54):

canonical: A URI that refers to a canonical URI. The canonical type differs from a uri in that it has special meaning in this specification, and in that it may have a version appended, separated by a vertical bar (|). Note that the type canonical is not used for the actual canonical URls that are the target of these references, but for the URLs that refer to them, and may have the version suffix in them. Canonical URLs may also have #fragment references

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:54):

pasted image

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:54):

It's not updated here: 2.26.3.7

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:54):

yep.

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:55):

That's an ouch ...

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:55):

nah, that's a gForge issue.

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:55):

Is it already?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:57):

Ok, can we reset this conversation, please :D

view this post on Zulip Grahame Grieve (Sep 30 2018 at 14:57):

the authortitative source for Meta.profile is that able below the one Simone quotes above. that's a typo we can just fix.

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:58):

GF#18985

view this post on Zulip Grahame Grieve (Sep 30 2018 at 14:58):

you beat Lloyd

view this post on Zulip Stefan Lang (Sep 30 2018 at 14:58):

and me :P

view this post on Zulip Ewout Kramer (Sep 30 2018 at 14:59):

Well, at least now everyone reading this is aware of this subtle R4 change ;-)

view this post on Zulip Simone Heckmann (Sep 30 2018 at 14:59):

Sooooo....about versiones URLs.... anyone still care about those? Or can we all go home now?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 15:00):

(regarding R4 of course).
You'll probably still need them to work around the absence of "canonical" in STU3...

view this post on Zulip Stefan Lang (Sep 30 2018 at 15:00):

If the reference servers support pipe notation here, I'm completely happy.

view this post on Zulip Stefan Lang (Sep 30 2018 at 15:01):

STU3 is sooooo 2018 ...

view this post on Zulip Ewout Kramer (Sep 30 2018 at 15:02):

This was possible in STU3 too, but we didn't call it out explicitly - that's one of the reasons we introduced "canonical". You don't have to read the details description of a property to see you can use it logically as a canonical reference. In STU3 you had to dive into the description to see that.

view this post on Zulip Ewout Kramer (Sep 30 2018 at 15:03):

@Stefan Lang - guilty as charged, our server doesn't yet.

view this post on Zulip Grahame Grieve (Sep 30 2018 at 15:03):

where do we need to support it?

view this post on Zulip Ewout Kramer (Sep 30 2018 at 15:05):

We don't yet resolve |version to the correct version of a conformance resource. (e.g. in Meta.profile)

view this post on Zulip Grahame Grieve (Sep 30 2018 at 15:05):

when do we resolve?

view this post on Zulip Grahame Grieve (Sep 30 2018 at 15:05):

behind the $valdiate operation - any other time?

view this post on Zulip Ewout Kramer (Sep 30 2018 at 15:06):

yes, snapshot time

view this post on Zulip Grahame Grieve (Sep 30 2018 at 15:06):

I'll add getting this sorted to my list of things to do

view this post on Zulip Simone Heckmann (Sep 30 2018 at 15:09):

@Lloyd McKenzie do you have any plans to migrate from hardcoded versioned urls to canonical versioned urls in the future, or do you still see advantages in hardcoding them?

view this post on Zulip Grahame Grieve (Sep 30 2018 at 15:10):

both models will continue going forward

view this post on Zulip Ewout Kramer (Sep 30 2018 at 15:11):

I guess the same holds true for valuesets.

view this post on Zulip Grahame Grieve (Sep 30 2018 at 15:11):

y

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 15:34):

I use canonical versioned urls

view this post on Zulip Michel Rutten (Sep 30 2018 at 15:38):

@Stefan Lang

Does/will Forge support automagically adding "|version" into baseDefinition?

Currently not. Do you think we should address this?

view this post on Zulip Patrick Werner (Sep 30 2018 at 15:39):

yes, that would be nice

view this post on Zulip Stefan Lang (Sep 30 2018 at 15:40):

Definitely. For those deterministic guys like me ;)

view this post on Zulip Stefan Lang (Sep 30 2018 at 15:43):

Another place where the servers will have to support pipe notation then, also @Ewout Kramer @Grahame Grieve

view this post on Zulip Michel Rutten (Sep 30 2018 at 15:44):

OK, good to know. I will definitely look into this when we start working on Forge for R4 (after final FHIR R4 publication). Do you also need this for STU3?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:03):

Does it make sense to append the version to all canonical references when creating a package?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:04):

To me, it feels redundant, but I know that Stefan disagrees :)

view this post on Zulip Stefan Lang (Sep 30 2018 at 16:04):

I do :D

view this post on Zulip Stefan Lang (Sep 30 2018 at 16:05):

It's just not deterministic.
How can I specify a clear derived profile when I don't say which profile exactly I'm deriving from?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:06):

That brings us back to the point where everyone has to deal with the added complexity simply because we want to satisfy those who don't use packages.

view this post on Zulip Stefan Lang (Sep 30 2018 at 16:06):

And I don't see how packaging (in it's current state) would help here, since the FHIR server doesn't know about packages ... at least not mandatory

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 16:09):

It would really help if there is a 'standard' way of describing how a FHIR server can conform to a package, a set of package or an IG. In my slowly evolved thought process around packages, I now call that a Context.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 16:09):

Which is basically a list of package references.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 16:09):

And which includes the indirect package dependencies.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 16:10):

The best part is that a single package itself conforms to the definition of a context.

view this post on Zulip Stefan Lang (Sep 30 2018 at 16:11):

So each resource from a package would have a reference to that context attached somehow?
Would that also work without a FHIR server (there are people who use FHIR file based)?
Like an extension referring to the context in each SD?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:20):

Would it make sense to have the packaging-tool automatically update all canonical resources to version specific resources?
(Whatever the versions of the resources are at the time of packaging?)

view this post on Zulip Stefan Lang (Sep 30 2018 at 16:24):

Right, that would be great. Some preprocessing to add the version within the SD right before publishing (aka packaging)

view this post on Zulip Michel Rutten (Sep 30 2018 at 16:24):

@Simone do you mean update all canonical resource references?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:25):

I'm afraid so

view this post on Zulip Michel Rutten (Sep 30 2018 at 16:26):

So IIUC, you'd like to explicitly inject |version into all unversioned canonical urls in all profiles (all conformance resources?) in the package?

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:26):

Although: In fact only those targeting resources in the same package

view this post on Zulip Michel Rutten (Sep 30 2018 at 16:27):

I'm somewhat reluctant in that providing this feature could be perceived as encouraging users to do this...

view this post on Zulip Michel Rutten (Sep 30 2018 at 16:27):

Maybe tuck it away in an advanced menu option or something.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 16:28):

Why would we want to discourage it?
(Which brings us back to the question we started with): What are the pros/cons of explicit references?

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 16:34):

Personally I am against explicit version referencing, exactly because you would need tooling to bulk-fix stuff. And conceptually it does the exact same thing as defining a context. Except that now the client tools need to be aware of it - and fix it with each update. And there won't be tools bulk-fixing the client software.

view this post on Zulip Martijn Harthoorn (Sep 30 2018 at 16:35):

If you choose to allow each profile to have it's own version - you'll enter version hell. If you choose to have all profiles upgrade the version with rest the group, you create false incompatibility. So: it's every which way but loose.

view this post on Zulip Michel Rutten (Sep 30 2018 at 16:36):

@Simone Heckmann mainly because it is "contageous" (like async)

view this post on Zulip Simone Heckmann (Sep 30 2018 at 17:52):

Anyone interested in having a session about this (Maybe in FHIR-I) ?
@Lloyd McKenzie ?

view this post on Zulip Ewout Kramer (Sep 30 2018 at 18:39):

Pre-processing all canonicals has one more big drawback: you cannot let the consumer of the package override version resolution anymore. Now, this is advanced, but if you include two packages, let's say A and B, and these two reference a different version of C, you need to be able to override either A and Bs dependency resolution at the moment of consumption of A and B. If you have turned all canonicals into hard-versioned ones, that is not possible anymore.

view this post on Zulip Simone Heckmann (Sep 30 2018 at 19:00):

I understand ( to some degree) however Stefan's concern, that if two people who download the same derived profile and implement it, they may end up with completely different (potentially incompatible) implementations, depending on how they resolved the dependencies.
We're assuming here, that everyone will use packaging and get packaging right. But that's probably not how it's going to be anytime soon...

view this post on Zulip Michel Rutten (Sep 30 2018 at 19:28):

Packages address so many challenges that I think this will soon become crucial and infrastructure for FHIR. Same as IDEs.

view this post on Zulip Michel Rutten (Sep 30 2018 at 19:32):

We will tightly integrate packages into our Firely tools (Forge, Simplifier, Vonk, Torinox). Our goal is to make the UI/UX as easy and simple as possible. I hope this will help drive adoption.

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 20:22):

My take is that if IG 1 depends on IG2 version A, then any profile that IG 1 that references another profile defined in IG 1, it's referring to the profile that's the same version it is. If it's pointing to a profile defined in IG 2, it's referring to the version A version of the profile. As such, you don't need to make the references version-specific.

view this post on Zulip Lloyd McKenzie (Sep 30 2018 at 20:22):

We'll see where we're at with scheduling items for this meeting. We might be able to afford another session on versioning.

view this post on Zulip Eric Haas (Oct 01 2018 at 14:42):

Thanks

view this post on Zulip Jens Villadsen (Oct 01 2018 at 22:42):

Why would we want to discourage it?
(Which brings us back to the question we started with): What are the pros/cons of explicit references?

Pro: you know exactly what you conform to - (on a side note, if you stick to semver, your representation of a resource may be syntactically compliant against a SD eventough the semantics have changed)
Pro: there is never any 'implicit' magic
Con: sounds like on @Stefan Lang that you are about to embrace nondeterminism
Con: being explicit can be cumbersome to maintain manually

If SD's can/should be treated as interfaces as in eg. Java, C#, Go, typescript ... whatever - then I wouldn't expect any other or better solutions to this matter other than what can already be found in regards to how interfaces are handled in those languages. 'Just' pick the poison you like the best

If I was a world dictator I would favour explicitness due to the fact that SD's describes the interface of a system - and I prefer to have that very clearcut carved in stone and welded in steel


Last updated: Apr 12 2022 at 19:14 UTC