We describe where the json representing a wiki page can be stored and how pages move between these stores.
Representation
A wiki page is a json object with members for title, story and journal. All are optional so {} can be a page, but [] cannot.
A title is expected to be a string which can be converted into a slug. Titles of various capitalization will produce the same slug. Stores often index pages by their title's slug. The slug of a slug is the slug.
We think of a page as being json even when it has been parsed into some host system's object representation. Good practice does this parsing as soon as possible.
Residence
Servers managing a single site or a farm.
Servers on the internet, an intranet, or a private computer.
Local Storage in an html5 browser.
Included with plugins as documentation.
DOM elements of class 'page'.
Create actions within the journal of a later version.
Importer scripts and the files they read.
HTML text cached somewhere in the web from a server-side rendering.
System pages, like recent-changes.json are constructed on demand from system information.
Addressing
Internet addresses for pages are formed by combining slugs with various storage indications.
origin.com/slug.html — retrieve the HTML rendering
origin.com/view/slug — retrieve the js to render slug
origin.com — same as origin.com/view/welcome-visitors
origin.com/view/slug_rev2 — render a revision of a slug
The js rendering interprets various alternative storage indicators. These can be repeated in indicator/slug pairs to specify multiple pages to be displayed at once.
origin/slug — retrieve page from origin server ignoring browser local storage copy if any.
local/slug — retrieve page from browser local storage ignoring the origin server copy if any.
view/slug — retrieve page from origin or local, giving preference to local if present
domain.com/slug — retrieve page from a remote server ignoring copies in local or origin.
Transport
A browser gets a page from a server in response to a GET request, often via ajax.
A browser puts updates to a page by sending actions that can be interpreted by the server, presumably via ajax.
A browser writes whole pages to its own local storage when it cannot save edits on a remote machine.
A browser puts a bundle of pages, usually changes, usually stored in new space on a farm.
A browser puts an individual page from local storage to a writable origin. This is a recent variation on the fork action.
A browser gets a page from a remote server via CORS request.
A browser gets a page from a remote server via the origin server acting as a proxy. This is deprecated but not yet eliminated.
An administrator moves pages or whole sites by scp or related mechanisms.
An importer runs and writes, typically, to page space of a private computer.
An importer runs automatically and writes to page space of a public server.
An importer adds its constructed story to a create action in the journal.
An importer retrieves previously constructed pages so as to preserve previous creates that exist in those journals.
Fork
A fork involves retrieving a page from one store and saving it in another store where it can be updated independently from its source.
A fork should be recorded as a fork action in the journal. This satisfies the attribution requirement of the creative commons attribution, share-alike license.
Caching a page for more efficient access is not a form of forking.
Publishing a page from a private staging location is not a form of forking.
Saving a page in browser local storage is considered a fork. Saving it back to the origin is also a fork.
Ghosts
A ghost page is one that isn't explicitly stored in the server's database.
A revision retrieved by reconstructing it from the journal of a page.
A page that is cited in a link or in a url but does not yet exist.
A page that holds the results of a search.
A page that holds the results from a failed server request.
But not a page retrieved from the pages component of a plugin.
But not a page retrieved from the server's default pages directory.
But not a system page like recent-changes.