Open Publication Protocol v0.3.1
Open Publication Protocol v0.3.1
Status
Draft
Overview
Open Publication Protocol v0.3.1 defines a minimal interoperable publication
surface for versioned published documents hosted on a public publication site such as
pubs.ilowe.me.
The primary goal of this protocol is to let software agents discover, resolve, and retrieve published documents reliably. In practice, this means a host exposes a stable public surface that an agent can crawl from the root listing, identify a document family by URN, and retrieve an exact immutable published version.
This protocol is intended to support Spec Driven Development (SDD) workflows. In an SDD workflow, specifications are treated as a primary source of truth and agents consume them as executable or near-executable constraints rather than as informal background reading.
This version specifies:
- the minimum source-of-truth requirements for a publication host
- the required public URL layout for human-readable published versions
- the required latest alias behavior for published document families
- the required listing and manifest information a host must expose
- the minimum HTTP semantics clients may rely on
This version does not specify:
- how documents are authored internally before publication
- how a host stores unpublished drafts
- how a host constructs bundles internally
- how clients cache, mirror, or verify published content
- cryptographic signing or integrity metadata
Motivation
Agentic systems need more than human-friendly documentation. They need discoverable, stable, machine-addressable publication surfaces with predictable versioning behavior.
Without that publication layer, an agent can read the wrong revision, fail to locate the canonical copy of a document, or rely on a moving alias where a pinned version is required.
This protocol therefore focuses on a narrow goal: make published documents easy for agents to discover from a single host root and safe to retrieve using stable canonical URLs and stable publication URNs.
Relationship to Open Publication URNs
This specification depends on Open Publication URNs for the definition of:
- family URNs
- version URNs
- the meaning of
namespace,name, andversion
This specification defines how a publication host exposes those identifiers over
HTTP. It does not redefine the urn:pub: identifier model.
Namespace authority and claim lifecycle are defined separately by Open Publication Namespace Claims.
Terminology
The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in BCP 14 when, and only when, they appear in all capitals.
Concepts
Published Document
A published document is a human-readable artifact exposed by a publication host.
Examples include:
- specifications
- design notes
- protocol drafts
- ADRs
This protocol uses "document" as the generic publication unit. A host MAY
classify documents further using metadata such as kind.
Publication Host
A publication host is the public HTTP origin that serves published documents, family indexes, listings, and related artifacts.
Examples include:
pubs.ilowe.mepub.example.com
Source-of-Truth Repository
A publication host is backed by a single Git repository that acts as the source of truth for all published documents on that host.
This protocol does not require a specific forge or branching model.
Source of Truth
For a given host H, there MUST be exactly one authoritative source-of-truth
Git repository R.
R is authoritative for:
- the set of published family URNs
- the set of published version URNs for each family
- the mapping from family URN to
namespaceandname - the human-readable content for each published version
- the listing and manifest metadata exposed by the host
Published content served from H MUST be derived from R.
This protocol does not require a specific publication workflow, but it does require that publication outputs be reproducible from repository state chosen by the host operator.
Publication Model
Given a host H, a namespace NS, a document family name N, and a version
V, the host publishes a document version through a set of related resources.
For each published family, the host MUST expose:
- one latest human-readable alias
- one family index
For each published version, the host MUST expose:
- one canonical human-readable version URL
For the host as a whole, the host MUST expose:
- one root listing
This version does not require a distinct machine-only version URL because the version URN already provides the canonical machine identifier.
Required URL Layout
Root Listing
The host root MUST provide a listing of published document families:
https://H/
The listing MUST include enough information for a client or human to discover:
- the family URN
- one or more version URNs for each family
- the namespace
- the name
- one or more published versions
- the latest human-readable URL for each family
- the canonical human-readable URL for each published version
- the family index URL
The root listing is the primary discovery entrypoint for agents.
Latest Human-Readable Alias
Each published family MUST expose a latest human-readable alias:
https://H/NS/N/
Example:
https://pubs.ilowe.me/ilowe/spec-publication-protocol/
This resource is a moving alias for the latest published version of the family.
Canonical Human-Readable Version URL
Each published version MUST have a canonical human-readable URL:
https://H/NS/N/V/
Example:
https://pubs.ilowe.me/ilowe/spec-publication-protocol/0.3.0/
This resource is intended for human readers and agent retrieval.
Family Index URL
Each published family MUST expose a family index:
https://H/NS/N/versions/
Example:
https://pubs.ilowe.me/ilowe/spec-publication-protocol/versions/
The family index lists the published versions known for that family.
Canonicality Rules
https://H/NS/N/is the canonical latest alias for a family.https://H/NS/N/V/is the canonical human-readable URL for that published version.https://H/NS/N/versions/is the canonical family index URL.- A published version MUST NOT change in place once published.
- If a document changes materially, it MUST be published under a new version and therefore under a new version URN.
https://H/NS/N/is a moving alias and MUST NOT replace the canonical role ofhttps://H/NS/N/V/.
Latest Resolution
For each published family, the host MUST determine one latest published version.
If all versions in the family follow semantic versioning, the host SHOULD determine latest by semantic version precedence.
If the family uses a different version style, the host MUST use one deterministic rule and MUST apply that rule consistently across:
- the latest human-readable alias
- the root listing
- the family index
- any machine-readable manifest produced by the host
The latest alias at https://H/NS/N/ MUST resolve to the same published
version advertised as latest elsewhere on the host.
HTTP Semantics
This protocol defines minimum observable HTTP behavior for interoperable hosts.
Success
- The root listing, latest alias, canonical version URL, and family index URL
MUST return a
2xxresponse when the referenced resource exists. - The latest alias MUST either return
200 OKwith the latest version content or redirect with3xxto the canonical human-readable version URL.
Redirects
- A host MAY redirect
https://H/NS/N/tohttps://H/NS/N/V/. - If a host redirects the latest alias, the redirect target MUST be the canonical human-readable URL for the latest published version.
- A host SHOULD NOT redirect canonical version URLs to different canonical version URLs.
Missing Resources
- If a referenced family or version does not exist, the host MUST return
404 Not Foundor an equivalent permanent absence response. - A host MUST NOT silently substitute a different family or version when a canonical version URL does not exist.
Content Types
- Human-readable pages SHOULD be served as
text/html. - A machine-readable manifest, if exposed, SHOULD be served as
application/json.
Listing Requirements
The root listing MAY be rendered in any human-readable or machine-readable form, but it MUST preserve the same semantic information.
At minimum, each listed published version MUST expose:
family_urnversion_urnnamespacenameversionlatest_urlhuman_urlfamily_index_url
Additional metadata MAY be included, such as:
kindtitlesummarypublished_atsource_repo
If a host exposes both a human-oriented listing page and a machine-readable manifest, the two representations MUST agree on canonical URLs and URNs for the same published versions.
Machine-Readable Manifest
A host MAY expose a machine-readable manifest in addition to the root listing.
If a machine-readable manifest is exposed, it SHOULD be stable at a well-known path such as:
https://H/index.json
At minimum, each manifest record MUST expose the same fields required by the listing requirements section.
This version does not require a particular manifest schema beyond the minimum record fields defined above.
Optional Artifact Metadata
This protocol treats published content generically as documents. A host MAY add document metadata to help agents choose the right artifact.
Useful optional metadata includes:
kindtitlesummarypublished_atsupersedestags
Examples of kind values include:
specnoteadrpdd
Host Invariants
A conforming host MUST satisfy all of the following invariants:
- one family URN maps to exactly one
(namespace, name)pair - one version URN maps to exactly one
(namespace, name, version)triple - one published version appears at exactly one canonical version URL
- the latest alias for a family resolves to a published version of that same family
- listing metadata MUST NOT advertise URLs that the host does not serve
- listing metadata MUST NOT advertise URNs that the host does not publish
Relationship to Spec Driven Development
This protocol does not define Spec Driven Development itself. Instead, it defines one publication substrate that makes SDD artifacts portable across agents, hosts, and repositories.
In an SDD workflow, an agent typically needs to answer questions such as:
- what published document families exist on this host
- what stable URN identifies the family I need
- what published versions exist for that family
- what is the latest published version
- how do I retrieve a pinned version instead of a moving alias
This protocol standardizes those lookup steps so agents do not need host-local scraping rules or out-of-band knowledge.
References
The rationale for this protocol aligns with recent writing on Spec Driven Development and agent-oriented specification workflows:
- Deepak Babu Piskala, Spec-Driven Development: From Code to Contract in the Age of AI Coding Assistants, arXiv, January 30, 2026
- Leigh Griffin and Ray Carroll, Spec Driven Development: When Architecture Becomes Executable, InfoQ, January 12, 2026
- Hari Krishnan, Spec-Driven Development - Adoption at Enterprise Scale, InfoQ, February 19, 2026
- IntentSpec: Functional Guardrails for AI Coding Agents
These references are informative, not normative.
Example
For host pubs.ilowe.me, namespace ilowe, family name
spec-publication-protocol, and version 0.3.0:
- family URN:
urn:pub:ilowe:spec-publication-protocol - version URN:
urn:pub:ilowe:spec-publication-protocol:0.3.0 - latest human-readable URL:
https://pubs.ilowe.me/ilowe/spec-publication-protocol/ - canonical human-readable URL:
https://pubs.ilowe.me/ilowe/spec-publication-protocol/0.3.0/ - family index URL:
https://pubs.ilowe.me/ilowe/spec-publication-protocol/versions/
Example Listing Record
{
"family_urn": "urn:pub:ilowe:spec-publication-protocol",
"version_urn": "urn:pub:ilowe:spec-publication-protocol:0.3.0",
"namespace": "ilowe",
"name": "spec-publication-protocol",
"version": "0.3.0",
"kind": "spec",
"latest_url": "https://pubs.ilowe.me/ilowe/spec-publication-protocol/",
"human_url": "https://pubs.ilowe.me/ilowe/spec-publication-protocol/0.3.0/",
"family_index_url": "https://pubs.ilowe.me/ilowe/spec-publication-protocol/versions/"
}
Open Questions
- Should a future version require a canonical machine-readable manifest path instead of leaving it optional?
- Should a future version standardize additional metadata such as
supersedesorkindvalues? - Should a future version require hosts to expose version ordering metadata for mixed semver and date-style families?