Skip to content

DID URL Path Handling 2 -- Replaces #260#316

Open
swcurran wants to merge 9 commits intow3c:mainfrom
swcurran:2-url-path-handling
Open

DID URL Path Handling 2 -- Replaces #260#316
swcurran wants to merge 9 commits intow3c:mainfrom
swcurran:2-url-path-handling

Conversation

@swcurran
Copy link
Copy Markdown
Contributor

@swcurran swcurran commented Mar 31, 2026

Replaces PR #260 with the same content applied to the current version of the specification. Attempting to resolve the conflicts failed miserably on #260. Happily, recreating the PR was not that hard. That said, there were some comments on that PR that are still applicable.

The new PR is identical to the one last discussed at the DID Working Group -- 2026.03.26.

The PR changes 4 things in the specification:

  • adds a tweak to a CSS style to allow bullets in algorithms.
  • Extends the definition of the relativeRef query parameter and how it applies.
  • Adds a section on "Service Types" that includes the definition of the PathService
  • Adjusts the DID URL Dereferencing algorithm on service and/or serviceType and/or relativeRef to also include "and/or DID URL Path", and describes how that all works.
    • Embedded in that is a note that the DID URL Dereferencing result of an "altered DIDDoc" (where service objects may be removed and serviceEndpoints altered) may be removed in CR, as people don't seem to like that concept.

Phewww....

Signed-off-by: Stephen Curran [email protected]


Preview | Diff

Comment thread index.html Outdated
Signed-off-by: Stephen Curran <[email protected]>
Comment thread index.html Outdated
@wip-abramson
Copy link
Copy Markdown
Contributor

Let me attempt to highlight the key differences between this proposed approach and the approach taken in #311. Maybe it will be useful.

The Path handling part of derefencing in this PR:

  1. Collects all "objects that are for DID URL Path handling"
  2. Filters using service and serviceType if present, but retains any non-service objects in list
  3. Applies path matching algorithm - selecting all objects that have longest past match
  4. Uses type of remaining objects to determine processing rules to get to URL for each remaining object
  5. Applies relativeRef if present to all URLs
  6. Returns set of all URLs

In #315 the approach is different and revolves around determining a retrieval strategy. It also implies that only a single resource will be retrieved I believe.

Retrieval strategy is determined in a prioritized ordering.

  1. Service parameter - use the type of the service
  2. Service Type paremeter - use the type of the service
  3. Property (any DID document property that defines a retrieval strategy)
  4. Document Metadata (And DID document metadata property that defines a retrieval strategy)
  5. Method specific.

Trying to keep this high level so we can get to the technical differences here.

Differences I see are:

  1. service and serviceType processing is very different.

Personally, I feel if a DID URL defines a service or a serviceType, then the dereferencing ought be using that identified service.

  1. Multiple URLs vs Single Resource. This PR does not dereference URLs into resource, nor does it require a single URL, it simple identifies all targeted URLs and returns. first complete pass at resolution/dereference clean up. still draft. #311 is framed around their being a single resource targeted and resolved. Defines a ordering of priority for determining which strategy to use.

My sense is that there are legitimate cases when a DID URL is targeting multiple resources. Or at least multiple services, for example the serviceType parameter I thought was for selecting all services of a specific type not just one.

  1. Path matching algorithm. This PR selects which path handling objects to use based on path matching. first complete pass at resolution/dereference clean up. still draft. #311 does not mention path matching - this is left to the retrieval strategy I believe.

Probably there are some more, but these were the main ones I noticed.

Hoping this can help us have more constructive conversations about these two proposals and move towards consensus.

@w3cbot
Copy link
Copy Markdown

w3cbot commented Apr 2, 2026

This was discussed during the #did meeting on 02 April 2026.

View the transcript

DID Path PR \[2\] (15 min)

<ottomorac> w3c/did-resolution#316

Otto Mora: Yes, let's do our best to just get this done. Um
… Okay, so on this Did PathPR, I wanted to give the floor to Steven
… Um, I will note that there is a new PR, which is, uh
… Not 260, it's 316 now, right?

Stephen Curran: Yeah, it's 316 now...
… Um

Otto Mora: Okay...

Stephen Curran: The attempt at resolving the conflict was a disaster...
… Um, so I just had nothing that I could go forward with with that. So, um
… took the content, um, missed one little piece that Will pointed at this morning that I corrected this morning
… So, it's there. Um
… There are only 4… blocks of changes
… Um… and those are listed in the comments. Um
… It looks like, from Will's comment, I also missed… in… recall, in the previous iteration that I worked on. I opened
… Try to make a wider tint of the object types, so not limited to service types, is, um… Joe, uh, had objected to
… Um, the idea that only service types could reference other resources, um, and so expanded
… that looks like I missed one spot. I think that's what Will's saying in his last comment
… Um, but other than that, the sequence… the algorithm sequence is the same as before
… And, um, includes, you know, the handling of when you have
… Service, and or service type, and or relative rep, and or a patent
… And just walks through the steps you take to
… Process, and come up with a result
… Um, so, as I say, I think everything's there, um, and it's… Pretty much what was, um
… What was, uh, there before, uh, just with
… Uh, the cleanup done. So that's that. Questions?

Otto Mora: Does it need one...
… Final adjustment based on Will's comment, or it's now

Stephen Curran: Um, I think, Will, you just said it looks like there's a place where I say a list of service objects one more time, or is it more… more than that?...

Will Abramson: Uh… yeah, well, definitely that needs to be fixed. That's a mistake just in the current approach...

Stephen Curran: Yeah...

Will Abramson: Yeah, I guess...
… I… I mean, I… my concern is that this PR and Joe's PR are just in huge conflict

Stephen Curran: Oh, absolutely. I...

Will Abramson: Um… uh...
… I don't know what the… how we resolve that conflict, but… I mean, I've read both of them, right, and I've tried to understand
… What is being proposed in terms of, like, how you… how you… each of you are proposing handling paths. And there are just some things in there that are just complete
… completely different approaches. So, I would like to see us discuss those… I mean, I've highlighted 3 differences
… like, maybe we can discuss them individually, and as a group, like, what do people think is the best approach, right? My concern is if we merge this
… Fine, but what happens then, like, with 311, 316, or whatever one it is. Um… I don't know, um… Open to what people think, really

Otto Mora: Mm-hmm...
… Okay, so yeah, I see we got a few people, um… Steven?

Stephen Curran: So, in, in looking at the 2, I think, um, Jose, while, while the repositioning. of Joe's, um...
… in Joe's PR is… is… is interesting and helpful, I think
… The changing of the algorithm is inappropriate. I think the… there's a pretty radical change
… I think it's flat out in places wrong. Um
… Um, because of the, uh, sequential… if you see this, then this is what it is, and skip all the rest and go to the end, like, that just doesn't work
… So, even if it's, um… you know, it has to be reworked
… Um, I think it loses the existing even before my
… It doesn't align with what was there before, let alone what… how I've extended it. So, I think that. I don't think it's
… the comparison is necessary, because I think, um, that one needs to be reworked, even if, you know, even if we keep this reframing. of, um
… The… the resolution and dereferencing. I call

Otto Mora: Mm-hmm...
… Okay, and I see
… Yeah, one thing, it's like, um… I feel, Joe
… That it might also be worth socializing, like, uh, for everybody else that hasn't on the call
… Or, like, your new PR has… it's more readable route, right? So it might be
… Worth also spending some time on the call right now to highlight your changes, so that folks, maybe even screen sharing
… I don't know. So folks are aware, like, oh, this and this and this are the key changes there. Just my own personal… Yes, Shepard. Go ahead

Joe Andrieu: Okay, so I believe that's our next, uh, agenda item. It may have been easier if we had done that agenda item first, but...
… Um, we're… we're here talking about this did path algorithm. Um, I… I agree with Steven that this… this really is incompatible with my PR
… Um, and the, you know, the concern that it does not align with what was there before is because I disagree with what was there before. I do not believe we had an actual consensus around the notion of creating a separate standalone dereferencer
… Precisely because that's not how dereferencing works. And so this PR includes some language explaining what dereferencing means, including the sort of normal computer science meaning
… As well as what it means for a URL. Um, looking at this, so I have not, um, been able to process this deeply, because I've been paying attention to that and the threat model
… Um, uh, but looking at some of the issues that Will has brought up, I do not believe that it is possible
… For a did… for any URL to refer to multiple resources
… Like, by definition, a URL points to a resource. That resource may be a compound resource
… But leaving the ambiguity up to the caller to say, where does this URL go? I think that's a non-starter. I think that's a huge mistake
… Um, my… another concern I have is precedence, which I need to read through here and understand it. I do appreciate that Steven's trying… been trying to find a way that allows extensibility within the algorithm
… Um, but I think there's a big change here from where it was before, which it looks like it's the did method
… Uh, reads first, and I think the… if there is a service or service type parameter, that should read first
… So there may be more nuance there for me to understand, but that's… that's my first blush on that
… Um, and I also think we need to come up with a way, so even if, you know, to the extent we pursue this flexible path handling option, which I think we should figure out how to do
… I just… I'm not sure that this is the right way to do it, given that I think we need to explain the rest of the algorithm differently
… Um, I think we should introduce a path handling type
… Because, um, unless
… Um, uh, service endpoints specifically say, hey, I handle the path
… Then, um, endpoints that handle the path that were not known at the time that the software was written will not be included in the algorithm
… And so, we have this wonderful type feature in JSONLD, and we can specify a type, and it can be, you know, maybe path service is that type, but then we need an adjustment for that
… So, you know, it could be path handlers of type, that's another way to deal with that. Um
… Uh, and then the final thing is, I think these should not be service endpoints, because that
… It prevents the use case where
… Um, the URL is, in fact from, uh… uh
… uh, like, an on-chain resource, and it's not reducible to, um, a URL
… Um, so that's… that's my comments here

