This is the full developer documentation for Arda Platform Documentation # Arda Platform Documentation > Documentation for the people who build Arda — and the agents collaborating with them. No fluff, no jargon hunting. **The Arda Platform turns kanban on the shop floor into a closed-loop control system that small and mid-size manufacturers can actually run.** Physical cards scan into digital reorders, planning runs in the background, and stockouts stop being a recurring fire drill. Under the hood: an API-first, MCP-native architecture grounded in operations science — Little’s law, bitemporal state, decoupled control loops. On the surface: a shop-floor experience that prefers cards and scans over screens. This site documents how the platform is built, deployed, run, and extended — for the people doing each of those, and the AI assistants helping them. ## Find your starting point [Section titled “Find your starting point”](#find-your-starting-point) Pick the role closest to yours. Every link drops you at a curated entry point. [Product Manager ](./product/)Personas, use cases, and the roadmap of capabilities the platform supports. [Product or DevOps Engineer ](./current-system/)Architecture, design patterns, runtime, OAM, and the SRE runbooks that keep production honest. [Customer Service or Sales Engineer ](./product/use-cases/)Workflows users actually run, plus release notes you can quote back to a customer with confidence. [AI or Tooling Builder ](./about/agent-access/)The /llms.txt index, raw .md endpoints, and how to point your assistant at this site. ## Explore by content area [Section titled “Explore by content area”](#explore-by-content-area) [Product ](./product/)Markets, personas, features, offerings — what the platform does for the customer. [Domain ](./domain/)Information model, glossary, the language we use to describe the business. [Current System ](./current-system/)Architecture, runtime, data model, OAM — how it works today. [Process ](./process/)Engineering craft, project lifecycle, SRE practices, deployment conventions. [Technology ](./technology/)Per-technology references: Next.js, Ktor, Astro & Starlight, Exposed, CDK, AG Grid, Cedar. [Vision ](./vision/)Long-term view of the mature system once foreseeable roadmap projects are complete. [Decisions ](./decisions/)Durable choices and the rationale behind them. [Roadmap ](./roadmap/)What is shipping, what is next, and where past projects landed. ## 🤖 Built for AI-augmented teams [Section titled “🤖 Built for AI-augmented teams”](#-built-for-ai-augmented-teams) Arda’s teams use AI assistants every day — drafting PRs, drafting runbooks, drafting answers to customer questions. This site is designed so those agents read it as easily as the humans do. * [`/llms.txt`](./llms.txt) — curated index of canonical entry points. Drop it into any tool that supports the [llms.txt convention](https://llmstxt.org). * [`/llms-full.txt`](./llms-full.txt) — the whole site as a single Markdown bundle for RAG, embedding, or `@docs` attachments. * [`/llms-small.txt`](./llms-small.txt) — hierarchy and per-page descriptions, sized for a tight context window. * **`/.md`** — every rendered page is also served as raw Markdown. Just append `.md` to any page’s URL. Point your tools here Send your AI tooling team to [Agent Access](about/agent-access/) for the full convention, exclusion rules, and `robots.txt` policy. ## ✍️ Contribute [Section titled “✍️ Contribute”](#️-contribute) Every page is plain Markdown in a public GitHub repository. The bar is low, the conventions are documented, and the build catches you when you stray. [Authoring Guide ](./about/authoring/)Start here — frontmatter, links, diagrams, the queued CI/CD pipeline. [Frontmatter and Build Rules ](./about/authoring/frontmatter-and-build-rules/)What the build enforces, what reviewers expect, how to read a CI failure. [Templates ](./about/templates/)Runbooks, design docs, decision logs, ADRs, content pages — start from one. [Markdown Gallery ](./about/authoring/markdown-gallery/)Every component and syntax the site supports, in one place. One-line orientation Clone the repo, copy a template, run `make pr-checks`, open a PR. The post-merge workflow handles versioning, the changelog, and the deploy. # About > About section overview describing the documentation site itself: structure, toolchain, authoring workflows, and conventions for human and AI contributors. Information about the documentation site itself: its structure, toolchain, authoring workflows, publishing process, and conventions for contributors (human and AI). ## Build Plugins [Section titled “Build Plugins”](#build-plugins) The documentation site uses two custom remark plugins that transform Markdown at build time. Authors do not need to configure anything — just follow the authoring conventions and the plugins do the rest. | Plugin | What it does | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | `remark-resolve-md-links` | Rewrites relative `.md` links to Starlight’s directory-based URL structure. Authors write standard file-path links; the plugin handles URL conversion. | | `remark-plantuml` | Renders `plantuml` fenced code blocks into inline SVG images. No external service required. | Both plugins are registered in `astro.config.mjs` and run automatically on every build. # Agent Access > How AI assistants and tools consume the Arda documentation site — the curated llms.txt index, raw .md page sources, robots.txt policy, and what is excluded. This site is intentionally agent-friendly. The published content is public reference material and one of the project goals is to make it easily consumable by AI assistants, MCP clients, search bots, and similar tooling. This page documents the agent-facing surfaces, what they contain, what is excluded, and how they are maintained. ## Agent surfaces [Section titled “Agent surfaces”](#agent-surfaces) | Surface | URL pattern | Purpose | | --------------- | ----------------- | ------------------------------------------------------------------------ | | Curated index | `/llms.txt` | Short, hand-picked index of canonical entry points + pointers to bundles | | Compact bundle | `/llms-small.txt` | Hierarchy + summaries — for token-tight agents | | Full bundle | `/llms-full.txt` | Entire site as a single Markdown blob — for one-shot RAG ingestion | | Raw page source | `/.md` | Any rendered page also served as raw Markdown | | Crawler policy | `/robots.txt` | Explicit allow rules for known AI crawlers | All four are emitted as part of the standard build and deployed alongside the rendered HTML. Their absolute URLs at production are: * * * * For preview builds the prefix is `https://arda-cards.github.io/documentation/...`. ## What’s in `/llms.txt` [Section titled “What’s in /llms.txt”](#whats-in-llmstxt) The curated index follows the [`llms.txt` proposal](https://llmstxt.org). It contains: * A title and one-paragraph description of the site. * Pointers to the small and full bundles. * An **Optional** section listing about 20 hand-picked entry points — the top-level section indexes plus a few high-leverage deep references (architecture patterns, the information model, the authoring guide, the four core technology references). The index is deliberately short. Agents that need more should follow it into the small or full bundles. ## What’s excluded [Section titled “What’s excluded”](#whats-excluded) The agent surfaces deliberately exclude `roadmap/**`. Roadmap content is project-internal — designs, plans, analyses, and session logs that decay in relevance after the project ships. Agents would otherwise pick up superseded designs and cite them as authoritative. Excluded: * `roadmap/in-progress//...` * `roadmap/completed//...` * `roadmap/backlog/...` * `roadmap/ideas/...` The exclusion only affects the agent surfaces (`/llms.txt`, `/llms-small.txt`, `/llms-full.txt`, and the `/.md` raw endpoints don’t render for excluded paths). The human site (`/roadmap/...` HTML pages) remains fully browsable. ## Crawler policy [Section titled “Crawler policy”](#crawler-policy) The `robots.txt` explicitly allows: | Vendor | Training crawler | Live fetch | Search index | | --------- | ----------------- | ------------- | --------------------- | | Anthropic | `ClaudeBot` | `Claude-User` | `Claude-SearchBot` | | OpenAI | `GPTBot` | — | `OAI-SearchBot` | | Google | `Google-Extended` | — | `Googlebot` (default) | All other user-agents are also allowed (`User-agent: * Allow: /`). The site is reference material; we choose breadth over scarcity. ## How the surfaces are generated [Section titled “How the surfaces are generated”](#how-the-surfaces-are-generated) Two Starlight plugins handle generation; both are configured in `astro.config.mjs`. * [`starlight-llms-txt`](https://github.com/delucis/starlight-llms-txt) emits `/llms.txt`, `/llms-small.txt`, and `/llms-full.txt`. Configuration: project name, description, exclude patterns (`roadmap/**`), promote patterns (durable section roots), and an `optionalLinks` array driving the curated index. * [`starlight-dot-md`](https://github.com/morinokami/starlight-dot-md) emits a `/.md` route alongside every rendered page, returning the raw source. `robots.txt` is a static file at `public/robots.txt` — Astro copies it through to `dist/` unchanged. ## Maintaining the curated index [Section titled “Maintaining the curated index”](#maintaining-the-curated-index) When a section grows or shrinks, update the `optionalLinks` array in `astro.config.mjs`. Keep it short — fewer than 30 entries is the target. The full bundle covers the rest. When a project completes and its content is durable enough to live outside `roadmap/`, promote the relevant pages into a permanent section (e.g. `current-system/`, `domain/`) before retiring the project’s roadmap directory. The agent surfaces will pick up the promoted content automatically. ## Discoverability tips for agent authors [Section titled “Discoverability tips for agent authors”](#discoverability-tips-for-agent-authors) If you are building an agent or MCP client that consumes this site: * Start at `/llms.txt`. It is short and tells you which bundles to fetch next. * For per-page reads, append `.md` to any URL. The raw markdown contains frontmatter (title, description, tags, domain, maturity, author) plus the unrendered body. * For bulk ingestion, `/llms-full.txt` is one \~10 MB markdown file with all included pages concatenated. Suitable for a single embedding pass. * For sparse retrieval, `/llms-small.txt` contains hierarchy and per-page descriptions only — useful when a small index needs to fit a tight context. ## Related [Section titled “Related”](#related) * [`knowledge-base/agent-access-surfaces.md`](https://github.com/Arda-cards/documentation/blob/main/knowledge-base/agent-access-surfaces.md) — repo-side notes on plugin configuration and update procedures. * [`process/craft/documentation/`](../../process/craft/documentation/) — broader documentation conventions. # Overview > Authoring guide overview covering the standards and conventions for writing technical documentation in the Arda Astro Starlight site. This guide covers the standards and conventions for writing technical documentation in the Arda Platform documentation site. The site is built with [Astro Starlight](https://starlight.astro.build/) and all content is written in Markdown (`.md`) or MDX (`.mdx`). ## PR conventions [Section titled “PR conventions”](#pr-conventions) This repository uses **PR-body changelogs** and a **queued CI/CD pipeline**. Three rules to remember as an author: 1. **Do not edit `CHANGELOG.md`.** Put your changelog entry in the PR description under a `## CHANGELOG` heading (the repo’s PR template has the placeholder). The post-merge `changelog-assembly` workflow writes `CHANGELOG.md` and tags the release for you. 2. **Use the PR template** — it has `## Summary`, `## CHANGELOG`, `## Closes`, `## Verification` sections. The `changelog-check` workflow will fail your PR if the `## CHANGELOG` block is missing or empty. 3. **Reviewer policy is path-scoped via CODEOWNERS.** PRs that only touch `src/content/docs/roadmap/` need no approval; everything else needs an approving review from `@Arda-cards/engineering`. Use the `REVIEW-REQUIRED` label to force a review even on roadmap-only PRs. Step-by-step author guidance, including labels (`auto-merge`, `REVIEW-REQUIRED`, `manual-changelog`), preview/production deploy URLs, and the post-merge automation, lives in [Getting Started](getting-started/). The shared design across `documentation` and `arda-frontend-app` is documented at [Queued CI/CD](../../current-system/oam/configuration/deployment/queued-cicd/). ## Frontmatter and build rules [Section titled “Frontmatter and build rules”](#frontmatter-and-build-rules) Every page carries a YAML frontmatter block. `title`, `description` (40–300 characters), and `author` are required and **enforced at build time** — `make pr-checks` fails the schema validation on a violation. Internal links must include the `.md` extension; the same `make pr-checks` run catches broken or extensionless links through the Lychee link checker. Beyond those enforced rules there are a few **conventions** that reviewers expect — no duplicate in-body `# H1`, code fences carry a language tag, and every PlantUML diagram is paired with a 1–3 sentence prose summary — but those are not currently enforced by the build. See [Frontmatter and Build Rules](frontmatter-and-build-rules/) for the canonical reference, including required and recommended fields, enumerated values, style for `description`, MDX-specific constraints, what each `make pr-checks` step actually catches, and how to read the build failures when something is off. ## Document Organization [Section titled “Document Organization”](#document-organization) Content is organized by audience and purpose across the following top-level sections: | Section | Audience | Content Type | | ----------------- | ------------------------------------ | ---------------------------------------------------------- | | `product/` | End users (shop managers, operators) | How-to guides, concept explanations, platform guides | | `domain/` | Domain experts, analysts | Information model, domain concepts, glossary | | `current-system/` | Developers and engineers | Architecture, API reference, patterns, data model, runtime | | `vision/` | All stakeholders | Future-state architecture, target designs | | `roadmap/` | Project managers, stakeholders | Project status, backlog, ideas | | `process/` | Engineers, team leads | Development workflows, SRE procedures, craft guides | | `technology/` | Engineers | Technology-specific references (Cedar, AG Grid, etc.) | | `legal/` | Compliance, management | Licensing, certification, compliance | | `decisions/` | Engineers, architects | Decision records, discussion logs | | `about/` | Authors, contributors | Authoring guides, templates, style conventions | Within each section, follow the [Diataxis](https://diataxis.fr/) framework: * **Tutorial** — A learning-oriented walkthrough. Leads the reader through a complete task to build competence. * **How-To Guide** — A goal-oriented set of steps. Assumes the reader knows what they want; explains how to do it. * **Reference** — Information-oriented material. Accurate, complete, and terse. Suitable for lookup. * **Explanation** — Understanding-oriented discussion. Explores context, background, and rationale. Each article should serve one Diataxis type. If content spans two types, split it into separate articles. ## File and Path Conventions [Section titled “File and Path Conventions”](#file-and-path-conventions) * File names use lowercase `kebab-case`: `adding-items.md`, `purchase-order-v1.md`. * Directories use lowercase `kebab-case` as well. * Every directory that contains content pages must have an `index.md` serving as the section landing page. * Cross-repository path references use `/repo-name/path/to/file` (no system absolute path). ### Links [Section titled “Links”](#links) Use standard Markdown file-path links with the `.md` extension for all internal references. A build-time remark plugin (`remark-resolve-md-links`) automatically rewrites these to Starlight-compatible URLs, so source files stay clean and navigable in editors and GitHub. **Recommended forms:** | Link syntax | Meaning | | ----------------------------------- | -------------------------------------- | | `[text](sibling.md)` | Page in the same directory | | `[text](./sibling.md)` | Same (explicit relative) | | `[text](../other-section/page.md)` | Page in a parent or sibling directory | | `[text](sub-dir/index.md)` | Section landing page in a subdirectory | | `[text](sibling.md#section-anchor)` | Specific heading on another page | | `[text](#anchor)` | Heading on the current page | **Rules:** * Always include the `.md` extension on internal links — the plugin only processes `.md` links. * Use relative paths, not absolute paths starting with `/`. * Do not manually convert links to Starlight’s directory URL form (e.g., `../sibling/`). The plugin handles this automatically. * External links use full URLs: `[text](https://example.com)`. * Anchor-only links (`#section`) are passed through unchanged. * Links inside fenced code blocks are not modified. * **Link text**: Use the target document’s `title` frontmatter value or `# Heading` as the link text. For example, link to the PlantUML Guide as `[PlantUML Guide](plantuml-guide.md)`, not `[click here](plantuml-guide.md)`. ### Link Resolution — How the Plugin Transforms Paths [Section titled “Link Resolution — How the Plugin Transforms Paths”](#link-resolution--how-the-plugin-transforms-paths) Caution Links without the `.md` extension are **not processed** by the plugin and will resolve differently between local dev (`/`) and CI preview (`/documentation/`). This is the most common cause of links that pass locally but fail in CI. Starlight serves each `.md` page as a directory URL (e.g., `page.md` becomes `/section/page/`). The `remark-resolve-md-links` plugin compensates for this by adding one `../` to every `.md` link in non-index pages at build time. Authors do not need to account for this adjustment — **write standard filesystem-relative paths with the `.md` extension and the plugin handles the rest.** **Key rules:** * Write the path exactly as the filesystem relative path from your file to the target file. * Always include `.md` — a link like `../sibling` (without `.md`) bypasses the plugin and breaks under the `/documentation/` base path. * Index pages (`index.md`) do not get the extra `../` — their URL is already their directory. **Worked example:** Given this file structure: ```text docs/ product/ features/ upload.md ← source file (non-index) personas/ sam.md ← target file ``` From `upload.md` to `sam.md`, the filesystem relative path is `../personas/sam.md`. Write exactly that — the plugin will transform it to `../../personas/sam/` at build time, which resolves correctly from the page URL `/product/features/upload/`. **Validation:** Run `make test-preview` locally before pushing. This builds with the preview base path (`/documentation/`) which is stricter than the default production build and will catch resolution errors that pass locally. To compute the correct link and verify it resolves correctly, use the helper script: ```bash # From the documentation/ directory: node tests/resolve-link.mjs # Example: node tests/resolve-link.mjs \ src/content/docs/product/features/upload.md \ src/content/docs/product/personas/sam.md # Output: ../personas/sam.md ``` The script simulates the plugin transformation and verifies the resulting URL resolves to the target page. If the link would break, it prints a warning with the expected vs. actual resolution. ## Adding and Removing Sections [Section titled “Adding and Removing Sections”](#adding-and-removing-sections) For a step-by-step guide on creating and removing documentation sections — including using the built-in Section Creator widget available on the local dev server — see [Adding and Removing Sections](adding-sections/). ## Provenance [Section titled “Provenance”](#provenance) Content provenance is tracked centrally in the [Content Provenance](../provenance/) page rather than inline within individual files. When adding new content migrated from another source, add an entry to the provenance table for the appropriate section. ## Markdown Formatting [Section titled “Markdown Formatting”](#markdown-formatting) ### General Rules [Section titled “General Rules”](#general-rules) * One blank line before and after headings, lists, blockquotes, and code blocks. * Use `-` for bulleted lists (not `*`). * Use spaces only for indentation — no tabs. * Use 2 spaces per indentation level in lists and code blocks. * Use `---` (three hyphens) for horizontal rules. ### Headings [Section titled “Headings”](#headings) * The document title is the only `H1` (`#`). Do not repeat the `title` frontmatter value in the body. * Use `##` through `####` for sections and subsections. * Do not skip heading levels (e.g., do not jump from `##` to `####`). ### Admonitions [Section titled “Admonitions”](#admonitions) The documentation site uses Starlight’s admonition syntax. In `.md` files, use the triple-colon shorthand: ```markdown :::note Useful information that users should know, even when skimming content. ::: :::tip Helpful advice for doing things better or more easily. ::: :::caution Urgent info that needs immediate user attention to avoid problems. ::: :::danger Advises about risks or negative outcomes of certain actions. ::: ``` In `.mdx` files, use the `