Skip to content

docs: README rework + small docs-site polish#36

Merged
chris-colinsky merged 5 commits into
mainfrom
chore/readme-and-docs-polish
May 13, 2026
Merged

docs: README rework + small docs-site polish#36
chris-colinsky merged 5 commits into
mainfrom
chore/readme-and-docs-polish

Conversation

@chris-colinsky
Copy link
Copy Markdown
Member

@chris-colinsky chris-colinsky commented May 13, 2026

Summary

Two scopes bundled in one PR — both came out of review after the freshly-shipped Phase A docs site.

README rework

Replaces the minimal install-and-quick-example README with a pydantic-ai-style landing README. Drafted on the `discuss-readme-rework` coord thread; spec-side sign-off on file 03 of that thread.

New structure:

  • Header with five badges (CI, PyPI, spec version [purple], python required [reads requires-python from pyproject.toml], License). Both the spec and python badges use Shields.io's dynamic-TOML endpoint, so they auto-update whenever a PR bumps the pin — no manual README edits needed per release.
  • Hero tagline as a left-aligned h3 plus a documentation pointer to `openarmature.ai`.
  • Install (core + `[otel]` extras, `uv add` + `pip install`).
  • Why OpenArmature — nine bullets in framework-author voice (frozen state, schema-validated merges, per-field reducer policy, subgraph projection seams, compile-time topology checks across six error categories, content-agnostic engine, determinism contract, synchronous checkpoints, TracerProvider isolation). Each bullet has a bolded headline on its own line above the body.
  • Hello World — three-node classification pipeline that shows three reducer policies on one state class, conditional routing as a pure state function, and an observer attached at compile time. No LLM setup required.
  • Next steps — Quickstart / Concepts / Model Providers / API reference / Examples / Spec links.

