What I have been doing is: ...
It may be helpful to point out that this (very nicely done) system doesn't completely eliminate "prior knowledge," and doesn't completely prevent breakage by change. What it does, rather, is to isolate the things-whose-change-would-break-stuff to places that can be controlled, and really aren't likely to have any good reason to be changed. Meanwhile, things-more-likely-to-change appear only as data values in some map keyed by the not-likely-to-change keys.
For example, this document (the URL I mentioned at top) informs us that there is documentation for the system at <
https://github.com/JornWildt/Mason>. To see this, you need such "prior knowledge" as
* JSON format (not likely to change)
* keys "@meta", "@controls", "documentation", and "href" (which would be foolish to change)
But you do not need to know the actual URL, which is good because actual URLs are subject to many kinds of change: what if Jørn moves his dox to Bitbucket? What if someone sues him over the term "Mason" and he has to start calling this system "Folderol"? Or he decides to publish the dox in some HTML format prettier than Github Markdown HTMLization, at <
https://somewhere.else.com/JornWildt/Mason.html>? In all these cases, you don't care: you fetch the root JSON, feed it to some JSON parser, and dereference some (unchanged!) map keys. The resulting href may change, but to you it's just a string you hand to a web page DOM, or an HTTP GETter library.
Farther down, the safe prior knowledge of JSON, "@controls", "is:issue-query", and "href" nets you the URL <
http://mason-issue-tracker.azurewebsites.net//issues-query?text={text}&severity={severity}&project={pid}>, which is going to cost you some more "prior knowledge," this time about RFC6570 and a library function to implement it. But that's relatively stable, generally useful knowledge. Meanwhile, Jørn is free to change the URL, maybe by "load-balancing" queries to a different host than receives is:project-create, or requiring that "project={pid}" appear before "severity={severity}", or switching the template parameter specification around to a form that makes the query keys optional (.../issues-query{?text,severity,pid}).