Cloudflare Worker that converts Workshop.code wiki JSON into stable, agent-friendly Markdown for API consumers.
This service provides Markdown-first wiki access with predictable routes and content negotiation.
GET / (Markdown onboarding guide)GET /healthzGET /manifest.json (machine-readable document manifest)GET /wiki/articles.mdGET /wiki/articles/:slug.mdGET /wiki/articles/:slug with Accept: text/markdown# Root onboarding guide
curl https://md.owbastion.codes/
# Machine-readable document manifest (JSON, metadata only)
curl https://md.owbastion.codes/manifest.json
# Article index as markdown
curl https://md.owbastion.codes/wiki/articles.md
# Explicit markdown route
curl https://md.owbastion.codes/wiki/articles/hero-color-reference-table.md
# Content negotiation route
curl https://md.owbastion.codes/wiki/articles/hero-color-reference-table \
-H 'Accept: text/markdown'
text/markdown; charset=utf-8) on markdown routes and markdown-negotiated article routes./wiki/articles/:slug.json; only on 404 they fall back to /wiki/articles.json. Index rendering remains list-only.content_hash (SHA-256 of the rendered document) for provenance and change detection.GET /manifest.json returns a compact, metadata-only document list (schema version, deterministic slug ordering, markdown/source URLs, conservative aliases). It never includes article bodies or content hashes; exact hashes come from the article route.<style> and <script> tags are removed.ETag values are content-derived: articles use the SHA-256 hash of the rendered document, so unchanged content keeps a stable ETag regardless of Worker version.If-None-Match (or If-Modified-Since where Last-Modified applies) returns 304 Not Modified with an empty body.ctx.waitUntil(), and hit/miss is observable via the x-cache-status response header (HIT/MISS). The manifest shares the same generated-content cache (JSON variant).UPSTREAM_CACHE_TTL_SECONDS (default 60s), 404 for 60s, and 5xx never. x-upstream-cache (HIT/MISS) reports upstream cache state at generation time.no-store and never cached.docs/ADR-002-caching-strategy.md for the full strategy.The service exposes a small, stable machine surface for coding agents. The full contract — schema, slug rules, revision/hash semantics, caching and conditional-request behavior, error handling, and compatibility guarantees — is defined in docs/MACHINE-CONSUMER-CONTRACT.md. The backend is model/harness-neutral: it performs no search, ranking, or embeddings; consumers implement retrieval locally against the manifest.
Minimal flow:
# 1. Discover documents via the manifest (metadata only, no article bodies)
curl -s https://md.owbastion.codes/manifest.json | jq '.documents[0]'
# 2. Fetch an exact document using its markdownUrl
curl -s https://md.owbastion.codes/wiki/articles/hero-color-reference-table.md
# 3. Cache safely: the ETag is the content hash, so refetch conditionally
curl -s -D - -o /dev/null -H 'If-None-Match: "<etag from step 2>"' \
https://md.owbastion.codes/wiki/articles/hero-color-reference-table.md
# → 304 Not Modified while the document is unchanged
For local development and runtime configuration, use the repository scripts and wrangler.jsonc as the source of truth. This README is intentionally user-focused and omits internal deployment and CI details.
AGPL-3.0-only (see LICENSE).