Departures from spec's file 01 draft that landed:

  • Apex URLs throughout (`docs.openarmature.ai` subdomain doesn't resolve; Phase A shipped apex-only).
  • Provider authoring path is `/model-providers/authoring/` (post-launch restructure).
  • Compile-error bullet body lists six categories (was five with a "six" framing — caught in python's review).
  • Dropped the `CONTRIBUTING.md` link (file doesn't exist).
  • Status line removed entirely; the spec-version badge carries that info instead. Pre-1.0 framing is implicit in the PyPI version (inngest-py reference shape).
  • Em dashes scrubbed throughout the copy.

Docs-site polish

Three small site improvements landing alongside:

  • Header GitHub repo widget removed. Stripped `repo_url` / `repo_name` / `edit_uri` from `mkdocs.yml`; Material's search box slides into that right-edge slot automatically. Dead CSS rules in `extra.css` cleaned up at the same time.
  • Footer GitHub icon retargeted to the `LunarCommand` org root rather than the python repo.
  • Mobile footer stacking fixed. Forced `flex-direction: row` + `flex-wrap: nowrap` on `.md-footer-meta__inner` so the copyright text and social icons stay on one line at all viewport widths. Copyright shortened to `©OpenArmature 2026` so it fits beside the icon on mobile.

Test plan

  • `uv run mkdocs build --strict` — clean.
  • Spec badge resolves to `spec: 0.10.0` via Shields.io (verified).
  • Python badge resolves to `python: >=3.12` via Shields.io (verified).
  • Mobile preview in Chrome DevTools — footer renders on one line, no stacking.
  • Em dashes scrubbed — `grep -c "—" README.md` returns 0.
  • CI `Docs` workflow on this PR builds the site with `mkdocs build --strict`.
  • After merge, the deployed site reflects the header + footer changes; the new README renders correctly on GitHub.

Followup tracked separately

Add `classifiers = ["Programming Language :: Python :: 3.12"]` to `pyproject.toml` so the PyPI listing itself shows Python compatibility (helpful for PyPI search). Effective after the next release. Small chore PR; not in scope here.

Three small docs-site changes to land alongside the README rework:

- Remove repo_url / repo_name / edit_uri from mkdocs.yml so the
  header's GitHub repo widget no longer renders. Material's search
  box slides into that right-edge slot automatically. Dead CSS
  rules in extra.css (source-widget animation disable + light-theme
  source color) are dropped at the same time.
- Footer GitHub icon links to the LunarCommand org root rather than
  the openarmature-python repo specifically — the org is the right
  landing for someone exploring the project from the docs footer.
- Force flex-row layout on the footer meta inner so the copyright
  text and social icons stay on one line at all viewport widths
  (Material's default stacks them at narrow widths). Copyright
  text shortened to "©OpenArmature 2026" to make sure it fits the
  same line as the icon on mobile.
Replace the minimal install/quick-example shape with a landing
README modeled on pydantic-ai's structure. New sections, in order:

- Header with badges (CI, PyPI, spec version, Python versions,
  license) — the spec badge reads tool.openarmature.spec_version
  from pyproject.toml on main via Shields.io's dynamic TOML
  endpoint, so the badge auto-updates when the spec pin moves.
- Documentation pointer to openarmature.ai.
- Hero copy: workflow framework framing; the graph engine is
  content-agnostic so the same primitives drive ETL and agents.
- Install: uv add + pip install, core + [otel] extras.
- Why OpenArmature: nine bullets in framework-author voice
  covering frozen state, schema-validated merges, per-field
  reducer policy, subgraph projection seams, compile-time
  topology (six categories), content-agnostic engine,
  determinism contract, synchronous checkpoints, TracerProvider
  isolation.
- Hello World: three-node classification pipeline showing three
  reducer policies on one state class, conditional routing as a
  pure state function, and an observer (no LLM setup needed).
- Next steps: Quickstart / Concepts / Model Providers / API
  reference / Examples / Spec links to openarmature.ai pages.

Drafted on the discuss-readme-rework coord thread; spec-side
sign-off on file 03 of that thread.
Six changes after the first pass:

- Title capitalized: "openarmature" → "OpenArmature".
- PyPI badge explicit blue color.
- Python versions badge swapped from pypi/pyversions (which read
  empty because pyproject.toml has no Python classifiers, so it
  rendered "missing") to python/required-version-toml, which
  reads requires-python directly. Renders "python: >=3.12".
  A separate followup will add the classifiers list to
  pyproject.toml so the PyPI listing itself shows Python compat.
- Hero tagline pulled into a centered h3 above the paragraph so
  it reads as the headline of the page.
- "Why" bullets reformatted: bold header on its own line via
  <br>, body underneath, instead of inline header-then-body.
- Hello World preamble rewritten with more energy: leads with
  "Forty lines that show the engine in action" and ends with
  "Copy it, run it, watch the events fire."
- All em dashes scrubbed from the copy (eleven total) and
  replaced with commas, colons, or sentence splits. Next steps
  switched to "Label: body. [link]" format with colon + period.
Copilot AI review requested due to automatic review settings May 13, 2026 02:02
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the project’s public-facing documentation and MkDocs site polish after the Phase A docs launch, including a full README restructure and small theme/footer tweaks in the docs site configuration.

Changes:

  • Reworks README.md into a “landing page” style README with badges, rationale bullets, and a more representative “Hello World” example.
  • Removes the MkDocs header repo widget and retargets the footer GitHub icon to the LunarCommand org.
  • Adjusts docs CSS to keep the footer meta row on a single line on mobile and removes now-dead CSS for the removed header widget.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
README.md New landing-style README content, including a more advanced example and updated links/badges.
mkdocs.yml Removes repo widget config; updates copyright text and footer GitHub link target.
docs/stylesheets/extra.css Footer meta layout adjustments for mobile; removes CSS tied to the removed repo widget.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread README.md Outdated
CoPilot review on PR #36 caught the snippet running invoke() inside
asyncio.run() without awaiting drain(). The CompiledGraph.drain
docstring says drain is the MUST for short-lived scripts because
invoke() returns before the observer delivery queue finishes — the
observer's print lines could fail to fire before the process exits,
defeating the example's whole purpose.

The repo's own observer demo (examples/04-observer-hooks/main.py)
already uses the right pattern: async def main() that awaits
invoke() and then awaits drain() in a try/finally, then
asyncio.run(main()). Match that here. Also drops the unused
``final =`` assignment.

Bumps the preamble line count from "forty lines" to "about fifty
lines" to match what the snippet actually is.
@chris-colinsky chris-colinsky merged commit 76690f6 into main May 13, 2026
6 checks passed
@chris-colinsky chris-colinsky deleted the chore/readme-and-docs-polish branch May 13, 2026 02:11
chris-colinsky added a commit that referenced this pull request May 13, 2026
* docs: scrub em dashes, open spec link in a new tab

Two small docs-site cleanups bundled in one PR.

Em dashes (—) are a common LLM tell; the README scrub during PR #36
replaced them with commas, colons, semicolons, or sentence splits
depending on context. Apply the same pass across every page under
docs/. Total: 142 em dashes across 13 files, scrubbed without
changing the prose's meaning. ``grep -c "—" docs/**/*.md`` returns
zero across the tree.

Pattern choice per occurrence: parentheticals (X — Y — Z) become
parens or commas; definitions (X — body) become ``X: body``;
two-clause sentences (X — Y) become sentence splits or
semicolons; appositives become commas. Where the em dash was load-
bearing in the prose rhythm, the sentence was rewritten rather than
mechanically substituted.

Also: the apex "specification" link on the docs landing page
now opens in a new tab. attr_list is already enabled in
mkdocs.yml, so ``{target="_blank" rel="noopener"}`` after the
link does the job inline.

uv run mkdocs build --strict clean.

* docs: drop empty Contributing page

The Contributing page was a one-paragraph stub saying "populated as
concrete contributor-facing material accrues" — a dead click for any
reader who landed on it. Until there's a real contributor pipeline,
having no page is more honest than having an empty one.

Deletes docs/contributing/ and its nav entry in mkdocs.yml. AGENTS.md
remains the agent-facing orientation; if a real contributor doc is
wanted later, it can be lifted from AGENTS.md selectively.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants