# ============================================================ # sirrobert.net — site specification 0.5.4 # A personal home base: interests, writing, links out, history. # ============================================================ # # STATUS: SPECIFY. 0.5.4 says a date is a value like any other, edited where it is shown; that # an article is revised only by a change made after it was first published, so a piece # published long after it was written shows its own date; and that the editor reaches every page # of the site from any page. 0.5.3 says the editor shows whether each change is saved, and that # publishing from the editor shows what will change before the author confirms it, and builds # the code the live site was built from with the content as it stands. A new version is a new # file: every published version stays published (durability-urls). 0.5.2 says the editor edits # what the content store holds (0.5.1 # still spoke of content source files). 0.5.1 said which displayed names are not words: # identifiers the build derives from the form. 0.5.0 moved content out of the site repository into a # content store of its own: every word the site shows is content, every # value is a Content Markup document, every change is a new revision, and # each build reads an archived snapshot. 0.4.0 added the editor. 0.3.0 # removed /now/. 0.2.0 re-purposed the site as a personal home base; 0.1.x # organized it around verification, which the operator judged overwrought. # What the site's conformance suite witnesses is listed in section # conformance. adherence ref draft@4.3.0 level full adherence ref conformist@4.0.0 level full status draft title "sirrobert.net 0.5.4" date 2026-09-22 license "All Rights Reserved" --- spec sirrobert-net version 0.5.4 title "sirrobert.net" import source conformist@4.0.0 select * "target:requirement" * "target:rule" * "target:check-type" * "target:conformance-level" # ---------------------------------------------------------- # Purpose # ---------------------------------------------------------- section purpose title "Purpose" prose text | sirrobert.net is the author's personal home base. It has four jobs: to say what he is interested in; to hold his writing; to be the launching point to his other sites; and to tell his history. Where the author's work has a home of its own, this site links to it rather than repeating it. The site is written in one first-person voice throughout; family and faith are written in the same voice as the work. # ---------------------------------------------------------- # Definitions # ---------------------------------------------------------- section definitions title "Definitions" prose text | Page: a URL on the site and the content it presents. Article: a dated piece of writing published beneath /writing/. Other sites: the sites the author operates elsewhere — at this writing, byre.dev and scripture.living. The list is content, not specification; adding a site is not a revision. Content: every word the site shows, and the dates, links, and lists they come with — what the author says, as opposed to how it is shown. Form: everything that shows content — templates, styles, tokens, the build, the editor, and this site's tests. Content store: where content lives, apart from the site repository. Revision: one recorded value of one piece of content, with its author, its time, and the revision it replaces. Snapshot: every current value of the content at a named revision, as read for a build. Production artifact: the static directory the deploy command publishes, and everything served from it. Authoring deployment: a site, separate from production, where the author runs the editor from any machine. Authoring environment: the author's own machine, or an authoring deployment. Nothing else is one. Employment: work performed as an employee of an organization. Independent work: ventures, projects, and practice undertaken by the author on his own account. # ---------------------------------------------------------- # Pages # ---------------------------------------------------------- section pages title "Pages" prose text | The pages below make up the site at launch. Adding or removing a top-level page is a revision of this specification. Held for later and not yet specified: /work/, /verify/, /against/, /shape/, /wrong/, /journal/, /reading/, /personal/, /cv/. requirement pages-launch level MUST category structure validatable: static false runtime false manual true prose text | The first public release MUST include /, /writing/, /history/, /contact/, and /colophon/. A page that is not published MUST NOT be linked from navigation. requirement page-home level MUST category semantic validatable: static false runtime false manual true prose text | / MUST present the author's name with a line saying who he is, a summary of his interests, a link to each of his other sites with one line on why a visitor would go there, and navigation to every published page. requirement page-writing level MUST category semantic validatable: static false runtime false manual true prose text | /writing/ MUST list published articles newest first, each with its title and publication date, and MUST publish an Atom feed of them. Each article MUST have its own URL beneath /writing/ and MUST show its publication date, and its revision date once revised. requirement page-history level MUST category semantic validatable: static false runtime false manual true prose text | /history/ MUST present the author's history with dates. Employment and independent work MUST appear as distinct categories per separation-categories. requirement history-evidence level SHOULD category semantic validatable: static false runtime false manual true prose text | Each entry on /history/ SHOULD link to a primary artifact or a third-party record where one exists. requirement home-lately level MUST category semantic validatable: static false runtime false manual true prose text | / MUST show a Lately list of recent, dated items — the newest article among them — each with its kind and date, and MUST show the date the list was last updated. requirement lately-staleness level SHOULD category behavior validatable: static false runtime false manual true prose text | The build SHOULD warn when the newest item in the Lately list is more than ninety days old. requirement page-contact level MUST category semantic validatable: static false runtime false manual true prose text | /contact/ MUST give at least one way to reach the author. requirement page-colophon level MUST category semantic validatable: static false runtime false manual true prose text | /colophon/ MUST say how the site is built, MUST name each byre specification the site complies with together with the version complied against, and MUST link to the current version of this specification. A compliance claim without a named version is not a claim. # ---------------------------------------------------------- # Content # ---------------------------------------------------------- section content title "Content" prose text | Content and form are kept apart so either can be replaced without the other. This site is one way of showing the content; another could be built from the same content without changing it. requirement content-separate level MUST category structure validatable: static false runtime false manual true prose text | Content MUST live in a content store of its own. The site repository MUST NOT contain content, and the content store MUST NOT contain form. requirement content-every-word level MUST category semantic validatable: static false runtime false manual true prose text | Every word the site displays MUST come from content: titles, headings, summaries, notes, labels, navigation, and the names of months. Templates MUST contain no display text. Identifiers the build derives from the form — the names and versions of specifications, revision identifiers, host names, and design-token names — are not words for this purpose, and MUST be marked as identifiers where they are shown. requirement content-markup level MUST category structure validatable: static false runtime false manual true prose text | Every text value MUST be a content document conforming to Content Markup 0.1.1 — a phrase for a single run of text, a document for a body — stored in its canonical form. requirement content-append-only level MUST category behavior validatable: static false runtime false manual true prose text | Every change to content, including its removal, MUST be recorded as a new revision. No revision MAY be altered or deleted. A revision MUST record its value in full, its author, its time, and the revision it replaces; a removal is a revision that retracts. requirement content-presentation-free level MUST category semantic validatable: static false runtime false manual true prose text | Content MUST carry no presentation. Presentation keyed to content, such as a colour for each tag, belongs to the form. requirement content-snapshot level MUST category behavior validatable: static false runtime false manual true prose text | Each production build MUST read a snapshot of the content at a named revision and build only from it, and MUST archive that snapshot where it can be read without the content store: its canonical content documents and a rendering of them a person can read. requirement content-described level SHOULD category semantic validatable: static false runtime false manual true prose text | Each archived snapshot SHOULD describe its own structure, so that a different site could be built from it without reading this site's source. requirement content-revisions level MUST category semantic validatable: static false runtime false manual true prose text | /colophon/ MUST show the revision of the site repository and the revision of the content the production artifact was built from. # ---------------------------------------------------------- # Authoring # ---------------------------------------------------------- section authoring title "Authoring" prose text | The site grows by adding and changing content in the content store, through the editor or directly. The editor is the author's alone. It exists only in an authoring environment and leaves no trace in the production artifact: a visitor to the published site cannot reach it, find it, or tell that it exists. requirement authoring-add level MUST category structure validatable: static false runtime false manual true prose text | Publishing a new article MUST require only creating it in the content store and deploying. Changing any text the site displays MUST require only changing it and deploying. requirement editor-author-only level MUST category behavior validatable: static false runtime false manual true prose text | The editor MUST be available only in an authoring environment. An authoring environment MUST refuse every request to change content that does not come from the author: from any machine but his own, or, on an authoring deployment, from anyone the deployment has not authenticated as him. requirement editor-no-vestige level MUST category structure validatable: static false runtime false manual true prose text | The production artifact MUST contain no part of the editor: no editor code, styles, markup, attributes, routes, or references to any of them. Building the production artifact MUST NOT depend on whether the editor exists. requirement editor-in-place level MUST category behavior validatable: static false runtime false manual true prose text | In the editor, every value a page displays from the content store MUST be editable where it is displayed — dates as much as words. Lists of items MUST allow adding, removing, and reordering items. A new article MUST be creatable from the editor. requirement editor-source level MUST category behavior validatable: static false runtime false manual true prose text | Saving an edit MUST add one revision of exactly the value edited, naming the revision the edit began from. If that value has changed since, the save MUST be refused and both versions shown. The edited page MUST show the saved result without a manual rebuild, and MUST show, for each change, whether it is saved. requirement editor-bodies level MUST category behavior validatable: static false runtime false manual true prose text | Text MUST be edited as formatted text — emphasis, references, lists, quotations, and the rest shown as what they are — and saved as Content Markup. requirement editor-remote level SHOULD category behavior validatable: static false runtime false manual true prose text | The editor SHOULD be available from an authoring deployment, so the author can edit from any machine. requirement authoring-deployment level MUST category behavior validatable: static false runtime false manual true prose text | Where an authoring deployment exists, it MUST be served from a host other than the production site's, MUST admit no one it has not authenticated as the author, and MUST NOT be indexable. Content changed there MUST reach the content store as revisions attributed to the author; the production artifact MUST still be built only from the site repository and a content snapshot. requirement editor-navigation level SHOULD category behavior validatable: static false runtime false manual true prose text | From any page, the editor SHOULD reach every page of the site, by touch as readily as by pointer, even though a click on a link's words edits them. requirement editor-history level SHOULD category behavior validatable: static false runtime false manual true prose text | The editor SHOULD show the history of any value and the difference between any two of its revisions, and SHOULD restore a past revision by adding it as a new one. requirement editor-readiness level SHOULD category behavior validatable: static false runtime false manual true prose text | The editor SHOULD show what the readiness check still flags as unwritten. requirement editor-publish level MAY category behavior validatable: static false runtime false manual true prose text | The editor MAY publish. requirement editor-publish-gated level MUST category behavior validatable: static false runtime false manual true prose text | Where the editor publishes, it MUST do so only after the author has been shown what publishing will change and has confirmed it. Publishing MUST run the deploy command of tech-deploy with every check that command applies, building the code the live site was built from with the content as it stands. # ---------------------------------------------------------- # Separation of employment and independent work # ---------------------------------------------------------- section separation title "Separation of employment and independent work" prose text | Employment and independent work are different categories of fact. They are kept apart in structure and vocabulary, not by disclaimers. requirement separation-categories level MUST category structure validatable: static false runtime false manual true prose text | Wherever both appear, employment and independent work MUST be presented as distinct categories. They MUST NOT be interleaved in a single list, table, or timeline row. requirement separation-crossing level MUST category semantic validatable: static false runtime false manual true prose text | Descriptions of employment MUST NOT use byre's vocabulary — its proper names and coined terms. Descriptions of independent work MUST NOT name an employer. requirement separation-no-disclaimer level SHOULD category semantic validatable: static false runtime false manual true prose text | Pages SHOULD NOT carry statements about intellectual-property ownership or the circumstances under which work was developed. # ---------------------------------------------------------- # Personal boundaries # ---------------------------------------------------------- section personal-boundaries title "Personal boundaries" requirement personal-minors level MUST category semantic validatable: static false runtime false manual true prose text | Names, images, and identifying details of the author's minor children MUST NOT appear on any page. requirement personal-traits-behavioral level MUST category semantic validatable: static false runtime false manual true prose text | The author's personal traits MUST be described behaviorally. Diagnostic or categorical labels applied to the author MUST NOT appear. # ---------------------------------------------------------- # Durability and access # ---------------------------------------------------------- section durability title "Durability and access" prose text | The site is expected to last a decade without a rewrite, and to be readable by anyone who arrives. requirement durability-format level MUST category structure validatable: static false runtime false manual true prose text | Rendering the production site MUST NOT require the content store or any other service: the production artifact is complete in itself. Content MUST remain recoverable without the content store, from archived snapshots. requirement durability-urls level MUST category behavior validatable: static false runtime false manual true prose text | A published URL MUST keep working. Removed content MUST redirect permanently to its successor or return 410 Gone. requirement durability-revised level MUST category semantic validatable: static false runtime false manual true prose text | Every page MUST show the date it was last revised. An article is revised only by a change made after it was first published; until then, the date it was last revised is its own date, so a piece published long after it was written shows the date it was written. requirement durability-no-js level MUST category behavior validatable: static false runtime false manual true prose text | Every page MUST render its full content without JavaScript. JavaScript MAY enhance a page and MUST NOT be required to read it. requirement durability-own-origin level MUST category behavior validatable: static false runtime false manual true prose text | The site MUST NOT load any resource — fonts, scripts, styles, images, embeds — from another origin, and MUST NOT include analytics or tracking of any kind. requirement durability-accessible level MUST category behavior validatable: static false runtime false manual true prose text | Every page MUST conform to WCAG 2.2 Level AA. # ---------------------------------------------------------- # Machines # ---------------------------------------------------------- section machines title "Machines" prose text | The site is read by agents as well as people. requirement machine-person level SHOULD category semantic validatable: static false runtime false manual true prose text | / SHOULD include a schema.org Person block as JSON-LD. requirement machine-llms level SHOULD category semantic validatable: static false runtime false manual true prose text | /llms.txt SHOULD index every published page with a one-line description. # ---------------------------------------------------------- # Technical shape # ---------------------------------------------------------- section tech title "Technical shape" prose text | The site is built the byre way and says so on /colophon/. It is a realization of the byre specifications it names, and its compliance with them is a claim a visitor can check. These requirements constrain compliance, not construction. File layout, package selection, namespaces, and build tooling are implementation-private and deliberately unspecified here. requirement tech-static level MUST category structure validatable: static false runtime false manual true prose text | The deployable artifact MUST be a static directory produced from source by a single command, with every page fully rendered in it. Runtime composition MUST enhance already-rendered content and MUST NOT be a precondition for it. requirement tech-deploy level MUST category behavior validatable: static false runtime false manual true prose text | The site MUST be deployable by a single command that builds the artifact from the site repository and a content snapshot, publishes it, and makes the new version visible to visitors. Deployment MUST NOT require manual steps beyond running that command with the credentials it needs. requirement tech-dimensions level MUST category structure validatable: static false runtime false manual true prose text | Where the site or its editor provides one of the dimensions named here, that dimension MUST comply with the corresponding byre specification: harness composition with keel; lifecycle with vellum; state with signet; events with fugue; componentry with camber; capabilities and affordances with haft; surface structure with form; design tokens with brocade; content with Content Markup. A dimension neither provides is not thereby required to exist. requirement tech-tokens level MUST category structure validatable: static false runtime false manual true prose text | Visual presentation MUST be driven by brocade design tokens. Literal color, spacing, and typographic values MUST NOT appear outside token definitions and var() fallbacks. requirement tech-no-framework level MUST category structure validatable: static false runtime false manual true prose text | Source MUST NOT depend on a client-side application framework. # ---------------------------------------------------------- # Conformance # ---------------------------------------------------------- section conformance title "Conformance" prose text | The project follows the Foreman process (see process/). This specification is the authority for the site; a conflict between the site and this specification is fixed in one or the other, never left as silent divergence. Every requirement declares manual validation at the level of this document; the site's own conformance suite (conformance/) witnesses what can be checked mechanically. Statically, over the built site and its snapshot: pages-launch, page-home, page-writing, page-history, home-lately, page-contact, page-colophon, content-separate, content-every-word (a build from content with every value blanked shows no words), content-markup (every value passes Content Markup's own kit), content-revisions, authoring-add, separation-categories, separation-crossing (for listed terms), durability-format, durability-urls (internal references and the published-URL register), durability-revised, durability-no-js, durability-own-origin, machine-person, machine-llms, tech-static, tech-tokens, tech-no-framework, and editor-no-vestige. In a browser: the automatable part of durability-accessible, editor-author-only (refusal from elsewhere), authoring-deployment (refusal without authentication, not indexable), editor-in-place, editor-source (including the refused conflicting save), and editor-bodies. Against the store: content-append-only (no role may update or delete a revision). At deploy: content-snapshot and tech-deploy, by running them. tech-dimensions is witnessed by each named specification's own conformance apparatus. The rest stay manual.