Otto Mora: Okay, so let me just try to suggest something, okay?...
… Right now, let's just focus on the effects of the changes
… So we'll… we're right now reviewing Steven's updated PR
… We'll then change over and discuss Joe's PR in the next topic. And the discussion on what gets merged first
… Like, let's push that to the end of the call. Just because I feel like we all need to be on the same page about the level of change and what each of them is attempting to do before we try to make that decision, and it might be a more informed decision. If we make that at the end of the call, as opposed to
… right now, like, just, you know, kind of based on what knowledge we have. Um, so, just my own suggestion here, um… And I see Manuel is next

Manu Sporny: Um, right, so, uh… High-level comment first. Um...
… I think we have been through
… uh, the path service PR multiple times now, and have whittled it down and down and down to… Um, to
… Uh, be a better version of what the spec says, uh, today
… Uh, I don't… I am not… so, Joe, I heard you say a bunch of things. I was trying to… some of what you said, I don't think is actually reflective of what the text actually says right now, so some of the things where you're like, it doesn't do this, or it doesn't do that. I don't, like
… I'm concerned that you're working with an old version of what the algorithm does. Um, I went through this
… You know, with fine-tooth comb with Steven to see if that we're addressing, you know, everyone's concerns, including yours
… I believe that we are, so I… at this point, I think the working group needs to hear the concrete
… technical thing that, uh, this PR, uh, does not allow. Because the things I heard you say, the PR allows you to do those things, so I don't… I think there's a gap in understanding here
… Okay, so… so I want us to focus for the path service PR on, um, uh, does it actually, you know, prevent the things that, uh, I think, Joe, you're concerned that it prevents? I don't think it does anymore. I think we've addressed, you know, all of your concerns
… Um, let's try to focus on that, rather than high-level philosophy about how the… how the spec should be structured. Okay, so that's high-level comment one
… High-level comment, too, is I did read through Joe's PR. Um, I think philosophically there's good stuff there. I think we should do, kind of, the reframing
… that Joe has done in his PR. I don't think that they are… work against each other. I think it's true in some kind of, you know, corner case, the things that I'm gonna call corner cases, they might work against each other, but I see them as largely compatible
… Where we would get Steven's technically correct PR in
… and then break it apart and rework it, um, in the way that, uh, high-level philosophically Joe has reworked
… it, making sure that we don't break the algorithm, which I think, you know, I don't have an opinion on whether or not, Joe, your algorithm, you know, breaks things or not, but there are a number of things that I disagree with in that PR
… Right? Um, uh, mostly around ordering and I think it's vague in some places, overly vague in some places in the same way that Stephen mentioned
… Um, okay, so I… I want to understand what
… concretely, uh, this Steven's Path Service PR is going to break

Otto Mora: Okay, uh, let… we'll jump in here...
… Well, you're on mute

Will Abramson: Yeah, sorry. Yeah, I wanted to speak to one thing that I maybe disagree with in Stephen's PR specifically...
… Which is around how it currently handles this service and service type processing
… like, it feels like if I have a did URL, and in that did URL, there is explicitly a query parameter that says service equals X, or service type
… equals Y, then we should be dereferencing that URL
… As defined by the service type identified. And not including. Any other
… Path handling objects that might be defined, but
… it just feels weird to me, like, why would you construct a DID URL that explicitly targets a service type, and then also
… include all these other approaches, so that's all I wanted to say

<Zakim> TallTed, you wanted to say that a URL refers *semantically* to a single resource. Something like "today's complaints" may redirect to `.../2026/03/15.foo` and `.../2026/04/15.foo` in March and April

Otto Mora: Mm-hmm. Okay, uh… Good...

TallTed // Ted (he/him) Thibodeau Jr (OpenLinkSw.com): Uh, this will be fairly quick, um...
… Joe, I don't know if this is something that you said in the speed of addressing it now
… Or if it's something that really you mean. Um
… A URL may lead you to two different physical resources
… when you dereference it. If it is written, for instance
… to incorporate a date along the string. If the
… date is today, which changes, it can lead to a different document tomorrow than it did today
… Semantically, it's the same thing, because it's the stuff that's related to today, but
… Literally, it refers to the first or the second's worth of information. That's all

Otto Mora: Mm-hmm...
… Um

<Zakim> JoeAndrieu, you wanted to say the amount of time we've spent arguing a PR is not an argument for accepting it

Otto Mora: Uh, yes, so, uh, we have Joe. Joe, go ahead

Joe Andrieu: Um, yeah, I agree with what you just said, Ted. Um, I didn't mean to say that the...

<manu> +1 to what Ted is saying -- you can have one URL that leads to multiple options.

<manu> no, that's wrong

Joe Andrieu: resource returned is the same every time you evaluate and dereference a URL, but rather that one resource is returned. For any given dereferencing. Um

<manu> https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/300

Joe Andrieu: I think that's just how it works. Uh, to Manu's comment, I'm actually… I don't… I'm really confused, because I did, in fact, outline very specific technical things that I don't believe this does

<pchampin> a resource is not returned; a representation of the state of the resource is returned

Joe Andrieu: Um, and you just said you don't think I understand the spec, but, um, I think it should be service-as-service type first. I think there are precedence issues. Um, I don't think we should be returning multiple resources, and I think we should have some sort of path handling type that any path handling
… service endpoint can register, or any kind of endpoint. And finally, I think it needs to be able to handle something that's not a service
… That may be in there, that part I'm not sure about, but the other things still seem to survive this conversation, so I'm… I'm
… Confused about that. I also take issue with the idea that because a PR has been argued over for a long time

<manu> No one is saying that, Joe

Joe Andrieu: that we should accelerate the adoption of that PR. The argument itself over this that has taken a long time should be an indicator that we're not there yet
… And, secondly, this PR is brand new. It has not… this PR, with these changes, with these algorithms, with these nuances
… is… is brand new, and I have not had the time to review it. And so
… We need to take the time to understand this algorithm so we can tease out if I'm right or Manu's right about these concerns I have about does it support multiple resources, which I think is bad, does it have a bad precedent?
… Um, does it miss these other opportunities, such as service endpoint… or non-service endpoint-based mechanisms?
… Um, and then finally, Manu, if you have issues with my PR, please make comments on it. That's why we put it out there. I did attempt to respond to everyone's comment who commented on the first round of that. I welcome comments, I'm trying to incorporate those as quickly as possible
… Which is why I have not been able to do a deep dive on what Stephen did this last week. That's my comments

Otto Mora: Mm-hmm. Mm-hmm. And just one more thing, so the concern around the link resources, that's...
… Or do you still have that concern, Joe, or is that
… Okay

Joe Andrieu: Um, I do still have that concern. I haven't read this, and I know that Steven was trying to find a way to make it extensible, and so I don't know if he has managed to cross that gap or not...

Otto Mora: Okay, so just one thing on that, it might be useful, like, um...

<ottomorac> w3c/did-resolution#260 (comment)

Otto Mora: Alex from, uh, Checked did… I just put it in the Zoom, but I also put it here in the IRC
… he did give us a feedback, and I think he was saying that, uh
… The layering is sound because, um

<ottomorac> "Reading the updated §6.4.1 algorithm, Step 8.1: "If the DID Method specifies its own path handling algorithm, use that algorithm, skipping the rest of these steps", is exactly the right design for DLR-implementing DID methods. They define their own path handling and bypass PathService entirely. This confirms the layering is sound."

Otto Mora: Yeah, he posted this bit here, I'll just paste it
… Um, yeah, you can see it there, right?
… it's kind of a layering thing that he said it was fine, so… just for that… for that particular… I mean, I don't know about the rest of your concerns, but just for that one particular part, I think he was fine

Joe Andrieu: Right, so we should clarify, did linked resources is not linked resources...
… And linked resources doesn't use a service property, um, and it is able to deliver a resource that doesn't have an endpoint, doesn't have a URL that you return, which is required
… Uh, property and services. So, I don't
… It's great that Alex likes this, that helps. That was one of the three approaches to path handling that the community has been dealing with
… Um, but I've been mostly speaking to defend the Sean Conway's work at IXO
… Um, because I'm more familiar with it. I understand why they did what they did

Otto Mora: Okay. Perfect. Uh, Steven...

Stephen Curran: So much to respond to. Uh, Will, on your point on the service types and service, if you specify those in a URL, I'm happy to do that...
… Um, I'm… I'm on the fence on that one, so I think that just we make a decision on eliminating everything except the specified service type
… The multiple resource I originally had up until the last revision
… had, um, did it be an error if multiple resources resulted? Um, Manu convinced me that it should be allowed so that you could store a resume on multiple places, and you could get it from multiple places, so that's a
… an issue. Um, Joe, service type and service are the first thing processed
… The only thing in front of it is a did method specific allowing for on-chain resources to be resolved, so both of those things that you. Mentioned there are taken into account. Um
… There are other services included, or other objects included, it's not just services. Um
… and the required property on a service being a URL, it could be a did URL, and that is… is a reasonable endpoint. which is… and exactly what I've used
… Um, or… or consider to be used, so that when you then
… resolve it, it is the first thing you hit, which is, is if the did method
… Has a path handling algorithm, because that's the only place to get it
… it would retrieve it off the ledger in that case. So, I think all of those things you mentioned are handled. So, I look forward to you taking a look at the latest, and. That's… yeah, anyway
… That's it

Otto Mora: Okay. Uh, Manu?...

<manu> https://datatracker.ietf.org/doc/html/rfc7231#section-6.4.1

