--- description: Generate a Node.js build script that converts the VitePress wiki to Azure DevOps Wiki-compatible markdown in dist/ado-wiki/. Transforms Mermaid syntax, strips front matter, fixes links. --- # Deep Wiki: Azure DevOps Wiki Export You are a Technical Documentation Engineer. Generate a Node.js build script that converts the VitePress wiki output into Azure DevOps (ADO) Wiki-compatible markdown. ## Source Repository Resolution (MUST DO FIRST) Before generating the build script, resolve the source repository context: 1. **Check for git remote**: Run `git remote get-url origin` 2. **Ask the user**: _"Is this a local-only repository, or do you have a source repository URL?"_ - Remote URL → store as `REPO_URL`, preserve linked citations in converted output - Local → preserve local citations as-is 3. **Do NOT proceed** until resolved ## Context Azure DevOps Wikis use a markdown dialect that differs from GFM/VitePress in critical ways. This command creates a preprocessing script that reads the generated wiki `.md` files, applies targeted transformations, and writes ADO-compatible copies to `dist/ado-wiki/`. **Source files are NEVER modified.** Only transformed copies are written to the output directory. ## Process ### Step 1: Scan the Wiki Directory Locate the generated wiki output (typically `wiki/` or the VitePress source directory). Scan for incompatibilities: ```bash # Count mermaid code fence blocks grep -rc '```mermaid' --include="*.md" wiki/ | grep -v ':0$' # Find flowchart keyword usage grep -rn '^\s*flowchart ' --include="*.md" wiki/ # Find
tags in mermaid labels grep -rn '
' --include="*.md" wiki/ | head -20 # Count YAML front matter files for f in $(find wiki/ -name "*.md"); do head -1 "$f" | grep -q '^---$' && echo "FRONT MATTER: $f" done # Find parent-relative links grep -rn '](\.\./' --include="*.md" wiki/ | wc -l # Find VitePress container directives grep -rn '^:::' --include="*.md" wiki/ | grep -v mermaid ``` Report the scan results before proceeding. ### Step 2: Generate the Build Script Create `scripts/build-ado-wiki.js` — a Node.js ESM script with **zero external dependencies** (only `node:fs/promises`, `node:path`, `node:url`). The script must apply these transformations in order: #### a) Strip YAML Front Matter Remove `---` delimited YAML blocks at file start. ADO renders these as visible raw text. #### b) Convert Mermaid Blocks Process line-by-line, apply fixes ONLY inside mermaid blocks: - Opening fence: ` ```mermaid ` → `::: mermaid` - Closing fence: ` ``` ` → `:::` - `flowchart` → `graph` (preserve direction: TD, LR, TB, RL, BT) - Strip `
`, `
`, `
` variants (replace with space) - Replace long arrows (`---->` with 4+ dashes) with `-->` #### c) Convert Parent-Relative Source Links Convert `[text](../../path)` to plain text. Preserve same-directory `.md` links and external URLs. #### d) Convert VitePress Container Directives Convert `::: tip` → `> [!TIP]`, `::: warning` → `> [!WARNING]`, `::: danger` → `> [!CAUTION]`, `::: info` → `> [!NOTE]`. Content inside containers becomes blockquoted text. #### e) Copy Non-Markdown Assets Copy images, diagrams, and other non-markdown files to `dist/ado-wiki/` preserving relative paths. ### Step 3: Configure the Script The script should: - Auto-detect the wiki source directory (`wiki/`, `wiki-site/`, or configurable via CLI arg) - Output to `dist/ado-wiki/` - Skip: `node_modules/`, `.vitepress/`, `.git/`, `dist/` - Print statistics: count of each transformation type applied - Exit with code 0 on success, 1 on error ### Step 4: Add npm Script Add to the wiki's `package.json`: ```json { "scripts": { "build:ado": "node scripts/build-ado-wiki.js" } } ``` ### Step 5: Verify After generating the script, run it and verify: 1. File count matches source (minus skipped dirs) 2. Zero ` ```mermaid ` fences remaining 3. Zero `flowchart` keywords in mermaid blocks 4. No YAML front matter in output 5. Parent-relative links converted to plain text 6. Same-directory `.md` links preserved 7. Directory structure preserved 8. `index.md` exists at `dist/ado-wiki/` root and is a proper wiki home page (NOT a placeholder) ## ADO Wiki Incompatibility Reference ### CRITICAL (Must Fix) | Issue | GFM/VitePress | ADO Wiki | Transform | |-------|--------------|----------|-----------| | Mermaid fences | ` ```mermaid ` | `::: mermaid` | Convert fences | | `flowchart` keyword | `flowchart TD` | `graph TD` | Replace keyword | | `
` in Mermaid | `Node[A
B]` | Breaks diagram | Strip (→ space) | | Long arrows | `---->` | Not supported | → `-->` | | YAML front matter | `---`...`---` | Raw visible text | Strip | | Parent source links | `[t](../../src)` | Broken path | → plain text | | Container directives | `::: tip` | Not supported | → `> [!TIP]` | ### Compatible As-Is (No Action Needed) - ✅ Tables, blockquotes, horizontal rules, emoji - ✅ Fenced code blocks, relative `.md` links, external URLs - ✅ Bold, italic, strikethrough, inline code, lists, headings ### ADO Mermaid Supported Types ✅ `sequenceDiagram`, `gantt`, `graph`, `classDiagram`, `stateDiagram`, `journey`, `pie`, `erDiagram`, `gitGraph`, `timeline` ❌ `flowchart` (use `graph`), `mindmap`, `sankey`, `quadrantChart`, `xychart`, `block` ## Index Page Generation (CRITICAL) The ADO Wiki's `index.md` (root home page) **MUST be a proper wiki landing page**, NOT a generic placeholder. The build script must handle this: ### Logic 1. **If the VitePress source has an `index.md`**: Transform it (strip VitePress-specific hero/features blocks, strip front matter) and use it as the ADO wiki home page 2. **If no VitePress `index.md` exists, or it's a VitePress hero-only page**: Generate a proper `index.md` at `dist/ado-wiki/` root with: - **Project title** as `# heading` (from `package.json` name, README, or repo name) - **Overview paragraph** — what the project does (from README or generated wiki overview) - **Table of Contents** — linked list of all wiki sections/pages with descriptions - **Quick Navigation table** — Section, Description, Link columns for the top-level wiki sections - **Links to onboarding guides** (if they exist) 3. **NEVER leave `index.md` as a generic "TODO" placeholder** — if the existing `index.md` contains placeholder text like "TODO:", "Give a short introduction", or "TSA bug filing", **replace it entirely** with a proper generated landing page ### Generated Index Template ```markdown # [Project Name] — Wiki [1-2 sentence project description] ## Quick Navigation | Section | Description | |---------|-------------| | [Onboarding Hub](./onboarding/index.md) | Guide selector for all audiences | | [Contributor Guide](./onboarding/contributor-guide.md) | For new contributors (assumes Python/JS) | | [Staff Engineer Guide](./onboarding/staff-engineer-guide.md) | Architectural deep-dive for senior engineers | | [Executive Guide](./onboarding/executive-guide.md) | Capability & risk overview for engineering leaders | | [Product Manager Guide](./onboarding/product-manager-guide.md) | Feature-focused guide for PMs | | [Getting Started](./01-getting-started/...) | Setup, installation, first steps | | [Architecture](./02-architecture/...) | System design and component overview | | ... | ... | ## Wiki Contents - [Full table of contents with links to all pages] ``` ### VitePress Hero Block Stripping VitePress `index.md` files often contain YAML `hero:` and `features:` blocks inside front matter. The script must: - Strip the entire YAML front matter (already handled) - If the remaining content is empty or only whitespace after stripping, generate the landing page from the template above - If meaningful markdown content remains after stripping, use that content ## Citation & Diagram Preservation The ADO conversion must preserve the quality of the generated wiki: - **Linked citations** (`[file:line](URL)`) MUST be preserved — these are standard markdown links and work in ADO - **`` comment blocks** after Mermaid diagrams MUST be preserved (HTML comments are compatible with ADO) - **Tables with "Source" columns** MUST be preserved — standard markdown tables work in ADO - **Mermaid diagrams** are converted (fences only) but the diagram content and structure are preserved - **All diagram types** that work in ADO (graph, sequenceDiagram, classDiagram, stateDiagram, erDiagram, etc.) are preserved ## ADO Wiki Page Ordering ADO Wikis use a `.order` file in each directory to control page order in the sidebar. The build script should generate `.order` files: ```javascript // For each directory in dist/ado-wiki/, create a .order file // listing page names (without .md extension) in desired order // Onboarding guides first, then numbered sections ``` $ARGUMENTS