-
Notifications
You must be signed in to change notification settings - Fork 0
docs: add MkDocs site build for the spec #45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
7ba3fcf
docs: add MkDocs site build for the spec
chris-colinsky b8a6eaf
docs: consolidate proposals nav to index page
chris-colinsky 60b9b05
docs: drop in-page TOC from charter
chris-colinsky 8effea8
docs: polish landing, header link, and footer
chris-colinsky 8796cde
changelog: drop [Unreleased]; bold subsections
chris-colinsky aa532d7
docs: address PR #45 review feedback
chris-colinsky File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| name: Docs | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: [main] | ||
| paths: | ||
| - "docs/**" | ||
| - "spec/**" | ||
| - "proposals/**" | ||
| - "GOVERNANCE.md" | ||
| - "CHANGELOG.md" | ||
| - "mkdocs.yml" | ||
| - "pyproject.toml" | ||
| - ".github/workflows/docs.yml" | ||
| push: | ||
| branches: [main] | ||
| paths: | ||
| - "docs/**" | ||
| - "spec/**" | ||
| - "proposals/**" | ||
| - "GOVERNANCE.md" | ||
| - "CHANGELOG.md" | ||
| - "mkdocs.yml" | ||
| - "pyproject.toml" | ||
| - ".github/workflows/docs.yml" | ||
|
|
||
| # Least-privilege: read code for the build; ``deployments: write`` lets | ||
| # the Cloudflare Pages action attach a deployment status to the commit. | ||
| permissions: | ||
| contents: read | ||
| deployments: write | ||
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| jobs: | ||
| build-and-deploy: | ||
| runs-on: ubuntu-latest | ||
| # Bind the secret-presence check to a job-level env var so the | ||
| # deploy step's ``if:`` can gate on it. Protects against a missing | ||
| # or rotated CF secret turning the main branch's status red. | ||
| env: | ||
| HAS_CF_SECRETS: ${{ secrets.CF_API_TOKEN != '' && secrets.CF_ACCOUNT_ID != '' }} | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | ||
|
|
||
| - name: Install uv | ||
| uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 | ||
| with: | ||
| enable-cache: true | ||
|
|
||
| - name: Sync deps (docs group) | ||
| # ``--frozen`` requires the lockfile to be up-to-date and refuses | ||
| # to update it during sync — guarantees reproducible CI builds. | ||
| run: uv sync --frozen --group docs | ||
|
|
||
| - name: Build site (strict) | ||
| # ``--strict`` fails the build on any warning. Catches broken | ||
| # internal links, missing nav references, plugin misconfig | ||
| # early — before the deploy step. | ||
| run: uv run mkdocs build --strict | ||
|
|
||
| - name: Deploy to Cloudflare Pages | ||
| # Only deploy on pushes to main, and only when the CF secrets | ||
| # are configured. PR builds prove the site builds but do not | ||
| # deploy. If secrets are missing, skip rather than fail — the | ||
| # build step above is the source of truth for "does the site | ||
| # compile cleanly." | ||
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' && env.HAS_CF_SECRETS == 'true' | ||
| uses: cloudflare/wrangler-action@ebbaa1584979971c8614a24965b4405ff95890e0 # v4.0.0 | ||
| with: | ||
| apiToken: ${{ secrets.CF_API_TOKEN }} | ||
| accountId: ${{ secrets.CF_ACCOUNT_ID }} | ||
| command: pages deploy site --project-name=openarmature-spec-docs --branch=main | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,8 @@ | ||
| .claude/ | ||
| .claude/ | ||
|
|
||
| # MkDocs build output (rendered docs site). | ||
| site/ | ||
|
|
||
| # Python tooling for the docs build (uv venv). | ||
| .venv/ | ||
| __pycache__/ |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../spec/graph-engine/spec.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../spec/llm-provider/spec.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../spec/observability/spec.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../spec/pipeline-utilities/spec.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../spec/prompt-management/spec.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../CHANGELOG.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../GOVERNANCE.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,157 @@ | ||
| --- | ||
| hide: | ||
| - toc | ||
| --- | ||
|
|
||
| # OpenArmature | ||
|
|
||
| **A workflow framework for LLM pipelines and tool-calling agents — defined as | ||
| a language-agnostic specification.** Implementations conform to the same | ||
| behavior via canonical fixtures, so the same workload runs the same way | ||
| regardless of language or runtime. | ||
|
|
||
| [Read the charter](openarmature.md){ .md-button .md-button--primary } | ||
| [View on GitHub](https://github.com/LunarCommand/openarmature-spec){ .md-button target="_blank" rel="noopener" } | ||
|
|
||
| --- | ||
|
|
||
| ## Pipelines and agents — one substrate | ||
|
|
||
| Most frameworks pick a side: deterministic LLM pipelines or autonomous | ||
| tool-calling agents. OpenArmature treats both as applications of the same | ||
| primitives — typed graphs, conditional edges, middleware, checkpointing. | ||
| A multi-stage content-extraction pipeline and a tool-loop agent are both | ||
| just compiled graphs. | ||
|
|
||
| <div class="grid cards" markdown> | ||
|
|
||
| - :material-pipe-leak:{ .lg .middle } __Deterministic LLM pipelines__ | ||
|
|
||
| --- | ||
|
|
||
| Topology pinned at compile time. Each node does one thing — LLM call, | ||
| parse, validate, persist. Per-node retries with explicit budgets; | ||
| observability captures every step. | ||
|
|
||
| *Use cases: content extraction, classification cascades, multi-stage | ||
| analysis, document refinery.* | ||
|
|
||
| - :material-robot:{ .lg .middle } __Tool-calling agents__ | ||
|
|
||
| --- | ||
|
|
||
| Same primitives, different shape: LLM node + tool-dispatch node + | ||
| conditional edge back to the LLM. Tool-call envelope is normalized; | ||
| multi-turn agents resume mid-conversation via checkpoint/resume. | ||
|
|
||
| *Use cases: research agents, code-generation loops, data-extraction | ||
| bots, multi-turn assistants.* | ||
|
|
||
| </div> | ||
|
|
||
| --- | ||
|
|
||
| ## What sets it apart | ||
|
|
||
| <div class="grid cards two-col" markdown> | ||
|
|
||
| - :material-eye-check:{ .lg .middle } __Transparency over abstraction__ | ||
|
|
||
| --- | ||
|
|
||
| Provider responses surface verbatim alongside normalized fields. | ||
| Internal events are observable via hook points at every node | ||
| boundary. The framework adds structure; it never hides what the | ||
| underlying tools returned. | ||
|
|
||
| - :material-shield-check:{ .lg .middle } __Compile-time safety__ | ||
|
|
||
| --- | ||
|
|
||
| Bad graph shapes fail at compile, not at run. Reducer conflicts, | ||
| dangling edges, multiple outgoing edges from a non-conditional | ||
| node — all caught before the first LLM call. | ||
|
|
||
| - :material-puzzle:{ .lg .middle } __Composable, not prescriptive__ | ||
|
|
||
| --- | ||
|
|
||
| Middleware is a primitive. Retry and timing ship canonical; | ||
| everything else composes from the same protocol. No magic | ||
| decorators, no global state — just explicit composition. | ||
|
|
||
| - :material-radar:{ .lg .middle } __Observability built in__ | ||
|
|
||
| --- | ||
|
|
||
| OpenTelemetry mapping is normative, not bolt-on. Span hierarchy | ||
| mirrors graph structure; cross-backend correlation IDs flow with | ||
| every invocation; detached trace mode keeps high-volume fan-outs | ||
| readable. | ||
|
|
||
| </div> | ||
|
|
||
| --- | ||
|
|
||
| ## Reference implementation | ||
|
|
||
| !!! abstract "openarmature-python — currently in active development" | ||
|
|
||
| The canonical reference implementation. Ships the full API for graph | ||
| engine, pipeline utilities, LLM provider, observability, and prompt | ||
| management — all driven by the conformance fixtures defined in this | ||
| repo. | ||
|
|
||
| [Visit the repo on GitHub :octicons-link-external-16:](https://github.com/LunarCommand/openarmature-python){ .md-button target="_blank" rel="noopener" } | ||
|
|
||
| A TypeScript implementation is on the roadmap. Both will pin behavior to | ||
| this spec. | ||
|
|
||
| --- | ||
|
|
||
| ## Why a spec, not a library? | ||
|
|
||
| LLM workflow frameworks usually ship as opinionated libraries. Pick the | ||
| wrong one and you're rewriting your pipeline; ship in two languages and | ||
| you're maintaining two divergent codebases that drift over time. | ||
| OpenArmature flips the model: the contract lives here as a spec with | ||
| conformance fixtures, and reference implementations in each language port | ||
| to the same behavior. Same workload, multiple runtimes, no behavioral | ||
| drift. | ||
|
|
||
| <div class="grid cards" markdown> | ||
|
|
||
| - :material-check-decagram:{ .lg .middle } __Behavior pinned by fixtures__ | ||
|
|
||
| --- | ||
|
|
||
| 118 conformance fixtures across five capabilities. Implementations run | ||
| them; if they pass, behavior matches every other conforming runtime. | ||
| No "implementation-defined" footguns. | ||
|
|
||
| - :material-cube-unfolded:{ .lg .middle } __One contract, many runtimes__ | ||
|
|
||
| --- | ||
|
|
||
| Reference implementations in Python (active) and TypeScript (planned). | ||
| The same pipeline definition, the same observable trace shape, the | ||
| same retry semantics — across languages. | ||
|
|
||
| - :material-arrow-decision:{ .lg .middle } __Open evolution__ | ||
|
|
||
| --- | ||
|
|
||
| New behavior lands through numbered RFC-style proposals reviewed in | ||
| the open. Once accepted, a proposal's text is immutable; superseding | ||
| proposals link the chain forward. No silent drift between releases. | ||
|
|
||
| </div> | ||
|
|
||
| --- | ||
|
|
||
| ## How it evolves | ||
|
|
||
| OpenArmature is governed by a numbered proposal system: every behavioral | ||
| change starts as a Draft RFC, is reviewed in the open, lands with a | ||
| SemVer bump, and is frozen in proposal text once accepted. The capability | ||
| specs are the source of truth; proposals are the change history. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| // Wrap the header site title in a link to the site root. Material's | ||
| // default markup leaves the title as plain text; only the small logo | ||
| // icon to the left is clickable. Wrapping it as an <a> matches the | ||
| // behavior most readers expect. | ||
| document$.subscribe(function () { | ||
| var topic = document.querySelector(".md-header__title .md-ellipsis"); | ||
| if (!topic || topic.querySelector("a")) return; | ||
| var logo = document.querySelector(".md-header__button.md-logo"); | ||
| var href = (logo && logo.getAttribute("href")) || "."; | ||
| var text = topic.textContent.trim(); | ||
| var link = document.createElement("a"); | ||
| link.href = href; | ||
| link.textContent = text; | ||
| link.className = "md-header__title-link"; | ||
| topic.innerHTML = ""; | ||
| topic.appendChild(link); | ||
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| document$.subscribe(function () { | ||
| var tables = document.querySelectorAll("article table:not([class])"); | ||
| tables.forEach(function (table) { | ||
| new Tablesort(table); | ||
| }); | ||
| }); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| # Proposals | ||
|
|
||
| OpenArmature evolves through numbered RFC-style proposals. Each proposal targets a capability spec and | ||
| moves through a `Draft → Accepted` lifecycle. Once `Accepted`, a proposal's text is **immutable** — further | ||
| changes happen via new proposals that supersede the prior. See [Governance](governance.md) for the full | ||
| lifecycle and the proposal template. | ||
|
|
||
| | # | Title | Capability | Status | | ||
| |------|---------------------------------------------|---------------------|----------| | ||
| | [0001](proposals/0001-graph-engine-foundation.md) | Foundation | graph-engine | Accepted | | ||
| | [0002](proposals/0002-subgraph-explicit-mapping.md) | Subgraph explicit I/O mapping | graph-engine | Accepted | | ||
| | [0003](proposals/0003-node-boundary-observer-hooks.md) | Node-boundary observer hooks | graph-engine | Accepted | | ||
| | [0004](proposals/0004-pipeline-utilities-middleware.md) | Middleware | pipeline-utilities | Accepted | | ||
| | [0005](proposals/0005-pipeline-utilities-parallel-fan-out.md) | Parallel fan-out | pipeline-utilities | Accepted | | ||
| | [0006](proposals/0006-llm-provider-core.md) | Core abstraction (OpenAI-compatible) | llm-provider | Accepted | | ||
| | [0007](proposals/0007-observability-otel-span-mapping.md) | OpenTelemetry span mapping | observability | Accepted | | ||
| | [0008](proposals/0008-pipeline-utilities-checkpointing.md) | Checkpointing | pipeline-utilities | Accepted | | ||
| | [0009](proposals/0009-pipeline-utilities-per-instance-fan-out-resume.md) | Per-instance fan-out resume | pipeline-utilities | Draft | | ||
| | [0010](proposals/0010-drain-timeout.md) | Bounded drain — configurable timeout | graph-engine | Draft | | ||
| | [0011](proposals/0011-pipeline-utilities-parallel-branches.md) | Parallel branches | pipeline-utilities | Accepted | | ||
| | [0012](proposals/0012-graph-engine-completed-event-after-edges.md) | Completed event fires after edge evaluation | graph-engine | Accepted | | ||
| | [0013](proposals/0013-fan-out-config-on-node-event.md) | Fan-out config on node event | graph-engine | Accepted | | ||
| | [0014](proposals/0014-pipeline-utilities-state-migration.md) | State migration hooks for checkpoints | pipeline-utilities | Accepted | | ||
| | [0015](proposals/0015-llm-provider-multimodal-images.md) | Image content blocks for user messages | llm-provider | Accepted | | ||
| | [0016](proposals/0016-llm-provider-structured-output.md) | Structured output | llm-provider | Accepted | | ||
| | [0017](proposals/0017-prompt-management-core.md) | Prompt management core | prompt-management | Accepted | | ||
|
|
||
| Click any column header to sort. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0001-graph-engine-foundation.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0002-subgraph-explicit-mapping.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0003-node-boundary-observer-hooks.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0004-pipeline-utilities-middleware.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0005-pipeline-utilities-parallel-fan-out.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0006-llm-provider-core.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0007-observability-otel-span-mapping.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0008-pipeline-utilities-checkpointing.md |
1 change: 1 addition & 0 deletions
1
docs/proposals/0009-pipeline-utilities-per-instance-fan-out-resume.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ../../proposals/0009-pipeline-utilities-per-instance-fan-out-resume.md |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.