Manu Sporny: Uh, on the multiple choices thing, what Steven said, I'll also point out that RFC 7231 allows there to be a response for… that there are multiple choices for a given URL...
… Um, that can vary in representation, but it doesn't have to. So, I… minus 1 to
… uh, you know, they're not being a precedent where a URL can point to multiple other URLs, it's in the… in the core HTTP spec
… Um… I think, uh, Steven has responded to… well, one, I'm having a very hard time tracking what the concrete concerns are
… I would like a 1, 2, 3, 4, these are Joe's concerns, so that we can address them one by one. Otherwise, this is going to be a random walk through
… a set of shifting concerns. Um… I… I believe I heard Steven respond to
… hopefully all of your concerns, or at least a subset, Joe, so I would like to understand at this point
… which one of those are left? What of the concerns are left?

Otto Mora: Okay, and then...
… Yeah, I just want to, like, cap it at 5 more minutes, and then we should switch to those PR, because I also want to make sure that the group

<Zakim> JoeAndrieu, you wanted to point out that dismissing my concerns because Manu disagrees doesn't address my concern.

Otto Mora: gets to see the changes proposed by Joe. So, Joe, like, uh, yeah, go ahead

Joe Andrieu: Um, yeah, Manu, I think we've just done that twice now, so I'm getting extremely frustrated with what feels like abuse of process to keep demanding that I say something that I've already said...
… It's extremely frustrating. I have enumerated this list. The fact that Steven has dismissed one of my concerns, because you agree with him on it, does not address my concern
… And so, my concerns have not been addressed many times throughout this process, and that is a dialogue about how we move forward
… And I have been putting issues on the repo, I have stated here, a list here, and for some reason, that doesn't meet your standard, because I don't know why
… But I don't think it's a fair engagement the way that you are treating my concerns about this PR

Otto Mora: Uh, Steven, uh, Manu, and then I think let's just close off. Conversation...

Stephen Curran: I'd like to move on, I think, um...
… Joe, you raised a bunch of concerns. I think all of them are addressed, so hopefully we can just move on from now and see what happens

<JoeAndrieu> I will list my concerns in the PR when I can get to that

Otto Mora: And yeah, I think maybe then this also be a topic of… a special topic called the… Uh, yes, madam...

Manu Sporny: Yeah, just to try and clarify, Joe, I am not dismissing your concerns...
… Uh, I have… I have tried to listen, I have read, I tried to read absolutely everything that you've written, I have tried to convey it to Steven so that he, you know, adjusts the text
… Steven has been receptive to that, and has modified text over and over again, based on me going, I think this is what Joe wants. I think… and I think he has a point. I think we need to change it in this way. That has been going on for weeks
… So… we are listening to you, Joe, we are making modifications
… It is still really hard to track what you are disagreeing with. You said there was something that he is dismissing, but you didn't say what that was, and so I'm trying to understand. We are really trying… We… please?

Joe Andrieu: Manuel, I have to interrupt, I've said it now twice, you just didn't like what I said...

Manu Sporny: What? No, I don't know what you said, Joe. I literally… I don't… in my...
… That's not what I'm saying

Joe Andrieu: Look at the transcript, Manu, I iterated 3 things that I felt I was concerned about, and you're saying I'm not saying anything. You are misrepresenting what… how I am contributing...

Stephen Curran: What...

Otto Mora: Okay, okay, so, so, folks, we're really not gonna get...
… this discussion sorted out. Uh, let's… let's, uh, just move on. There will be time


@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 2, 2026

Addressed @wip-abramson 's issues:

  • If service and/or serviceType query parameters are specified, only objects identified by those parameters are retained on the list (vs. keeping any non-service objects as well).
  • Removed a line that I should have removed when in a prior iteration.

@peacekeeper
Copy link
Copy Markdown
Collaborator

I'm still not convinced that the PathService addition is desirable.

Do we really want to add this additional complexity to the algorithm, just so that we can write
did:example:1234/path/to/resource?relativeRef=%3Fversion%3Dlatest

instead of
did:example:1234?service=MyService&relativeRef=%2Fpath%2Fto%2Fresource%3Fversion%3Dlatest

?

I think it's a feature, not a bug, that dereferencing of a DID URL path is completely method-specific, just like resolving the DID document is method-specific.

I also see a risk in this proposal that dereferencing of a DID URL path via HTTPS-based PathService is dependent on non-decentralized DNS and web infrastructure, whereas dereferencing of a DID URL path via the DID method would fully inherit the "decentralization" principles of DIDs.

But as I said before, I think this PR doesn't really break anything and is backwards-compatible. It feels nicely specified now. I also agree with @tweeddalex ' analysis that PathService and DID-Linked Resources can be complementary. So even though I personally don't like this very much, I don't object...

Comment thread index.html Outdated
Comment thread index.html
Comment on lines +401 to +407
Resolution</a> based on either:
<ul>
<li>[=DID service endpoints=] selected from the <a>DID
Document</a> using the `service` or `serviceType` query
parameters; or</li>
<li>a URL generated from a <a>DID URL</a> that contains a path
component.</li>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Resolution</a> based on either:
<ul>
<li>[=DID service endpoints=] selected from the <a>DID
Document</a> using the `service` or `serviceType` query
parameters; or</li>
<li>a URL generated from a <a>DID URL</a> that contains a path
component.</li>
Resolution</a> based on one of the following:
<ul>
<li>A [=DID service endpoint=] selected from the <a>DID
Document</a> using the `service` or `serviceType` query
parameter.</li>
<li>A URL generated from a [=DID URL=] that contains a path
component.</li>

Comment thread index.html
Comment thread index.html
Comment thread index.html
Comment on lines +516 to +517
`pathAlgorithm` attribute is not present, it MUST be
treated as if set to `relative-ref-2026`.</li>
Copy link
Copy Markdown
Member

@TallTed TallTed Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
`pathAlgorithm` attribute is not present, it MUST be
treated as if set to `relative-ref-2026`.</li>
`pathAlgorithm` attribute is not present, then processors
MUST act as if it were set to `relative-ref-2026`.</li>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This appears to be a severe example of indent changes due to tabs being used instead of spaces. Please don't use tab indents!

Comment thread index.html Outdated
Comment thread index.html
Comment thread index.html Outdated
Comment thread index.html Outdated
Comment thread index.html Outdated
Comment thread index.html Outdated
Comment thread index.html Outdated
<a>DID URL</a> path that the object matches, or zero if
no match is produced. Then eliminate all objects that
produced no match, and all but the objects that
produce the longest match.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
produce the longest match.
produced the longest match.

Comment thread index.html Outdated
characters) of the longest case-sensitive prefix of the
<a>DID URL</a> path that the object matches, or zero if
no match is produced. Then eliminate all objects that
produced no match, and all but the objects that
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
produced no match, and all but the objects that
produced no match, and all objects but those that

Comment thread index.html Outdated
Comment thread index.html Outdated
@peacekeeper
Copy link
Copy Markdown
Collaborator

My preference would be to formally shift away from relativeRef to the path-based approach.

I think we discussed before that this would create problems with query parameters. There would be no way to distinguish between "parameters for the resolver/dereferencer" and "parameters for the service endpoint".

@peacekeeper
Copy link
Copy Markdown
Collaborator

If so, the path handling in my did:webvh would identify a DID URL for a DID on Ethereum or some other blockchain. That URL could in turn be dereferenced, handled in a DID method-specific way, and the resource returned.

This sounds interesting, can you give an example what the DID URL(s) and DID document would look like in this case? Not urgent, I'm just curious..

@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 5, 2026

For a cheqd case, an AnonCreds schema on Cheqd has a URL did:cheqd:testnet:1686a962-6e82-46f3-bde7-e6711d63958c/resources/e788d345-dd0c-427a-a74b-27faf1e608cd. Cheqd's approach is for the "collectionId" for the DID Linked resource is embedded in the DID, and the "resourceId" in the path. So, one approach would be to make the DID URL path include the collection ID (did:webvh:<scid>:example.com/cheqd/schema/<resourceId>), and have the DIDDoc PathService have the basePath /cheqd/schema and the service endpoint id:cheqd:testnet:<collectionId>/resources/.

@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 5, 2026

Hit submit too fast on that last note. There are other options. For example, where is no path for the resource to be referenced, the full path in the DID URL might be matched so there is nothing added to the serviceEndpoint and it is the URL for the resource. It would depend on how the resource storing DID Method referenced resources.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 6, 2026

Sorry -- missed a note I meant to include in my response to @peacekeeper 's note about the URLs not having to be HTTPS URLs. I think there should be a way for me to to identify with my did:webvh DID a resource that is stored on a blockchain. If so, the path handling in my did:webvh would identify a DID URL for a DID on Ethereum or some other blockchain. That URL could in turn be dereferenced, handled in a DID method-specific way, and the resource returned.

The linkedResource extension is not did-method-specific. Any controller could add a linkedResource to any DID method that supports adding arbitrary properties to the DID document (as all should for extensibility reasons, but in practice some restrict the properties allowed), including did:webvh.

So if a linkedResource points to an on-chain resource--or an embeded resource--it needs to be processed, even if the DID method itself has some alternative path handling approach. If a controller of a did:webvh DID adds a linkedResource, that should be respected even if did:webvh has a proprietary path handling algorithm. (Replace with any DID method).

IMO, what is in parameters and the DID document should prevail over anything "did method specific", which should be a fallback for those DID methods who support features not covered by parameters or properties.

Comment thread index.html Outdated
@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 7, 2026

Interesting comments, @jandrieu -- I think we are more aligned than you think. Response to this comment

A fixation on "service" objects, which require a service endpoint, which is not appropriate for on-chain or embedded resources. There is a minor opening for other "objects" but the rest of the language continues to treat that set of selected objects as "services".

I inherited that it be based on a services. Happy to drop that limitation if that is what the group wants.

Your algorithm already does, it just doesn't carry it through. You state that you gather objects whose properties indicate they are path handlers, but then later, you refer to that set as "services" but linkedResources isn't a service, so those later steps in the algorithm are mispecified. You can probably just say "objects", which will bring into focus any assumptions we might have about those objects, e.g., we can't assume they have an endpoint value.

