This directory contains the source for https://roborev.io. The site has three tiers assembled by one build:
| Tier | Source | Published at |
|---|---|---|
| Product page | website/index.html, website/index.md |
/, /index.md |
| Guide | website/guide/index.html, website/guide.md |
/guide/, /guide.md |
| Docs | Zensical pages listed in zensical.toml |
/docs/..., /docs/....md |
llms.txt indexes all three tiers for machine readers. The docs source lives
on main; image media lives on orphan asset branches so normal clones do not
pull large screenshots and PNGs into the main history.
*.md,guides/,advanced/,integrations/,agents/: public docs source, rendered under/docs/.website/: the hand-written product page, guide, 404 page, styles, script, and self-hosted fonts (OFL licenses alongside). Copied verbatim to the site root. Every local reference must be root-relative (/docs/...,/styles/...); media comes from the hydrated/docs/assets/...tree, never from tracked files.llms.txt: the machine-readable site index.zensical.toml: Zensical site configuration and navigation.pyproject.tomlanduv.lock: pinned docs toolchain.vercel.jsonandvercel-build.sh: Vercel project configuration.assets/hydrate-assets.sh: hydrates ignored local assets from orphan branches.assets/update-static-assets-branch.sh: updates curated static assets.screenshots/: Docker/tmux/freeze screenshot generator and generated asset branch updater.scripts/format_markdown.py: syntax-aware formatting for published pages.scripts/check_built_site.py,scripts/check_public_markdown_sources.py, andscripts/check_vercel_redirects.py: post-build validation.check_vercel_redirects.py --writeregeneratesvercel.jsonfrom the nav after a docs page is added, moved, or removed.
docs/assets/static/, docs/assets/generated/, docs/site/, and docs/.venv/
are ignored local outputs.
docs-assets: curated static media, including logos, favicons, Open Graph images, diagrams, agent icons, and manually captured integration images.docs-generated-assets: generated browser UI, CLI, and TUI screenshots.
Docs pages and the website tier should reference media through:
/docs/assets/static/...for curated assets./docs/assets/generated/...for generated screenshots.
The root favicon.svg is copied from the hydrated static assets at build time.
Do not commit image media to main.
Install the docs toolchain:
make docs-installHydrate assets and build:
make docs-buildPreview the docs tier at http://localhost:8000/docs/:
make docs-serveZensical serves only the docs tier, mounted at /docs/ as in production. The
product page and guide are static files it does not serve. Both targets below
render a staged copy of the docs tree, so restart them to pick up edits. To
preview the whole site with production routing, build it and serve the
assembled site/ directory:
make docs-preview # http://127.0.0.1:8000/
make docs-preview DOCS_PREVIEW_PORT=8765 # another portRun all docs validation:
make docs-checkFormat all Markdown pages listed by zensical.toml:
make markdownThe formatter wraps prose at 80 columns and leaves Markdown tables unchanged.
Use make markdown-ci for the non-mutating check run by prek and CI.
make docs-check hydrates assets, runs a strict Zensical build, checks generated
links/assets/metadata, verifies public Markdown source files, and validates
vercel.json redirects.
Asset hydration force-fetches origin/docs-assets and
origin/docs-generated-assets by default so force-pushed orphan branches do not
silently leave stale local media in place. Set
ROBOREV_DOCS_USE_LOCAL_ASSET_BRANCHES=1 only when you intentionally want to
hydrate from local asset branch refs instead of origin.
Regenerate generated CLI/TUI screenshots and update the local
docs-generated-assets orphan branch:
make docs-generated-assets-branchPush that branch when the generated screenshots should be published:
bash docs/screenshots/update-generated-assets-branch.sh --pushThe script writes screenshots to ignored docs/assets/generated/, validates the
expected SVGs, creates a temporary git repository with a single commit, then
fetches that commit into docs-generated-assets. It does not switch branches.
Screenshot data is derived from the maintainer's local roborev database, selected
only from committed review jobs for repos whose identity or origin remote
matches the canonical public kenn-io/roborev, kenn-io/kata,
kenn-io/msgvault, and kenn-io/agentsview repositories. The demo DB keeps
public repo/job metadata such as repo names, refs, branches, statuses, timings,
verdict mix, token usage, prompts, diffs, and review output so screenshots stay
representative of real open-source review data. The copy omits responses and
sanitizes local paths, local usernames, email addresses, and credential-shaped
tokens before Docker renders screenshots. The generated demo database is written
to $TMPDIR/roborev-demo-data.
For the initial import or a manual refresh from an existing directory:
bash docs/screenshots/update-generated-assets-branch.sh --source /path/to/assets --pushHydrate or stage curated media under ignored docs/assets/static/, then update
the local docs-assets orphan branch:
make docs-assets-branchPush it only when curated static assets should be published:
bash docs/assets/update-static-assets-branch.sh --pushThis branch is separate from docs-generated-assets so normal screenshot
regeneration cannot accidentally overwrite curated media.
Use the plain-language rules in AGENTS.md.
- Compare the new release tag with the previous release tag. Check release notes against shipped changes; do not describe proposals as available.
- Move shipped
Unreleasedentries into a dated version section inchangelog.md. Group entries into new features, improvements, and bug fixes. Lead with what users can do or what problem changed, and link to the owning guide for instructions. - Update those guides in place. Put upgrade actions in the installation guide and link to the detailed configuration or migration instructions. Keep historical release entries as history.
- Add acknowledgements based on authors and human co-authors in the release range and merged pull requests. Verify public names and profile links, and describe each contributor's work. Do not infer credit from commit counts or private review activity.
- Run
make markdown,make markdown-ci, andmake docs-check. Review the diff for stale instructions, broken links, and claims that need qualification.
Documentation checks build locally. Publishing docs and editing GitHub release notes are separate actions; use the publishing workflow only when requested.
The Vercel project should be linked from the repository root with docs/ as the
Vercel root directory:
| Setting | Value |
|---|---|
| Framework preset | Other |
| Root directory | docs |
| Install command | uv sync --frozen --no-dev |
| Build command | uv run --frozen bash ./vercel-build.sh |
| Output directory | site |
The build wrapper renders the Zensical docs into site/docs/, copies
index.md and every nav-listed Markdown document alongside its rendered page
(for example, /docs/changelog.md serves the Markdown source that generated
/docs/changelog/, and section indexes such as agents/index.md also publish a
flattened /docs/agents.md twin), then copies the website tier and llms.txt
to the site root. Every rendered docs page advertises its twin with
<link rel="alternate" type="text/markdown">.
Docs used to be served from the site root. vercel.json carries a permanent
redirect for every old page, its Markdown twin, and the /assets/... media
paths, so external links and older binaries keep resolving.
Link the checkout once from the repository root:
vercel linkWhen prompted, choose the roborev docs Vercel project. The generated .vercel/
directory is local-only and ignored.
Deploy committed docs changes with:
scripts/update-docs.shThat helper requires a clean tracked tree, installs the docs toolchain,
regenerates and pushes docs-generated-assets, clears and rehydrates local
assets, builds, checks, and then runs:
make docs-deployCreate a Vercel preview/staging deployment before production with:
make docs-deploy-stagingUse make docs-deploy directly only when the asset branches and local build
state are already correct.