--- name: document-code description: Add and update the documentation website for Syncpack. Use when making user-facing changes to the codebase. --- # Document Code Guide for adding and updating Syncpack's documentation website. ## Quick Decision What are you documenting? | Adding/Updating... | Location | | --------------------- | ------------------------------------------------ | | Command docs | `site/src/content/docs/command/[cmd].mdx` | | Config property | `site/src/content/docs/config/[prop].mdx` | | Version group variant | `site/src/content/docs/version-groups/[var].mdx` | | Semver group variant | `site/src/content/docs/semver-groups/[var].mdx` | | Status code | `site/src/content/docs/status/[code].mdx` | | FAQ | `site/src/faq/[id].mdx` | | Shared option partial | `site/src/_partials/option/[opt].mdx` | | Reusable component | `site/src/components/[name].astro` | ## Workflow 1. **Read source** — `cli.rs` for commands, `rcfile.rs` for config, `instance_state.rs` for status codes 2. **Create/update MDX** — Match existing structure exactly 3. **Add link identifier** — Update `globalReferenceLinks` in `astro.config.mjs` 4. **Test locally** — `pnpm run dev` from `site/` 5. **Verify links** — Check all `(IDENTIFIER)` links resolve ## Source to Docs Mapping | Source | Documentation | | ----------------------- | ----------------------------------------------------- | | `src/cli.rs` Subcommand | `site/src/content/docs/command/*.mdx` | | `src/rcfile.rs` Rcfile | `site/src/content/docs/config/*.mdx` | | `src/instance_state.rs` | `site/src/content/docs/status/*.mdx` | | `src/specifier.rs` | `site/src/content/docs/reference/specifier-types.mdx` | ## Local Development ```bash cd site pnpm run dev # Start at http://localhost:4321/syncpack pnpm run build # Verify build succeeds ``` ## Site Overview - Source located at `site/src/` - Built with [Starlight](https://starlight.astro.build/) on top of [Astro](https://astro.build/) - Content at `site/src/content/docs/**/*.mdx` - Reusable partials at `site/src/_partials/**/*.mdx` - Reusable components at `site/src/components/*.astro` ## Command Documentation Each command has a corresponding file at `site/src/content/docs/command/[command].mdx`. ### Required Structure (in order) 1. Description of the command's purpose from end user perspective 2. `## Examples` — Single bash code block with commented examples 3. `## Options` — Start with `` callout, then `###` for each option alphabetically (`--help` last) ### Shared Option Partials Many commands share options. Define reusable partials at `site/src/_partials/option/*.mdx`: ```mdx import ConfigOption from "@partials/option/config.mdx"; ``` ## Config Documentation Each config property has a file at `site/src/content/docs/config/[property].mdx`. ### Required Structure 1. Description of the config's purpose from end user perspective 2. `## Default Value` — Code block showing default (when applicable) 3. `## Examples` — Code blocks with commented examples ### Version Groups and Semver Groups Each variant has its own page: - `site/src/content/docs/version-groups/*.mdx` - `site/src/content/docs/semver-groups/*.mdx` #### Required Structure 1. Description of the group's purpose from end user perspective 2. `## Examples` — Code block per example, capture novel use cases 3. `## Configuration` — `###` for each config property ## Status Code Documentation Each status code has a file at `site/src/content/docs/status/[code].mdx`. Reference page at `site/src/content/docs/reference/status-codes.mdx` explains the `InstanceState` enum and its nested enums (`ValidInstance`, `InvalidInstance`, `SuspectInstance`). ## FAQ Documentation - Create FAQ files at `site/src/faq/[id].mdx` - Listed at `/syncpack/faq` via `site/src/pages/faq.astro` - Individual pages via `site/src/pages/faq/[id].astro` ## Linking Between Pages Use named identifiers in markdown links: ```mdx When using the [update](COMMAND_UPDATE) command ``` Define identifiers in `globalReferenceLinks` function in `site/astro.config.mjs`. ## Open Graph Images Generated by `site/src/pages/og/[...path].png.ts` using [Satori](https://github.com/vercel/satori). ## Troubleshooting | Problem | Fix | | ----------------------------- | --------------------------------------------- | | Link not working | Check identifier in `globalReferenceLinks` | | Partial not rendering | Verify import path uses `@partials/` alias | | OG image broken | Check `og/[...path].png.ts` handles new route | | Build fails | Run `pnpm run build` locally to see error | | Page not appearing in sidebar | Check frontmatter and Starlight config | ## Checklist Before submitting documentation: - [ ] Structure matches existing pages of same type - [ ] Link identifier added to `astro.config.mjs` - [ ] Local dev server renders correctly - [ ] Build succeeds (`pnpm run build`) - [ ] All internal links resolve