No way for path handler objects to specify that they are path handler objects. This breaks extensibility. Software written with today's understanding will not be able to even know they are mishandling properties they have not yet heard of. A good type mechanism solves this.

Please suggest such a mechanism. This was added at the request of the DID Working Group and I agree its nebulous.

Define a type parameter that any object can add that indicates it is a path handler, e.g., a linkedResource would need to add the single annotation so the type definition (based on the example in the registry https://www.w3.org/TR/did-extensions-properties/#linkedresource ) looks something like

{ 
  ...
  type=["pathHandler","hashgraph"]
}

Method first is NOT going to result in interoperability. It's going to fuel the opposite. There is no edit for that concern, so consider it concern #17. The goal of the resolution specification is to establish interoperability across methods. Giving every method the trivial opportunity to overwrite the path handling algorithm will absolutely break interoperability for DID clients.

I disagree and agree. When the ONLY identifier for a resource is a DID URL with a path, then the DID Method handling MUST take precedence, so putting first is the right thing to do. But I agree that using it as a "do what I want" makes implementations hard. Perhaps adding guidance on where this should/should not be used would help.

When the DID URL only has a path (no query part) , I fully expect linkedResources to continue to work as it does today, which is DID method independent.

IMO if a service or serviceType is present as a DID Parameter, that should override everything else. The explicit invocation of a particular service should determine which service is used. Period.

That is what is in the text. No disagreement. But that determination has to be in conjunction with the rest of the URL, including the path. And those query parameters can result in there being multiple services identified and that has to be handled.

Respectfully, the text makes is clear that DID method customization is considered first. That means that any new DID method can override the path handling, regardless of the DID URL and any properties.

7.1) If the DID Method specifies its own path handling algorithm, use that algorithm, and skip the rest of these steps.

It seems like the definition of relative ref has a major security challenge: the DID URL query parameter and fragments will completely overwrite the query and fragment parts of the service endpoint. I expect that is a surprise to most. If that's as desired, then at a minimum the text should make it clear that this is how the algorithm works. Path parts get concatenated. Query and Fragment gets overwritten. For fragments that might be appropriate (the client's fragment prevailing seems right), but for queries that seems problematic.

100% agreement. I think relativeRef is a problem and it should be deprecated ASAP. It is in the algorithm because I inherited it in the current spec, and have left it there. It does help a bit with confusion on what query parameters apply in what part of the process (retrieving the DIDDoc, handling the path, dereferencing the resource) but doesn't even completely solve it. As noted in #218 relativeRef is a security risk.

The biggest problem with relative ref is the dependencies on 3986 which I don't feel have been fully understood.

I'm up for removing relative ref altogether, but we would have to define a new path handling algorithm to replace 'Relative Ref 2026' which is at the core of your proposal.

IMO, that's probably the right call anyway, as the 3986 algorithm doesn't do what I think most people in this work think it does.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 7, 2026

To add to that last comment, I think a path handling algorithm that does what Stephen wants is going to be much simpler than the 3986 definition.

In particular, if all we want to do is to treat the start of a path in the DID URL as the signal for interpreting the rest of the path (and do a mash up that retains the base path as specified in the service), then we don't need to support queries nor do we need to defer to the overly complicated 3986. A simple concatenation of paths, ignoring queries is much much simpler.

If desired, we could even specify that queries in the DID URL are ignored by the path handling, always preserving any query part in the base path.

When we invoked 3986 in relative ref, I think we brought in more trouble than we knew.

@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 7, 2026

@jandrieu -- re: your comments here about Linked Resources and DID Method specific.

Sorry I wasn't clear in the comments, but I agree with almost everything you have in that comment. In the example, I was trying to show that a PathService, could have a non-HTTPS serviceEndpoint -- a DID URL that pointed to on-chain storage, and that when that DID URL was dereferenced, it would use the DID Method specific handling to retrieve the onchain resource.

I don't agree that a DID Method specific mechanism is necessarily a fallback. If the DID URL references an on-chain resource, where the DID URL is the ONLY identifier for that resource (that's the point of the DID URL), then it should take precedence.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 7, 2026

@jandrieu -- re: your comments here about Linked Resources and DID Method specific.

Sorry I wasn't clear in the comments, but I agree with almost everything you have in that comment. In the example, I was trying to show that a PathService, could have a non-HTTPS serviceEndpoint -- a DID URL that pointed to on-chain storage, and that when that DID URL was dereferenced, it would use the DID Method specific handling to retrieve the onchain resource.

I can use linkedResources today with did:btcr2, call it did:btcr2:abc/image.png which encrypts and encodes the image directly in the DID document. What DID URL do you want to put in that service endpoint? There is no other DID that will return that DID document with that data it only exists in the DID document.

Your PR makes this a dead end and breaks current functionality of linkedResources, which is not a did-method-specific functionality. It is a mechanism for defining in a novel property, linkedResources, everything you need to verify the resource and, if publicly accessible, means to retrieve it, whether from the DID document itself or any other system including those that do not have DIDs to retrieve resources.

I don't agree that a DID Method specific mechanism is necessarily a fallback. If the DID URL references an on-chain resource, where the DID URL is the ONLY identifier for that resource (that's the point of the DID URL), then it should take precedence.

I'm compelled to repeat myself. linkedResource is not a did-method-specific functionality. Putting the did method first not only does not solve the "linkedResource in a btcr2 DID document" dilemma, it breaks interoperability because every did method has to be understood by every dereferencing client.

The point of the DID Resolution spec is to expose a common API for resolution so that all clients that use DID URLs, i.e., all DID-enabled applications, can use a common algorithm without intimate knowledge of every method, just as http enables all web browsers to interact with any website without intimate knowledge of whatever content might be communicated over http.

Method-specific customizations are the job of the resolver--which does have to know the unique features of the DID. The resolving client should not need to know anything about a DID method other than which resolver they trust to return an authoritative DID document of that DID method.

@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 7, 2026

@jandrieu -- I have never intended to say that Linked Resources is DID Method specific. Sorry if that wasn't clear. What I said was that when the resource is uniquely identified by a DID URL with a path, then the associated DID Method would handle the DID URL. That is independent of whether the DID URL is passed directly, or determined via a PathService, DID Linked Resource, Linked Resource or some other "path handling object".

For a concrete example, a DID URL that uses DID Linked Resources to reference a Cheqd-hosted resource is retrieved using the Cheqd DID Method-specific software. The presence of the "did:cheqd" tells us to use that.

@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 7, 2026

The comparisons between PathService, DID Linked Resources (DLR) and Linked Resources (LR), raises a topic that I've not yet seen mentioned on this PR, but should be. Both DLR and LR have additional capabilities that are not addressed in PathService -- the inclusion of attributes that get at the verifiability of the resource and its relationship with the DID after retrieval. For example, LR and DLR objects may contain a hash and/or cryptographic proof that can be verified to attest to further attributes about the resource. This has not been included in PathService, but could (and probably) should be -- if optional. These can also be addressed in a query parameter for a hash, and are not needed if the resource itself if self-certifying, such as the Attested Resources that we defined for AnonCreds objects with did:webvh (but could be used with other DID Methods).

ADDED AFTER POSTING DID Linked Resources also supports an "inline" feature where the resource can reside in the DIDDoc. If the resource's URL is a Data URI as defined by RFC 2397, (Data URI Wikipedia Link), then it can be embedded in the DIDDoc as part of a PathService.

Happy to discuss in the group.

@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 7, 2026

Addressing the set of issues in @jandrieu 's comment here.

  • re: "service objects" vs. "objects" -- further removed references to "service objects" except when the service and serviceType parameters are referenced.
  • re: the mechanism to recognize path handling objects via type -- It seems to me that conflicts with the existing type attribute for objects. Let's discuss at the DID Working Group call and include someone with JSON-LD knowledge to know what is the best approach.
  • re: Linked Resources keeps working -- assuming that "Linked Resources" is a "path handling object", I think it works with the algorithm in this PR, and not via the "DID Method Specific" path. That said, if the path in the LR is a did:cosmos:... (or some other DID URL that is the only identifier for the resource), I assume that dereferencing the resulting URL will be DID Method specific. But we've gone back and forth on that...let's discuss on a DID Working Group call.
  • re: DID method can override the path handling -- I've added to that line that it should be used only when the DID URL is on the only identifier for the resource, such as a resource that is stored on-chain.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 8, 2026

When the ONLY identifier for a resource is a DID URL with a path, then the DID Method handling MUST take precedence, so putting first

Respectfully, that simply is not true for linkedResources today.

I've expanded on that in other comments, but you seem to keep asserting an incorrect understanding of how linkedResources work. I don't blame you for the confusion as the documentation for that is not particularly accessible. (It sucks when funding for advancing the standards gets cut.) However, I would appreciate some respect for actually knowing what I'm talking about, as I defined that property. You keep saying you can reduce it to a URL and, I'm sorry, but you can't.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 8, 2026

ADDED AFTER POSTING DID Linked Resources also supports an "inline" feature where the resource can reside in the DIDDoc. If the resource's URL is a Data URI as defined by RFC 2397, (Data URI Wikipedia Link), then it can be embedded in the DIDDoc as part of a PathService.

linkedResources also supports inline resources. Precisely because RFC2397 is not suitable for several distribution strategies. I hate to repeat what I've said in other comments, but the functionality specifiable in a linkedResource simply is not reducible to a URL. Not a DID URL. Not a data: URL. We would have used that if it was sufficient. It isn't.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 8, 2026

  • re: the mechanism to recognize path handling objects via type -- It seems to me that conflicts with the existing type attribute for objects. Let's discuss at the DID Working Group call and include someone with JSON-LD knowledge to know what is the best approach.

I am someone with JSON-LD knowledge.

