Skip to content

Conversation

@famfo
Copy link

@famfo famfo commented Aug 6, 2025

Pull Request Checklist

Preview: https://pr2191--matrix-spec-previews.netlify.app

@famfo famfo requested a review from a team as a code owner August 6, 2025 20:06
A millisecond POSIX timestamp in milliseconds indicating when the returned
certificates will need to be valid until to be useful to the requesting server.
A millisecond POSIX timestamp indicating until when the returned
keys MUST at least be valid.
Copy link
Member

Choose a reason for hiding this comment

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

TBH, I personally find the existing wording easier to follow and the proposed wording sounds awkward to me. Aside from the redundancy regarding milliseconds, and calling it certificates instead of keys, I don't see any problem with the existing wording. But if you think it's unclear, maybe something like:

A millisecond POSIX timestamp. The returned keys must be valid at least until this time to be useful to the requesting server.

Copy link
Author

Choose a reason for hiding this comment

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

That proposal is also more understandable, it would be nice to actually use RFC2119 keywords after they have been introduced at the beginning of the spec ^^

Not sure if the "to be useful to the requesting server" is adding anything useful though, it is kinda unnecessary and already implied in my opinion.

A millisecond POSIX timestamp. The returned keys MUST at least be valid until this timestamp.

Copy link
Member

Choose a reason for hiding this comment

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

I believe the intention here is not to say that the returned key MUST be valid until this timestamp in the RFC2119 sense, but rather that the parameter expresses the minimum time that the requesting server wants the keys to be valid for.

That is, the intention here is to explain the meaning of the parameter, rather than to set a requirement for the response. The current wording doesn't set a requirement on the response, so it would be a spec change to make it into a requirement.

Copy link
Author

Choose a reason for hiding this comment

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

The interpretation of the existing parameter could go either way here, exactly because defined language is not used (which is unfortunately all over in this spec).

Not having a requirement on the response for query parameters is... definitely unexpected reading a definition for said query parameters. Something along the lines of "The returned keys MAY be valid until at least this timestamp." would be more in line with this interpretation.

In my opinion, having such a parameter is kind of pointless if it does not impose any requirements (which, I agree, removing it would be a spec change. I don't see how requiring the parameter to have an effect would require a spec change though).

Copy link
Member

Choose a reason for hiding this comment

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

I think @famfo's updated wording is much clearer, but @uhoreg is right in that this technically is a change to the spec.

The interpretation of the existing parameter could go either way here, exactly because defined language is not used

This is the crux of the issue. The language of the spec could be interpreted as "The returned keys MAY be valid until at least this timestamp", and thus a "MUST" is a change.

To move forwards here, I suggest:

  • This PR change the wording to be MAY instead of MUST, so that this becomes a clarification.
  • A (very small) MSC be opened to update the wording to MUST.

...as I agree that I don't see a need for homeservers to ask the remote for keys that must be valid after a certain date, only for the remote to return keys that aren't.

Copy link
Member

Choose a reason for hiding this comment

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

Yes, the current wording is kind of strange. It implies that something is expected from the responding server, but doesn't actually spell it out as a requirement, and doesn't say what should happen if the responding server is unable to meet that requirement.

Looking at the synapse code for responding to this request, it looks like synapse is using this parameter as a hint for whether it can use a cached value, or whether it should re-fetch the keys: if the cached value is new enough to satisfy the minimum_valid_until_ts, then it will just send the cached value, no matter how old it is. Otherwise, it will try to re-fetch the keys from the remote server. But unless I'm missing something, I don't see any attempt to actually filter out values that are too old. If the only value that the server can return is too old, AFAICT, it will still return it.

Copy link
Member

Choose a reason for hiding this comment

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

In that case, I suggest we clarify this as "The returned keys MAY be valid until at least this timestamp" and file a separate issue to discuss whether this should be changed to a MUST.

Today, someone implementing the spec may misinterpret the vague wording and expect the wrong thing from i.e. Synapse.

@famfo famfo requested a review from uhoreg September 11, 2025 00:20
@tulir tulir requested a review from a team September 20, 2025 17:30
@@ -0,0 +1 @@
Clarify what the minimum_valid_until_ts field means when it is set in key queries.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
Clarify what the minimum_valid_until_ts field means when it is set in key queries.
Clarify what the `minimum_valid_until_ts` field means when it is set in key queries.

A millisecond POSIX timestamp in milliseconds indicating when the returned
certificates will need to be valid until to be useful to the requesting server.
A millisecond POSIX timestamp indicating until when the returned
keys MUST at least be valid.
Copy link
Member

Choose a reason for hiding this comment

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

I think @famfo's updated wording is much clearer, but @uhoreg is right in that this technically is a change to the spec.

The interpretation of the existing parameter could go either way here, exactly because defined language is not used

This is the crux of the issue. The language of the spec could be interpreted as "The returned keys MAY be valid until at least this timestamp", and thus a "MUST" is a change.

To move forwards here, I suggest:

  • This PR change the wording to be MAY instead of MUST, so that this becomes a clarification.
  • A (very small) MSC be opened to update the wording to MUST.

...as I agree that I don't see a need for homeservers to ask the remote for keys that must be valid after a certain date, only for the remote to return keys that aren't.

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.

3 participants