Making Dev Notes Repeatable
-A repeatable author and post workflow keeps Dev Notes easy to extend as the research log grows.
- - - -diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 4553e686..a07137d9 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -11,8 +11,27 @@ permissions:
contents: read
jobs:
+ renderer-tests:
+ name: Test Dev Notes renderer (Python ${{ matrix.python-version }})
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ python-version: ["3.10", "3.12"]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v7
+
+ - name: Set up Python
+ uses: actions/setup-python@v6
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Run renderer tests
+ run: python -m unittest discover -s tests
+
validate:
name: Validate documentation
+ needs: renderer-tests
runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -28,9 +47,15 @@ jobs:
- name: Check Dev Notes renderer syntax
run: python -m py_compile scripts/render-dev-notes.py
+ - name: Check navigation JavaScript syntax
+ run: node --check docs/javascripts/navigation-drawer.js
+
- name: Build documentation
run: scripts/build-docs.sh
+ - name: Verify generated documentation is committed
+ run: git diff --exit-code -- docs/dev-notes zensical.toml
+
deploy:
name: Deploy documentation
if: >-
diff --git a/AGENTS.md b/AGENTS.md
index 25ab4d70..6009786f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -46,8 +46,10 @@ explicit `url` or `avatar` fields when needed.
Each Dev Note post needs `title`, `date`, `description`, and at least one
author. The landing card uses `description` as its summary, `categories[0]` as
the topic after `Dev Note`, and `card_tags` when present; otherwise it falls
-back to `tags`. `card_variant` is optional and maps to a CSS modifier such as
-`.dev-note-card--launch`.
+back to `tags`. Dates must use the exact `YYYY-MM-DD` form. `card_variant` is
+optional and maps to both the card and artwork CSS modifiers, such as
+`.dev-note-card--launch` and `.dev-note-card__visual--launch`; add the
+corresponding styles when introducing a new visual variant.
Posts are sorted newest first by ISO `date`, then title. Use dated filenames
such as `YYYY-MM-DD-short-title.md` so file paths stay stable and readable, but
diff --git a/README.md b/README.md
index d30c3344..975d3800 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,8 @@ OpenShell as the runtime.
- `docs/dev-notes/` contains research engineering updates, release notes, and
build logs worth sharing.
- `docs/dev-notes/authors.json` contains reusable Dev Notes author metadata.
+- `docs/documentation/` contains durable guides and references for packages,
+ libraries, benchmarks, and examples introduced in Dev Notes.
- `projects/` contains self-contained research projects and a reusable Python
project template.
- `scripts/render-dev-notes.py` renders Dev Notes cards, post bylines, and
@@ -31,6 +33,7 @@ To preview the documentation locally:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-docs.txt
+python scripts/render-dev-notes.py
zensical serve
```
@@ -55,14 +58,22 @@ after validation passes.
Add new posts under `docs/dev-notes/posts/` with a dated filename such as
`YYYY-MM-DD-short-title.md`. Set `authors` to IDs from
`docs/dev-notes/authors.json`; add new authors there once, including their
-GitHub handle and description. Run `python scripts/render-dev-notes.py` after
-editing posts or authors so the landing-page cards, visible post bylines, and
-Dev Notes navigation stay in sync.
+GitHub handle and description. Dates must use the exact `YYYY-MM-DD` form.
+`card_tags` controls the landing-page taxonomy (falling back to `tags`), and an
+optional `card_variant` selects a matching visual modifier such as `launch`.
+Run `python scripts/render-dev-notes.py` after editing posts or authors so the
+landing-page cards, visible post bylines, and Dev Notes navigation stay in
+sync; CI verifies that generated changes are committed.
+
+### Documentation
+
+Add durable software documentation under `docs/documentation/` when a Dev Note
+introduces a package, library, benchmark, or reusable example. Link the
+documentation back to its originating Dev Note and cover installation, usage,
+reproducibility requirements, and known limitations. Add the new page beneath
+the `Documentation` entry in `zensical.toml`.
## Content model
-Use the documentation for durable project knowledge: architecture notes,
-application guides, runtime integration details, and reproducible research
-engineering workflows. Use Dev Notes for dated updates: experiments, milestones,
-benchmarks, release notes, and lessons learned while turning research into OpenShell
-applications.
+Use Documentation for durable software knowledge. Use Dev Notes for dated
+experiments, benchmarks, releases, use case examples, and engineering updates.
diff --git a/docs/dev-notes/index.md b/docs/dev-notes/index.md
index 9f8f608a..138d67d3 100644
--- a/docs/dev-notes/index.md
+++ b/docs/dev-notes/index.md
@@ -1,57 +1,108 @@
---
title: Dev Notes
-description: Dated engineering notes, experiments, milestones, and lessons from building OpenShell research applications.
+description: Research field notes, experiments, milestones, and lessons from building OpenShell research applications.
hide:
- toc
---
-# Dev Notes
-
- Research-to-runtime field notes
- Dev Notes are the dated engineering record for OpenShell Research: build
- logs, experiment results, runtime discoveries, release notes, and the
- useful mistakes that should not have to be rediscovered.
-
- OpenShell Research
-
- What changed,
- what worked,
- and what we learned.
-
-
+ Technical notes from the OpenShell team – reproducible research, + benchmarks, and use case examples. +
+A repeatable author and post workflow keeps Dev Notes easy to extend as the research log grows.
- -
-
- dev-notes / authors / workflow
-
- Initial setup for OpenShell Research documentation and Dev Notes.
- -
-
-
- openshell / docs / ci
-
- A repeatable author and post workflow keeps Dev Notes easy to extend as the research log grows.
+
+ Kirit Thadaka
+
+ Read note
+ Authors
-+ Field note + + Runtime +
+
diff --git a/docs/dev-notes/posts/2026-06-05-making-dev-notes-repeatable.md b/docs/dev-notes/posts/2026-06-05-making-dev-notes-repeatable.md
index 1db04693..7dfb71de 100644
--- a/docs/dev-notes/posts/2026-06-05-making-dev-notes-repeatable.md
+++ b/docs/dev-notes/posts/2026-06-05-making-dev-notes-repeatable.md
@@ -4,7 +4,7 @@ date: 2026-06-05
updated: 2026-06-05
description: A repeatable author and post workflow keeps Dev Notes easy to extend as the research log grows.
categories:
- - Documentation
+ - Process
tags:
- dev-notes
- authors
@@ -21,9 +21,13 @@ card_tags:
-Author
-+ Field note + + Process +
+
diff --git a/docs/documentation/index.md b/docs/documentation/index.md
new file mode 100644
index 00000000..400e3484
--- /dev/null
+++ b/docs/documentation/index.md
@@ -0,0 +1,12 @@
+---
+title: Documentation
+description: Guides and reference material for software introduced in OpenShell Dev Notes.
+---
+
+# Documentation
+
+Guides and reference material for packages, libraries, benchmarks, and examples
+introduced in OpenShell Dev Notes will be published here.
+
+Each documentation page will link to the Dev Note that introduced the work and
+cover installation, usage, reproducibility requirements, and known limitations.
diff --git a/docs/index.md b/docs/index.md
index 62f67664..f7a8dfa9 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,30 +1,32 @@
-# OpenShell Research
+---
+title: OpenShell Research
+description: Dev Notes and software documentation from the OpenShell team.
+hide:
+ - toc
+---
-Research engineering documentation
-- OpenShell Research turns new research into usable applications that run on - the OpenShell runtime. This site collects the engineering record: what we - are building, how the runtime is used, and what we learn from each - experiment. -
-{html.escape(description)}
- + names = natural_join([author["name"] for author in authors]) + return f""" {author_images} - - {html.escape(' / '.join(tags))} - -{html.escape(description)}
{tags_html} +No Dev Notes yet.
' + body = 'The first field note is being prepared.
' else: - body = "\n".join(render_card(post) for post in posts) + featured = render_featured_card(posts[0]) + recent_posts = posts[1:] + recent = "\n".join(render_recent_card(post) for post in recent_posts) + recent_section = "" + if recent: + recent_section = f""" +{label}
-+ Field note + + {html.escape(category)} +
+