That is how type extensibility works. You simply add the types that apply to the object. You can have as many as you want.

@jandrieu
Copy link
Copy Markdown
Contributor

jandrieu commented Apr 8, 2026

  • re: DID method can override the path handling -- I've added to that line that it should be used only when the DID URL is on the only identifier for the resource, such as a resource that is stored on-chain.

It isn't knowable if the DID URL is the only identifier for the resource. And if you did, you still wouldn't know if the DID method is the place that defines how to retrieve it.

You can add a linkedResource property to a did:webvh did document, with either an inline resource or an obfuscated one (hash or hashgraph) and the DID method provides no guidance about how to retrieve that resource. It is the property that tells you how to retrieve it. The DID method isn't even involved.

IMO, the only reason to have a fallback for DID methods is because we have an unfortunate legacy of suggesting that problems can be solved just by making them "did-method-specific". So we believe such things might be out there, but I actually haven't heard of any specific examples. It's a bit of a hack to say, hey, if you still rely on a DID method that does something weird, and that's the only way you can solve it, then you at least have a non-interoperable back door you can use.

Unfortunately, placing DID method customization FIRST literally creates interoperability problems. The goal in THIS spec is to remove as much did-method-specific processing when using a DID URL. All the client really should need to know is whether or not they have a resolver they trust for the method in a given DID. That resolver encapsulates all DID method specific processing. Clients call that resolver using a our resolve API. Then they interpret the returned DID document based on the properties in that DID document. Finally, they may interpret query and fragment parts to cherry pick the right parts of the DID document for their context, such as gathering the public key from a verification method to check a proof.

That architecture has nearly zero dependency or interference from did-method-specific path handling that they may or may not know about.

@w3cbot
Copy link
Copy Markdown

w3cbot commented Apr 8, 2026

This was discussed during the #did meeting on 08 April 2026.

View the transcript

w3c/did-resolution#316

Otto Mora: Yes, go ahead, Steve and Dan, maybe we can start. Start there...

Stephen Curran: Okay, so, um, I did, uh, do you mind if I share screen? I did that presentation that...
… would allow us, I hope, to focus on, um, the specific issues
… So, um, thought I would just walk through this
… And, um, take notes as we go
… So… this one, the first one right off, the data-specific method handling
… Um… Joe and I… Joe, I clearly… you don't understand what I'm saying, I don't understand what you're saying. I think
… My read of what you're saying is exactly what I'm saying, so I think we're in violent agreement, personally. Um, but
… Like, my read of this is that, um… 7-1 is there
… Because if the div URL contains a path, and. There is no
… um… that is the only path… that is the only URL for the object, like, it exists on a blockchain, then
… you defer to the did method that contained the blockchain handling code that allows the dereferencing of the resource. Um… I don't know what else
… uh… like, I'm saying the exact words you put in your last comment last night
… I tried to say the same thing you're saying, so I'm not sure of the confusion
… Do you want to go ahead, Joe?

Otto Mora: Uh, yeah. Go ahead, Joe...

Joe Andrieu: Oh yeah, I would just, you know, the queue's helpful, so… um… The...

Stephen Curran: I, I...

Joe Andrieu: linked resource property is not did method specific, so I can… I can put a linked resource in a DIDWEBH and embed the resource...
… in the did document, or reference it through obfuscation with the hash or hashgraph types

Stephen Curran: It's the URL!...

Joe Andrieu: And there is no URL that can represent that. So, even a did URL, because it is not a did at the end of the day. It is a did that is pointing to this resource, which is in the did document, or specified in the did document. So it's not...

Stephen Curran: So the URL is the div URL. That's what I'm saying. That's exactly what I'm saying. I canceled it...

Joe Andrieu: Yes, and the did URL has a WebHD method, which has no method-specific path handling properties...

Stephen Curran: No, no, no...
… And so… and I'm not saying it's so that… so that it
… Um
… So you're… you're talking about specifically the case where it's not an on-chain resource, you're talking about it's a did-linked resource inside the
… did linked… did link resource object. That's fine
… That's not did method specific, so
… I don't know, I just… I'm saying when there is an on-chain resource that requires
… Code that is specific to that on-chain that that
… take precedence. And that you can't
… Process it any further to get anything other than the need to go to that ledger and get the object off it, and that's the method specific
… Any other case, I'm not talking about. So if it's embedded in the div doc, I'm not talking about that
… I'm talking about when the div URL is the only thing that references it, because it's on a ledger and it requires ledger-specific code. To retrieve the object. The reference
… Is that not a valid case? We don't care about that

Will Abramson: Oh. Well, I'm on the queue...

Otto Mora: Yeah, go… yeah, go ahead, Will...

Will Abramson: Yeah, I just wondered, like, does this need to go first? Like, what's the argument for putting this first, as opposed to, like, putting it at the end?...

Stephen Curran: Because the rest of the things don't apply, and if that is the case...
… I mean, I don't care, but

Will Abramson: I guess I'm wondering, like...
… this is about, like, precedent, like, which takes precedent, right? Like, what if there is a conflict?
… you know, like, I have a did URL that… that did method-specific thing
… would handle, but then it also would target something in the DID document as well
… In this case, we're saying the did matter specific thing takes precedence, right?

Dmitri Zagidulin: Right...

Will Abramson: And in the other case, we would be saying, no, they did not have the specific thing comes last...

Dmitri Zagidulin: So, can you give an example of what you mean by target, something in the document?...

Joe Andrieu: There's a queue, Dimitri...

Will Abramson: Like, for...

Joe Andrieu: But go ahead and answer, Will. Okay...

Dmitri Zagidulin: There's… oh, whoops, sorry, sorry...

Joe Andrieu: Sound good...

Will Abramson: Like, for example, I would have, like, a, you know, a Path service...
… with, uh, a base path, right? That could target… like, that's what I mean by target, like, you should… you could also use this
… Um, service to the references
… like, to me, all of this discussion is around, like, like, not the simple case, but what happens when we have these conflicting properties. You know, a DID document has
… A path that could be dereferenced, potentially, or interpreted multiple different ways
… That's all I'll say

Otto Mora: Uh...
… Yes, and then Joe… Joe is next

Joe Andrieu: Um, yeah, you keep using the phrase that that's the only way you can identify that resource, um, but we don't know that, so we can't use that as guidance or heuristic in the algorithm...
… Um… the… the problem with it being at the beginning, and then I'm going to speak to the
… Does it… do we have a did URL for, um, some things that we don't?
… Um, but the reason I strongly feel it cannot be at the beginning is because this would undermine the entire point of trying to come up with a way
… that DID-enabled applications don't need to know the intricacies of DID methods
… What this suggests is that regardless of what properties are in your document, regardless of what query parameters are in your did URL
… The did method must be understood by the client of resolution, and that
… will create interoperability problems
… Um, but I also want to talk about, you know, if

Stephen Curran: Yep, okay...

Joe Andrieu: If this issue that… you imagine that there's a way to reduce this to a known resource...
… In the, uh, Bitcoin example, I think I posted it on, uh
… I think on your thread, but it may have been on mine. It is very hard to keep track of these things
… Um, the Singleton Beacon service type in BTCR2
… has a service endpoint of a URI. It is really not a URL. Now, because we're using the WhatWG definition for that property, it is technically a URL, but the Bitcoin colon address phenomenon
… When that is normally dereferenced by a software that expects it, it generates a payment form to make a payment to that address
… So, it is… it cannot, on its own explain how you apply the algorithm of the singleton beacon
… Um, in the process of resolving or verifying, uh, did BTCR2?
… I believe that helps

Stephen Curran: Not really. Um… queue, sorry...

Otto Mora: Q is, uh, next up, Dimitri. Jimmy...

Dmitri Zagidulin: Joe, I think I see what you're saying, uh, in your current comment. My question was. if I… if I understood correctly. your… original...
… The original problem with the did path algorithm, with the base path and everything, was that. It messed with
… Some did method-specific things, like
… uh, did link URLs, uh, something a Bitcoin might have, etc, right?
… And so I think in response to that, Stephen highlighted the fact that the did method-specific handling
… will take precedence, right? Just to point out that
… We're not introducing the base path
… Algorithm, the generic algorithm
… to trample on anything that the methods may already have had, right?
… And now you're pointing out very, very correctly and astutely that
… That does mean that clients have to be aware. Of the intricacies of each individual did method
… And yes, that's true, but isn't that
… Wasn't that the concern you were voicing originally?

Otto Mora: Go ahead, George, you can respond...

Joe Andrieu: Uh, sure, thanks. Um, no, my concern was that PATH Service dismissed the work of previous efforts and did not find a way to integrate it. It's not about precedence, it's about...
… We need to come up with a way so that we can have any, um, mechanism that is in the system that wants to provide custom path handling
… that it… that can be signaled so that you should use that path handling. That's where a huge chunk of my PR came from
… Was this realization that we need to disambiguate the retrieval strategy, and what are the signals that we can use that?
… And so, the did method is a really bad signal for interoperability. We shouldn't be using that
… But I can understand that we have historically told people you can do all this thing in a did method-specific way, so we believe that there are probably did methods out there that have specific path handling
… But my concern with linked resources is not about being did method specific, because that is a property which is not did method specific

Otto Mora: Okay, I know that, uh, Joe was there, but he just responded, so, uh, Steven...

Stephen Curran: Yeah, so I think given that, and the argument's good about the precedence, um, it should go...
… I think it is necessary because, as I say, I mean, originally I didn't have it. Then I put it in, sort of
… Because the working group suggested it, um, I do think there's a very valid use case that says. You know, ultimately
… If we're talking about something that we're trying to get off something where the div URL is
… the URL for it, that we move it down to where, uh, 7.6 is now, so at the bottom of the screen
… Where there's no objects matching. Um, that we could put it there
… Uh, so… in hopes of moving on, let's
… is that a… well, I mean, it's
… I don't think anything's acceptable at this point, so I kind of think it's… to keep discussing, but I could move it down there, and that could be the next step
… That's it

Otto Mora: Okay, and I see Marcus has his hand up, so… uh… yeah, it's not an IRC, but go ahead, Marcus...

Markus Sabadello: So I don't… I don't really understand why...
… It linked resources would not be considered method-specific, and
… In my mind, they are a method-specific way of geofencing the path, because
… It's supported by some deep methods, and not supported by other deep methods, and
… Other methods and other extensions may define other ways how the path can be. be referenced from
… So, in my mind, when we say something is
… Not method specific, then… then it… it would mean that
… It works consistently, uh, across all… Good method, so I think the… The path service
… such as Zoom, even though I don't like it very much personally, but I think that is a… Method independent
… feature, whereas the deep link sources… the deep link resources, in my mind, are a bit method-specific, uh

Otto Mora: Mm-hmm. Uh, uh, Joe...

Joe Andrieu: Um, uh, Marcus, you might be right about did linked resources, but linked resources is a different thing...

<Zakim> JoeAndrieu, you wanted to say because any did document can have that property. It has nothing to do with did methods

Joe Andrieu: And linked resources is not at all did method specific. It is a property that's in the extension registry. I can have a linked resource property
… in a did method… in a BTCR2 did, it can be… and it did WebVH did
… It really is not did method specific. So, this ordering of the protocol means that someone could come up with a path algorithm, create a DID method, and just obliterate the expectations around the properties that are expected to be applied. Um, independent of the did method

Markus Sabadello: Okay, thanks. Sorry, I mixed those up then. Sorry...

Joe Andrieu: Yeah, I think they… they're just… they have the metadata engagement, which I think does sort of entangle the did method. Um...

Otto Mora: Uh… yeah. Well...

Will Abramson: Yeah, I guess I just wanted to build on that, maybe, and say, like, that does seem to be the core of the...
… disagreement or debate here, that, you know, the point is, the controller controls the did document, and the controller can put whatever they want in a did document
… And whatever they want includes whatever might be defined in the future
… that we don't know about now and can't plan for now. So, I think the question is, how do we define a dereferencing algorithm. That can be future-facing
… while not closing off these points of extensibility, right? Like, and I think one of the proposals that has been discussed. Is, like, a type that flags
… this property in the did document, wherever it ends up
… is for handling paths, right? And that might be the path service approach, right? The path service is a type
… It's a specific type that is a service endpoint. I think Joe is saying that we should have something that's more generic than that
… And it just flags, this thing, this object, is this path handling
… thing, and you should
… Treat it as such, and if you don't understand it, then
… maybe you throw an error. I don't know about all that, but the point is, we want some way to identify all the things in the document that. The dereferencer should… Care about when handling fast. And that should be did method. independent
… Uh, I guess I'm wondering if people disagree with that as a thing that we should be doing

Otto Mora: I don't see anybody in the queue, but I see Steven wrote down a proposal...
… On screen to move down to 7.6

Stephen Curran: Um, I guess in response to Will's, I just went on a few, um, in response to Will's, um...
… comment. I… the only thing I don't under… I don't know is… is… The use of type. Um, in that
… I don't know what it means from a JSON-LD and all that perspective. I don't know enough about JSON-LD to
… To really understand that, so that's my only concern with using that as the signal. I've got that as another question later on in this
… Um, in this sequence, is how do we determine what our path handling objects?

Will Abramson: Hmm...

Stephen Curran: I mean, and I guess I'll...
… go back on the queue and say, um, I put this down here just because I think
… It's… we need to have
… A fallback at some point in the play, in the algorithm, for did method specific
… I get the argument for not putting it first. Um… It
… in that… I mean, unless from a practical, but… concern, I'm not
… particularly concerned about it from a practical, but I… but I… but I get why
… not to do it. Um, from a
… just from a processing, um, I would like it to move it down to the
… to the bottom, where if nothing else is triggered, then attempt a fallback. So that's where it was before, and I'll put it back there. So… That will allow us to move forward to talk about other topics
… Is that okay?

<JoeAndrieu> +1

Otto Mora: Uh, Marcus, is it Nikhil? Breakfast...

Markus Sabadello: Um...
… Sorry, I wasn't… wasn't paying attention, I
… Not sure if you're looking at the current version of the specification, or

Stephen Curran: No, I'm looking at my spec, um, version, uh, because we're talking about this… this PR...

Markus Sabadello: Okay, then I just want to say that in the current specification, there is such a fallback, right? In the algorithm, it covers...
… A few cases, like when there's a service parameter and things like that, but
… If… if that doesn't apply, so in the general case, it says if there is a
… path or a query that is not handled by the rest of the algorithm, then methods or extensions may specify how to dereference the
… path. Sorry, I didn't realize you were talking about the PR, but in the current. Specification, this fallback exists

Stephen Curran: That's… that's this section here...

Otto Mora: The .8, otherwise, if the date, okay...
… And uh

Stephen Curran: Um… Moving on to the next topic...

Otto Mora: I guess, yeah, nobody disagrees with moving it down to 7.6. I don't see anybody… Agreeing there… So, yeah. Go ahead...

Stephen Curran: Does it… um, so this is one thing Manu raised, um, um...
… So, I'll raise it here on his behalf. Um
… Does the did URL return a path to a URL, or… or the resource itself? Um, I originally had it that it return the resource
… Um, in… in review of this, it was suggested that it
… shouldn't, that it should just return the URL to the resort
… Um, I think Joe's arguments are… and Marcus has pointed out that there are other places, although they're… I find them pretty subtle, but there are other places where
… In the spec, a resource is to be returned
… Um, and I will acknowledge the language that you don't want the word return to be used at all
… Um, there isn't such a thing as anything being returned, um
… But I think it's fairly clear that
… Um, in the service… in the past service that I'm proposing
… Um, it should return not the path to the resource, the URL for the resource, but rather
… Um, the resource itself. So, currently
… in my PR, again, um
… That might be it, yeah. Um, it
… Uh, it returns
… an array containing the list of URLs
… Um, so I think it
… should be, you know, the resource should in turn… the URL should in turn be
… The referenced and… and the resource return

<Zakim> JoeAndrieu, you wanted to ask return from what?

Otto Mora: Okay. Uh, yeah...

Joe Andrieu: Um… yeah, my… my question was because, um...
… I thought you may have been talking about resolution. Um, but this does touch on why I ended up with an algorithmic rewrite
… Because I don't think a function that is forced to return something
… Um, tells us how to pull a resource or the representation thereof into the current context
… And so, during that process of figuring out which actual resource to dereference
… Um, it's understood that there are redirects, sometimes those redirects have multiple URLs
… Um, that's all fine, but at the end of the day
… The dereferencing application, the one who's calling this pointer and invoking it in the current context
… They pick one resource, and that's what gets dereferenced. So it's when we funnel it through a return value that we run into this weirdness that the dereferencer can't actually dereference to the one resource
… And so the party that is capable of making the choice between different resources is the client. And the client gets a DID document, and then figures out how to do dereferencing
… Um, so this is… this is really a, you know, a point that I think we should get rid of that, uh, dereferencer. Because it's causing this… this weird problem. And if we didn't have it, we wouldn't have this problem

Otto Mora: Okay, uh, Marcus?...

Markus Sabadello: Um, in the case of did linked resources, the result of dereferencing is, is the resource itself, right? So it's, it's not a...
… URI or URL, because the only URL for
… Titlinked resource is… is the Tit URL, right? There are no… there are no service endpoints, there are no HTTP URLs, so you
… you have a tutorial, you dereference it, and you get a resource, that's how… Did linked resources work?

<swcurran> +1 to what Markus

Markus Sabadello: in the case of the service parameter, so if you have a DTRL with a service parameter
… Then you select a service from the DID document, and the result
… After the referencing process is
… a list of the… of the selected service endpoint URIs. And I think path service
… works in a similar way, so in my understanding, the path service would also
… return a list of, uh, URLs, not, uh, not the resources themselves

Otto Mora: Uh… Steven?...

Stephen Curran: Um, two points. I fundamentally don't agree with Joe's comments about, um...
… What a client is, and what a dereferencer is
… Um, and Marcus, I agree with your comment that it should return a resource, and we should… adjust it to say
… specifically that, that the next step should be dereferencing whatever that URL is, whether it's a
… HTTP URL, whether it's a DID URL or any other type of URL, we should dereference it after that, if possible, obviously, because that might not be possible
… That's it

Otto Mora: Joe?...

Joe Andrieu: Yeah, Steven, I'd like you to unpack what you don't like about the client definition, since I'm using the definition that's in the spec right now. Which is, it's the software that calls the resolver...
… Um, but also, I think… I think we're conflating here the difference between
… a redirect functionality, which is what the 300, uh, response is that Manu mentioned on our last call
… Um, and something that returns multiple resources. That's a redirect, not the actual reference. The client who tried to redirect with the first URL is now given some other options
… to… and I must pick one, and then dereferences one. So the final process of dereferencing, at the end of the day, is a single resource. In the current context
… Um… and I don't know how we do that if we're returning URLs
… Because that doesn't seem to bring the actual resource into context. It's just a redirect

Stephen Curran: Um, again, to unpack, I think if… if the spec does not tell us...
… what to do with a did URL
… And that it's left as, you know, up to the caller
… Um, and… and we just then
… Then, even if… then, what's the point of the spec to me? Uh, we're trying to give guidance to say, when you get this
… You return the result
… when you… when this did URL is processed, we wanted many
… implementations… To do the same thing
… And… and to abdicate and say, oh, it's up to the client to do
… to do it. I think you could say that, but they… we still want them to do all that implementation of that client to do the same thing, so I think
… It's just confusing to have the client involved at all
… Um, so that's why I don't understand your
… Reframing of it, using just

<Zakim> JoeAndrieu, you wanted to say my PR says exactly what to do with a DID URL

Stephen Curran: Using client, I just don't think I've had. That's it

Otto Mora: Sure...

Joe Andrieu: Yeah, so my PR does, in fact, explain exactly how the client of resolution prepares...
… Invokes, and then responds to the result from resolution
… The spec is absolutely explaining how any dereferencer of a did URL
… Can correctly call and process resolution
… It is exactly what happens on the web, where what we specify for an HTTP URL
… Is it, hey, you should go and get it, and then it… render it based on its mime type
… And if it's an HTML page, it's gonna trigger off a whole bunch of stuff, and different browsers will render that differently
… Um, and so, fundamentally, you can't get rid of the client. The client, at a minimum
… Absolutely must be dereferencing the fragment

<swcurran> Agree on the fragment

Joe Andrieu: And it also must be choosing the singleton resource if there is a possible plethora. Based on content of the document
… Um, so I don't… I mean, the client is a fact of the system. I don't know how we can ignore it, and I do define the algorithm of what that client should be doing

Otto Mora: I will...

Will Abramson: Yeah, to say, I think I agree with what Joe just said. In his...
… VR, you know, he's defining this thing called a client, which, as he says, does exist, right? There is a client that takes a did URL and
… and does something with it, the first thing they're going to do is resolve the did, right, or resolve the URL
… Now, and get back the document, and then they're going to do some
… some extra steps, which I think still in Joe's PR is called
… the URL dereferencing algorithm. So, in my sense, what Joe CR changes is. Instead of calling… Something a dereference, sir
… it's now called a DID URL Client
… And there is no function call, like, there's no function contract that you… Call to dereference
… Rather, it's an algorithm that, I guess, doesn't have, like, a
… Like, inputs and outputs explicitly defined. But the algorithm itself is
… defined in the status. I guess
… You know, like, some bits that maybe are slightly less defined, like, use the resource
… Um, but I think that's not for us to define how the resource is used
… I don't know, that was my understanding. So I guess I'm a bit confused, Steven, whether you are not happy with the fact that
… it's called a client, like, the did URL client, because I think Joe's real still makes sense if that was called the did URL
… dereferenced it, right? It's just a name for this thing that is executing a res… you know, calling out to a resolver. And then doing some stuff with the results

Stephen Curran: Um… sorry, I'll keep plus, but anyway, um...

Otto Mora: Yep...

Stephen Curran: Um...
… Yes, I definitely don't like the term client, because to me, that… conflates
… Um, this idea of… of
… Calling an algorithm and then getting something back, but we're… and then even more, I don't like this idea that you call an algorithm
… With unspecified inputs and get unspecified output
… That just seems odd to me. I mean, there's lots of things that
… Maybe in there, but to say that is
… I, I don't understand

Otto Mora: Marcus?...

Stephen Curran: That's it...

Markus Sabadello: Um, I agree with Joe that, uh...
… In the dereferencing process, or algorithm, or function, or whatever we call it, that
… Resolution is a part of that. It's a… it's a first step, or an early step
… And in that step, whatever we call the component that's doing the dereferencing
… does indeed act as a client of a resolver, so I
… I agree with that. I don't think it
… It means that we need to get rid of the concept of a dereferencer
… So I would agree that the DTO reality referencer is
… A client to a… to a resolver
… What makes all of this sometimes a bit confusing, maybe, is the fact that we
… Never really have a… a fixed, uh
… Network setup, or network topology, let me
… We don't say that a resolver must be a server that exposes a network endpoint
… In the case of Did Key, for example, then you can resolve Did Key entirely locally
… But from a logical perspective, there's still a client and a resolver. It's just all local, and if you have a DID key with a fragment
… Then you can also logically construct the referencer, which is a client, to a resolver
… But in the end, the key with a fragment, you can also dereference entirely locally without any kind of
… Endpoint or network communication, so this is maybe what sometimes
… A bit difficult to understand that sometimes these steps can happen locally and sometimes they do involve
… remote endpoints, which is why we have the HTTP bindings
… But, uh, yeah, just to confirm the idea that the reference is
… He's a client to a resolver that… But that makes sense to me

<Zakim> JoeAndrieu, you wanted to say clarify the spec defines a client today

Otto Mora: Uh, yeah...

Joe Andrieu: Um, yeah, I… I agree that as the spec currently reads, Marcus, the dereferencer is acting as a client to the resolver...
… Um, but in the current spec, the client is what calls the resolver
… Um, it is not what calls a dereferencer, and that's… that's where we have this hiccup that I think is very confusing
… Um, because there are multiple clients, and we do not adequately describe how both of them do things differently
… Um, as we certainly only describe on the
… Final, final client, this fragment dereferencing thing. And, um
… Perhaps more importantly, I don't understand why a client with a did URL
… Would need to have a function that packages the inputs and outputs in this way
… I understand, um, Steven, your… your confusion is… Um, you know, but how do you call it?
… But you don't call an algorithm. You evaluate or execute an algorithm
… And so, when a web browser is rendering a page, it is executing an algorithm
… Now, internally, it may have all sorts of classes and methods and functions that go down very, very deep, but I had tried in this… in the latest rev of mine
… to clarify, I don't mean client as something that goes over a network, um, in terms of the problem with the dereferencer
… To me, it's that it is reduced to a function which requires specific inputs and has specific outputs
… Because those outputs don't map clearly to how the rest of the world talks about dereferencing. It's… it's a weird
… Um, we still have to dereference what the dereferencer returns

Otto Mora: Uh, Steven...
… You're on mute

Stephen Curran: Sorry. This specification… I'm reading the current test in the introduction. This specification defines a standard interface that clients can use to execute did resolution. And did URL dereferencing request...
… That, to me, says the clients are outside the scope of this, so where it's used inside, such as that reference you made in the… your… in the
… your referencing algorithm, it's incorrect, it shouldn't be, because the client is outside of this specification. That's the thing that I'm
… I can't get my hand… I can't get my mind around what
… how you've repositioned clients. So, um, I assume you've removed that from the spec to
… But to me, that is exactly what this spec is for, and that it does lead to a client makes a. invocation. Uh, and get something back
… And… and we're trying to make it… Consistent
… And, and to not make that is… means the spec is… Fundamentally changed
… That's it

Otto Mora: Mm-hmm. Well...

Will Abramson: Yeah, maybe Joe will speak to this better, but my understanding is what Joe is saying is that's. Wrong, because the client...
… is defined as doing things in the current spec, right? Like, it is at least handling the fragment

Otto Mora: Mm-hmm...

Will Abramson: So, like, it is inside the dereferencing process, whether we like it or not...

<swcurran> Fragment is the one special case.

Will Abramson: So, isn't it better to actually draw the boundaries a little different, I think? That's my understanding, what just replaced

<Zakim> JoeAndrieu, you wanted to say my PR changes that opening line

<swcurran> But that is the only one

Otto Mora: That it still has a role in the… at least the fra- yeah, it could, yeah. Uh, so...

Joe Andrieu: Um, yeah, that's… that's exactly right. I mean, the… the...
… I just got distracted by Steven's comment. Um
… The… the fragment isn't a special case. Um… But
… I am breaking the current spec with my PR, because I believe it introduces this object
… that people don't understand. And I… Steven, I think you're one of them
… And I made that with all the love in the world, because I do really like you, Steven, even despite our technical differences. Um, but
… A web browser, as a dereferencer of URLs, doesn't need to expose an interface to anyone
… Um, and it doesn't have to organize its internals according to any particular function

<swcurran> A web browser is the client

Joe Andrieu: Um, what it does is it uses the specifications and the protocols out there to execute algorithms that go out into the world and bring resources back into the current context
… Um, and I think I'm trying to follow that pattern. In the introduction of a dereferencer, I think
… Um, is very strange. Um, and I think it's… it's a real problem

Otto Mora: Steven?...

Stephen Curran: Again, I failed to understand. To me, the web browser is the client...
… passes the did URL to something, it uses DNS to figure out who to pass it to, and then it gets the result back, and after that, it
… it does some things. Now, the difference with the docs is you've got this
… You've got to get the relevant did dot first
… And then, um, there may be other things you need to do
… Um, and so that's slightly different, and that… that's where this… two-part. Comes from, but
… I still… I still think a client simply passes a did URL into
… Into a logical piece of software that may… that software may have many different components to it, and may be remote or local or whatever, and… It expects, from that logical
… Call will get back a result that it
… Expects and can process and if we aren't doing that, then
… and this back is not doing what the current introduction says, then I think it's
… It does not help implementer in any way

Otto Mora: Oh, well...
… Oh, sorry, I don't see anybody in the queue anymore

Will Abramson: No, sorry, I was on the queue, I just...
… Yeah, I was trying to say, uh
… I mean, there is something I wanted to say to that, but, like, just at a higher level, you know, we know we talked for an hour now
… I… I… I don't know, are we any closer to either of these, you know, like, having some points of consensus. It feels like within these PRs, there are points of consensus, but they're also. Point of severe
… disagreement, and I'm wondering how we… Can move closer towards
… something that the group would agree with. Uh, and with that, I'll also say, Steven, like, I think what you say, like, the web browser is the client
… To me, that is exactly right, and it's the web browser as the client that is
… Executing the dereferencing process, right? I think. Uh… Anyway

Stephen Curran: I don't think so, I think it calls… It calls...
… I don't know. It's… this is… yeah

<Zakim> JoeAndrieu, you wanted to say that singular result is the DID document from resolution. if the client needs to verify a proof, that's not well handled by returning a subset resource

Otto Mora: Okay, Joe?...

Joe Andrieu: Um, yeah, I agree with the framing at the top level that you had, Steven, that when you get a data URL, you should be able to call a function that...
… encapsulates all the did method-specific stuff and gives you back the metadata you need to dereference the resource or to use that did document in a particular way
… Um, if… if I'm a… if I'm a wallet, and I am proving a… or verifying a proof. That comes out of a verification method
… Um, you can't just give me the public key of that. They need to hold the document to get the context to actually perform the function
… So in that context, the final dereferencing is the application of that verification method to the current algorithm
… Um, it isn't a resource that gets returned that says, yes, it's verified, because
… that dereferencer, which… the actual dereferencer of the DID URL is processing a verifiable credential, and that dereferencer as a client needs to apply the information in the DID document
… to do that. They're not offshoring this verification check to some other dereferencer

Stephen Curran: And up. Okay...

Joe Andrieu: like, it's really just a category error. Um, but I want to try, and… hold on, Steven, I wanted to try and turn our attention to, I think, really a bigger problem...
… That hasn't come yet up on the call, um, which is the dependency on the 3986, um, relative ref algorithm
… Um, I honestly don't think it does what people think it does, and I think it is a big security problem
… Because it allows any DID writer to create a DID URL that completely bypasses the service endpoint in the DID document
… Um, you can rewrite the query, you can rewrite the path part, um, all that seems problematic. Um, I commented on it with
… quotes from the 3986 algorithm to try and clarify, but we as a group need to be… I think what we should be doing is figuring out what is the actual use case, Steven, that you're fighting for
… And let's figure out the best way to support it. I think what you're trying to do is enable a DID to be the top level of, like, a folder structure, a file hierarchy
… Um, and let people just append file paths and names to the DID, and have the DID document point to where you go to go, you know, find that set of resources. I think that's a fine use case
… Um, uh, but we need to figure out how to do it in a way that doesn't create a security problem, and I think dependency on the 3986 is, in fact, a huge security hole

Otto Mora: Uh, yeah, and we want to move to the What WG. There's an open issue for that, but… Yeah. Go ahead, Steven...

Stephen Curran: Um, two things. 100% agreement that I don't expect a client to call. Uh, did URL...
… processor, and have it verify a key for me. Absolutely. And… and
… The client is going to do something after it gets a result back from dereferencing
… What I'm saying is just that we're trying to make a
… An abstract interface, if you will, that allows a consistency in what… in what happens
… when a client passes a bid URL into that interface, and something comes back
… Um, as to the 3986
… I, I agree, relative rep itself, the, the, the, um… the

<JoeAndrieu> the interface is the problem. the algorithm is what is important, not what is passed or returned

Stephen Curran: the, uh… the relative ref query parameter is problematic. Um, I
… Yeah, I can't comment on whether
… Our attempt… when we… there are places where we attach. A
… a relative reference, not the query parameter, but a relative reference to a base URI, and my understanding is the way you do that is 3986 section 5
… If that's not right, that's fine, but I sure don't want us to define in this spec
… a way to do that, and cover all of the possible edge cases and use cases. That… I thought that was the purpose of using Section 5, if that's not right. beyond me

Otto Mora: Joe...

Joe Andrieu: Um… I think that was an old queue, but um...
… I… I… I do think we shouldn't be using it. I think it's… it

<swcurran> What should we use?

Joe Andrieu: The fact that whatever is put in the service endpoint
… Um, can be completely overwritten by whoever writes the did
… Um… I think is not the expected behavior. Um

Stephen Curran: Are you talking… sorry, Joe, are you talking about the relative ref query parameter?...
… Or the use of 3986 in general. section

Joe Andrieu: The use of the… specifically, the 3986 reference resolution algorithm...
… Because all that is retained, um, when you have a relative ref that starts with a slash
… Is the authority part, i.e. the domain name, host name, port
… user name, etc. Um
… The whole path and the queries, they're all gone, they're all rewritten
… Um… if… that's the problem

Stephen Curran: Okay...
… Then… okay, so that's
… The security issue, but also the fact that it… it overwrites as opposed to simply adding on to whatever is already there
… My understanding, again, I was just following the guidance
… Was that it would handle all of the edge cases of
… logically appending
… the relative reference part to whatever the existing URL was. If it's not doing that, then yes, I agree

Joe Andrieu: Yeah, what it does do a good job is the… and you can knock me off the queue, um...

Stephen Curran: Hmm...

Joe Andrieu: is sort of deconstructing the path and reconstructing the path in a good way. It deals with, like, dot parts, you know, if you have a dot in your path, you collapse it, etc...

Stephen Curran: Okay...

Joe Andrieu: Um, but it is… the edge cases that it deals with are for this website use case...
… Um, and that's not quite our use case

Stephen Curran: Yeah...

Otto Mora: Mm-hmm. So, okay, so just to close, I'm not sure if this, uh, particular, uh...

<ottomorac> w3c/did-resolution#275

Otto Mora: Uh, issue of the 3986 should be part of this other issue, the 275. Um… yeah

<swcurran> So how do we say what we really mean?

Otto Mora: Or maybe we just open a separate one, Joe, if you want, but uh… maybe
… Maybe, yeah, maybe that's the action item on that one

Joe Andrieu: H...

Otto Mora: And, um, yeah, we can continue the discussion tomorrow. Sorry, go ahead...

<swcurran> If we can't use Section 5 as a "short cut"

Joe Andrieu: Yeah, just… just a comment real quickly, Otto. I'm pretty certain that the WhatWG is gonna be the same, because the functionality...
… that you want from a relative ref in a web page is, if I don't use a path, then you keep the parent. um, sort of path of the resource that I'm at
… Um, and that basically starts in the current directory, if you're thinking in a Unix way
… Um, but if you start with the slash, it goes back to the root authority. Like, that's… that's deeply baked into the web, so
… I… I don't believe we're gonna get around this with the… going and figuring out how the… what WG does it, because. Functionally, it's gonna end up the same

Otto Mora: Okay...
… Okay, well, we are time, uh, so yeah, we will debrief tomorrow. I think at least we do know where
… People are coming from each side, so I think at least in that sense, we're a little closer to at least understanding the differences
… Yeah. Uh, thank you, gentlemen

Joe Andrieu: Thanks, Otto...

Otto Mora: Thank you...

<ottomorac> transcriber-bot, pause


@swcurran
Copy link
Copy Markdown
Contributor Author

swcurran commented Apr 8, 2026

Four updates to the PR:

  • Reverted the placement of the DID Method specific handling to behind the "if no matching objects are found".
  • Reverted the result of a path with multiple matching path handling objects to be an error.
  • Reverted the result of identifying a URL for a path as being the dereferencing of that URL (vs. just returning it).
  • Added a Note in the spec for DID Controllers that there are places where RFC 3986 Section 5 processing and they should be aware about the endpoints they put in their DIDDocs.

On the last, I think this is a first cut and happy to get feedback on both placement in the spec and wording.

@peacekeeper
Copy link
Copy Markdown
Collaborator

IMO, the only reason to have a fallback for DID methods is because we have an unfortunate legacy of suggesting that problems can be solved just by making them "did-method-specific". So we believe such things might be out there, but I actually haven't heard of any specific examples. It's a bit of a hack to say, hey,

I think in the various recent discussions, we have provided several concrete examples of DID URLs with path that are dereferencing in a DID method specific way, so I'm a bit surprised that you haven't heard of any specific examples?

One example is:
did:cheqd:testnet:25bf6e00-aca3-42a2-9753-1e8fd4024760/resources/365dd1c6-29fd-45dc-8162-70a69ea416e8

-1 to characterizing DID URLs like this as an "unfortunate legacy" or a "hack".

@peacekeeper
Copy link
Copy Markdown
Collaborator

peacekeeper commented Apr 13, 2026

There are some resources associated with a DID for which a DID URL is the only URL, and that's fine.

I agree, and I'd go even further to say that the DID URL being the only URL for a resource should be the default mental model. I'm a bit worried by discussions that over-emphasize DID URLs which return other URLs when dereferenced. Yes this is possible, e.g. when using the "service" DID parameter or the proposed "PathService". But DID URLs which can be dereferenced directly to a resource without any (HTTPS-based or otherwise) indirection should be the primary assumption.

I don't agree that a DID Method specific mechanism is necessarily a fallback.

Yes, I also think that the "fallback" language is problematic. This would be a bit like saying that an HTTPS URL should usually redirect to some other URL, and that returning a resource directly would be a "fallback".

Comment thread index.html
<h3>`PathService` Service Type</h3>

<p>`PathService` is a `type` of `service` object used to generate a
URL for a resource from a DID URL path. Its `pathAlgorithm` attribute
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that in the DID Core spec, this is called a "DID Path", not a "DID URL Path", see https://www.w3.org/TR/did-1.1/#dfn-did-paths

Comment thread index.html
</li>
<ol class="algorithm">
<li>
Collect a list of all of the objects from the
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really all objects?! Including verification methods and any extensions?

Comment thread index.html
<li><b>content</b>: <code>null</code></li>
<li><b>dereferencingMetadata</b>: <var>error
object</var> with type set to <a
ref="#INVALID_DID_URL">INVALID_DID_URL</a></li>
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should probably be REPRESENTATION_NOT_SUPPORTED rather than INVALID_DID_URL

Comment thread index.html
</li>
<li><b>dereferencingMetadata</b>: <var>error
object</var> with type
set to <a ref="#INVALID_DID_URL">INVALID_DID_URL</a></li>
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't be INVALID_DID_URL (this is for invalid syntax of the DID URL).

Comment thread index.html
<ol>
<li>
For each object, retrieve the value of the path attribute
designated by the object's <code>type</code> (e.g.,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would this be designated by the type? Why not always use a fixed property such as "basePath" across all types?

Also, I think the section on "PathService" doesn't actually designate such a path attribute. Readers will likely assume that it's "basePath", but it's not explicitly stated in "PathService" that "basePath" is the path attribute mentioned in this section here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants