[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-apache-doris-doc-optimize":3,"mdc--rt3u1-key":50,"related-org-apache-doris-doc-optimize":1581,"related-repo-apache-doris-doc-optimize":1735},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":45,"sourceUrl":48,"mdContent":49},"doris-doc-optimize","optimize Apache Doris user documentation","Restructure and SEO\u002FGEO-optimize an existing Apache Doris user documentation file (`.md` \u002F `.mdx`), primarily under `i18n\u002Fzh-CN\u002Fdocusaurus-plugin-content-docs-next\u002Fcurrent\u002F` or `docs-next\u002F`. The skill reorganizes the doc from a user-scenario perspective, applies tables and lists for parameters \u002F scenarios \u002F FAQs, fixes formatting (4-space indent, code-block language tags, blank lines, Chinese\u002FEnglish spacing, command-concatenation bugs), validates every external link with `curl` and every `\u002Fimages\u002F...` reference against `static\u002F`, and updates the frontmatter `description` + `keywords` per the bundled `.\u002Freferences\u002Fseo-geo.md` guide — all without changing the original meaning or dropping any technical content (commands, parameters, YAML, sample outputs, images are preserved verbatim). Use this skill whenever the user points at a single Doris doc file and asks to \"优化这篇文档\", \"重新组织这篇文档\", \"帮我优化文档结构\", \"对这篇文章进行 SEO 优化\", \"按 SEO\u002FGEO 优化这篇文档\", \"调整一下这篇文档的结构\", \"把这篇文档润色一下\", \"optimize this doc\", \"restructure this doc\", \"polish this doc\", or anything similar — even if the user only says \"make this doc better\" or \"这篇文档读起来不顺\" while pointing at a Doris doc path. Do NOT use this skill for translating between languages (use `doris-translate-zh-to-en` instead), writing a brand-new doc from scratch (use `doris-feature-card` or `doc-coauthoring`), or pure link-checking without restructure (use `check-md-links` instead).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"apache","Apache Software Foundation","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fapache.png",[12,16,19],{"name":13,"slug":14,"type":15},"SEO","seo","tag",{"name":17,"slug":18,"type":15},"Documentation","documentation",{"name":20,"slug":21,"type":15},"Technical Writing","technical-writing",129,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fdoris-website","2026-07-12T08:32:44.549641",null,442,[28,8,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"analytics","big-data","data-warehousing","database","datalake","dbms","distributed-system","doris","hadoop","hive","hudi","iceberg","mpp","olap","ssb","tpch","vectorized",{"repoUrl":23,"stars":22,"forks":26,"topics":46,"description":47},[28,8,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"Apache Doris Website","https:\u002F\u002Fgithub.com\u002Fapache\u002Fdoris-website\u002Ftree\u002FHEAD\u002Fdoc-tools\u002Fskills\u002Fdoris-doc-optimize","---\nname: doris-doc-optimize\ndescription: Restructure and SEO\u002FGEO-optimize an existing Apache Doris user documentation file (`.md` \u002F `.mdx`), primarily under `i18n\u002Fzh-CN\u002Fdocusaurus-plugin-content-docs-next\u002Fcurrent\u002F` or `docs-next\u002F`. The skill reorganizes the doc from a user-scenario perspective, applies tables and lists for parameters \u002F scenarios \u002F FAQs, fixes formatting (4-space indent, code-block language tags, blank lines, Chinese\u002FEnglish spacing, command-concatenation bugs), validates every external link with `curl` and every `\u002Fimages\u002F...` reference against `static\u002F`, and updates the frontmatter `description` + `keywords` per the bundled `.\u002Freferences\u002Fseo-geo.md` guide — all without changing the original meaning or dropping any technical content (commands, parameters, YAML, sample outputs, images are preserved verbatim). Use this skill whenever the user points at a single Doris doc file and asks to \"优化这篇文档\", \"重新组织这篇文档\", \"帮我优化文档结构\", \"对这篇文章进行 SEO 优化\", \"按 SEO\u002FGEO 优化这篇文档\", \"调整一下这篇文档的结构\", \"把这篇文档润色一下\", \"optimize this doc\", \"restructure this doc\", \"polish this doc\", or anything similar — even if the user only says \"make this doc better\" or \"这篇文档读起来不顺\" while pointing at a Doris doc path. Do NOT use this skill for translating between languages (use `doris-translate-zh-to-en` instead), writing a brand-new doc from scratch (use `doris-feature-card` or `doc-coauthoring`), or pure link-checking without restructure (use `check-md-links` instead).\n---\n\n# Doris Doc Optimize\n\nOptimize an existing Apache Doris user-documentation file in place: restructure for clarity, apply SEO\u002FGEO best practices, fix formatting, and verify links — all while preserving every piece of technical content from the original.\n\n## Audience and intent\n\nThe user has a Doris doc that is technically correct but hard to scan, has weak SEO metadata, or has accumulated small format \u002F grammar issues. They want the same content reorganized to be more useful for readers and search engines. They are **not** asking for new technical material, translation, or a from-scratch rewrite.\n\nThe most common files this skill operates on:\n- `i18n\u002Fzh-CN\u002Fdocusaurus-plugin-content-docs-next\u002Fcurrent\u002F**\u002F*.md` (Chinese docs, JSON-style frontmatter inside `---` fences)\n- `docs-next\u002F**\u002F*.md` or `docs-next\u002F**\u002F*.mdx` (English docs, YAML frontmatter)\n\n## Inputs\n\n- **Required**: a path to one `.md` or `.mdx` file (typically the user `@`-references it or pastes the path). If the user gives multiple files or a directory, stop and ask which single file to optimize — this skill operates on one file at a time.\n- **Optional**: extra instructions the user adds (e.g. \"保留所有截图\", \"再加一节 troubleshooting\"). Treat these as constraints layered on top of the default workflow.\n\nIf no file path is provided, ask for one before doing anything else. Do not guess.\n\n## Paths used by this skill\n\nAt runtime the working directory is the `doris-website` repo root. The paths below mix two conventions — pay attention to which is which:\n\n- **SEO\u002FGEO guide (must read at runtime)**: `.\u002Freferences\u002Fseo-geo.md` **relative to this skill's directory** — i.e. resolve it as `doc-tools\u002Fskills\u002Fdoris-doc-optimize\u002Freferences\u002Fseo-geo.md` from the repo root. This is the source of truth for description length, keyword strategy, knowledge-type meta comments, and structural patterns. Read it on every run; it can evolve.\n- **Static image assets** (repo-relative): `.\u002Fstatic\u002F` — internal references like `\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png` must resolve to `.\u002Fstatic\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png`.\n- **Internal doc cross-references**: never include `.md` \u002F `.mdx` extensions (project convention).\n\n## Workflow\n\nRun the steps in order. Step 1 (read the file) and step 2 (read the SEO\u002FGEO guide) can run in parallel.\n\n### Step 1 — Read the target file\n\nRead the entire file. Note:\n- Frontmatter style (JSON-inside-`---` for zh-CN Doris docs, YAML elsewhere) — preserve it exactly.\n- All code blocks, YAML samples, image references, and example outputs — these are immutable content; you may regroup them but never delete or rewrite their substance.\n- The language (zh-CN vs en) — this affects keyword strategy and section names.\n\n### Step 2 — Read `.\u002Freferences\u002Fseo-geo.md`\n\nAlways read the bundled SEO\u002FGEO guide at runtime so the latest conventions apply. The path is relative to this skill's directory — resolve it to `doc-tools\u002Fskills\u002Fdoris-doc-optimize\u002Freferences\u002Fseo-geo.md` from the repo root. Pull from it:\n- The frontmatter checklist (title \u002F description \u002F keywords).\n- The GEO knowledge-type and 适用场景 meta-comment patterns.\n- The structural recommendations per doc type (Guide \u002F Reference \u002F Feature \u002F Tutorial \u002F FAQ \u002F Mixed).\n\n### Step 3 — Plan the new structure\n\nBefore writing, sketch the target outline. The goal is **scenario-driven** organization — the reader should be able to answer \"is this doc for me?\" within the first screen, then follow a clear path to action.\n\nA typical reshape adds these sections near the top (use only the ones that apply — don't pad):\n\n1. **Opening paragraph** — one short paragraph framing who the doc is for and what they will achieve.\n2. **适用场景 \u002F Use cases** — a table when there are multiple scenarios; omit if the doc has a single obvious use case.\n3. **前置条件 \u002F Prerequisites** — a bulleted list of environment \u002F version \u002F permission requirements; omit if there are none.\n4. **流程总览 \u002F Overview** — a numbered list of the high-level steps; only when the doc has a multi-step procedure (≥3 steps).\n\nFor the body:\n- Group related content into clear H2 sections, with H3 sub-steps.\n- Each procedural block follows **目的 → 命令 → 说明** (intent → command → explanation), so a reader copying commands always knows why.\n- Move parameter explanations into tables (one row per field).\n- End with a **常见问题 \u002F Troubleshooting** table when the doc has clear failure modes (the original had warnings, \"if X then Y\" prose, or known pitfalls). If the original has none, do not invent failure modes.\n\n**Important**: every heading from the original must have its content reachable in the new version. You may rename, regroup, or split sections — but if any original H2\u002FH3 carried content, that content must land somewhere in the output.\n\n### Step 4 — Rewrite the file\n\nApply the plan. While rewriting, enforce:\n\n**Content preservation**\n- All commands, YAML, JSON, sample outputs, and image references are kept verbatim. You may move them, but not edit them — except to fix obvious typos in the prose around them, or to fix code-block-internal bugs that are clearly wrong (e.g. two shell commands concatenated with no newline; missing closing brace in a non-functional snippet). When in doubt, leave it as-is and note it in the summary.\n- Never invent new commands, parameters, version numbers, or facts. If the original is ambiguous, preserve the ambiguity.\n\n**Writing**\n- Tighten paragraphs to ≤3 sentences each.\n- Unify terminology — `Kubernetes` (not `kubernetes` or `K8s` mid-sentence), `Prometheus`, `Grafana`, `Helm`, `Doris`, etc. Match the canonical casing of each product name.\n- Insert a space between Chinese characters and adjacent ASCII letters \u002F digits (e.g. `部署 Prometheus`, not `部署Prometheus`).\n- Fix obvious grammar, punctuation, and typos in the prose.\n\n**Structure**\n- Tables for: parameter explanations, scenario matrices, troubleshooting, comparison.\n- Ordered lists for: sequential steps.\n- Unordered lists for: prerequisites, non-sequential items, bullet-point summaries.\n\n**Format hygiene**\n- Indentation: 4 spaces (Markdown nested lists and YAML inside fenced blocks).\n- Code-block language tags: `shell` \u002F `bash` for commands, `yaml` for YAML, `json` for JSON, `sql` for SQL, `text` for plain output (Pod listings, log lines, expected stdout). Do not use `shell` for non-shell output.\n- One blank line between blocks; no trailing blank lines at end of file.\n- Spaces around inline code: `` 访问 `http:\u002F\u002F...` `` style.\n\n**SEO \u002F GEO**\n- Update frontmatter `description` to be problem-oriented and ≤120 chars. Preserve the existing frontmatter shape (JSON-style for zh-CN Doris docs, YAML elsewhere).\n- Expand `keywords` to cover synonyms, error\u002Fscenario keywords, and (for zh-CN) Chinese long-tail variants. Keep the original keywords; only add.\n- Insert `\u003C!-- 知识类型: ... -->` and `\u003C!-- 适用场景: ... -->` HTML comments at the top of major sections per `.\u002Freferences\u002Fseo-geo.md`. Place them above the H2\u002FH3 they describe, not inline.\n\n**Internal links**\n- Doc cross-references must NOT include `.md` \u002F `.mdx` extensions (project convention). If the original violates this, fix it.\n\n### Step 5 — Validate links\n\nRun validation in parallel; fast and worth the time.\n\n**External `http(s)` links** — for each unique URL:\n```shell\ncurl -sI -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" \u003Curl>\n```\nIf HEAD returns 4xx (especially 403\u002F405), retry with `curl -sIL` (follow redirects) and then `curl -sL -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" \u003Curl>` (GET). Accept 2xx and 3xx as alive. Anything else, flag in the summary; do not silently remove the link.\n\n**Image references** — for each `\u002Fimages\u002F...` path, check that `.\u002Fstatic\u002Fimages\u002F...` exists:\n```shell\ntest -f .\u002Fstatic\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png && echo OK || echo MISSING\n```\n\n**Internal doc links** — verify the target file exists (with `.md` \u002F `.mdx` \u002F `index.md` fallback, since the project strips extensions). If a link points to a non-existent doc, flag it; do not delete.\n\n### Step 6 — Write the file\n\nOverwrite the target file in place using the `Write` tool. Read first if you haven't yet in this turn (you usually will have, in Step 1).\n\n### Step 7 — Report\n\nPrint a short summary listing:\n\n1. **Structural changes** — sections added (适用场景, 前置条件, 流程总览, 常见问题, etc.), sections merged, parameter table extracted from prose.\n2. **SEO\u002FGEO additions** — new `description` (quote it), `keywords` added, knowledge-type meta comments inserted, FAQ table added.\n3. **Bug fixes** — typos \u002F grammar \u002F command-concatenation fixes \u002F wrong code-block language tags \u002F `.md` extensions stripped from internal links. List concretely so the user can spot-check.\n4. **Link-check results** — count of external links checked (all green \u002F N flagged), images verified (all present \u002F N missing). For any flag, name the URL or path.\n\nKeep the summary under ~15 lines. The user can read the diff; the summary's job is to highlight non-obvious changes and any flags that need their attention.\n\n## Constraints and guardrails\n\nThese exist because the failure mode for this skill is silent content loss or hallucinated facts — both worse than leaving the doc unchanged.\n\n- **Never invent**: no new commands, parameters, version numbers, error messages, or troubleshooting steps that weren't in the original (or obviously implied by it).\n- **Never delete**: code blocks, image references, example outputs, and admonitions stay. If a section feels redundant, merge it; don't drop it.\n- **Preserve frontmatter shape**: zh-CN Doris docs use a JSON object inside `---` fences — keep that exact form. English docs use standard YAML — keep that.\n- **No `.md` \u002F `.mdx` extensions in internal doc cross-references** — project convention.\n- **Don't translate**: if the user wants Chinese ↔ English, that is `doris-translate-zh-to-en`, not this skill.\n- **One file per invocation**: if asked to optimize a folder, ask which single file to start with.\n\n## Reference example\n\nThe canonical example is the install-prometheus-and-grafana doc under `i18n\u002Fzh-CN\u002Fdocusaurus-plugin-content-docs-next\u002Fcurrent\u002Finstall\u002Fdeploy-on-kubernetes\u002Fseparating-storage-compute\u002F`. The optimization:\n\n- Added `适用场景` (table), `前置条件` (bullet list), `部署流程总览` (numbered list) at the top.\n- Split each `Step N` into `N.1 \u002F N.2 \u002F N.3` sub-steps, each with intent → command → explanation.\n- Extracted ServiceMonitor YAML field meanings into a parameter table.\n- Added a `常见问题` table at the end covering the four most common failure modes implied by the original prose (Targets not visible, Targets DOWN, Grafana empty, port unreachable).\n- Updated `description` to a 50-char problem-oriented summary; expanded `keywords` with Chinese long-tail terms (`存算分离`, `集群监控`, `指标采集`, `Dashboard`).\n- Inserted `\u003C!-- 知识类型 -->` and `\u003C!-- 适用场景 -->` meta comments at the top of major sections.\n- Fixed an upstream bug where `helm repo add ... helm-charts` and `helm repo update` had been concatenated into one line with no separator.\n- Verified all three external links (`get-helm-3`, prometheus-community charts repo, dashboard JSON) returned 200, and confirmed all three image files existed under `static\u002Fimages\u002Fnext\u002Finstall\u002F`.\n\nThat run is a good shape to emulate, but adapt to the doc in front of you — don't force these exact sections onto a doc that doesn't need them.\n\n## Self-check before reporting done\n\nBefore printing the summary:\n- Diff the new file against the original mentally: is every code block, image, and YAML sample still present?\n- Did you read `.\u002Freferences\u002Fseo-geo.md` this run? (Yes \u002F re-read it.)\n- Did you actually run `curl` on every external link, not just eyeball them?\n- Is the frontmatter shape unchanged?\n- Are there any internal doc cross-references with `.md` \u002F `.mdx` still on them?\n\nIf any answer is wrong, fix before reporting.\n",{"data":51,"body":52},{"name":4,"description":6},{"type":53,"children":54},"root",[55,63,69,76,89,94,138,144,190,195,201,214,308,314,319,326,331,356,367,379,397,403,415,420,464,469,506,516,522,527,535,548,556,648,656,674,682,766,774,831,839,860,866,871,889,969,990,1016,1071,1101,1107,1120,1126,1131,1195,1200,1206,1211,1302,1308,1321,1499,1504,1510,1515,1570,1575],{"type":56,"tag":57,"props":58,"children":59},"element","h1",{"id":4},[60],{"type":61,"value":62},"text","Doris Doc Optimize",{"type":56,"tag":64,"props":65,"children":66},"p",{},[67],{"type":61,"value":68},"Optimize an existing Apache Doris user-documentation file in place: restructure for clarity, apply SEO\u002FGEO best practices, fix formatting, and verify links — all while preserving every piece of technical content from the original.",{"type":56,"tag":70,"props":71,"children":73},"h2",{"id":72},"audience-and-intent",[74],{"type":61,"value":75},"Audience and intent",{"type":56,"tag":64,"props":77,"children":78},{},[79,81,87],{"type":61,"value":80},"The user has a Doris doc that is technically correct but hard to scan, has weak SEO metadata, or has accumulated small format \u002F grammar issues. They want the same content reorganized to be more useful for readers and search engines. They are ",{"type":56,"tag":82,"props":83,"children":84},"strong",{},[85],{"type":61,"value":86},"not",{"type":61,"value":88}," asking for new technical material, translation, or a from-scratch rewrite.",{"type":56,"tag":64,"props":90,"children":91},{},[92],{"type":61,"value":93},"The most common files this skill operates on:",{"type":56,"tag":95,"props":96,"children":97},"ul",{},[98,119],{"type":56,"tag":99,"props":100,"children":101},"li",{},[102,109,111,117],{"type":56,"tag":103,"props":104,"children":106},"code",{"className":105},[],[107],{"type":61,"value":108},"i18n\u002Fzh-CN\u002Fdocusaurus-plugin-content-docs-next\u002Fcurrent\u002F**\u002F*.md",{"type":61,"value":110}," (Chinese docs, JSON-style frontmatter inside ",{"type":56,"tag":103,"props":112,"children":114},{"className":113},[],[115],{"type":61,"value":116},"---",{"type":61,"value":118}," fences)",{"type":56,"tag":99,"props":120,"children":121},{},[122,128,130,136],{"type":56,"tag":103,"props":123,"children":125},{"className":124},[],[126],{"type":61,"value":127},"docs-next\u002F**\u002F*.md",{"type":61,"value":129}," or ",{"type":56,"tag":103,"props":131,"children":133},{"className":132},[],[134],{"type":61,"value":135},"docs-next\u002F**\u002F*.mdx",{"type":61,"value":137}," (English docs, YAML frontmatter)",{"type":56,"tag":70,"props":139,"children":141},{"id":140},"inputs",[142],{"type":61,"value":143},"Inputs",{"type":56,"tag":95,"props":145,"children":146},{},[147,180],{"type":56,"tag":99,"props":148,"children":149},{},[150,155,157,163,164,170,172,178],{"type":56,"tag":82,"props":151,"children":152},{},[153],{"type":61,"value":154},"Required",{"type":61,"value":156},": a path to one ",{"type":56,"tag":103,"props":158,"children":160},{"className":159},[],[161],{"type":61,"value":162},".md",{"type":61,"value":129},{"type":56,"tag":103,"props":165,"children":167},{"className":166},[],[168],{"type":61,"value":169},".mdx",{"type":61,"value":171}," file (typically the user ",{"type":56,"tag":103,"props":173,"children":175},{"className":174},[],[176],{"type":61,"value":177},"@",{"type":61,"value":179},"-references it or pastes the path). If the user gives multiple files or a directory, stop and ask which single file to optimize — this skill operates on one file at a time.",{"type":56,"tag":99,"props":181,"children":182},{},[183,188],{"type":56,"tag":82,"props":184,"children":185},{},[186],{"type":61,"value":187},"Optional",{"type":61,"value":189},": extra instructions the user adds (e.g. \"保留所有截图\", \"再加一节 troubleshooting\"). Treat these as constraints layered on top of the default workflow.",{"type":56,"tag":64,"props":191,"children":192},{},[193],{"type":61,"value":194},"If no file path is provided, ask for one before doing anything else. Do not guess.",{"type":56,"tag":70,"props":196,"children":198},{"id":197},"paths-used-by-this-skill",[199],{"type":61,"value":200},"Paths used by this skill",{"type":56,"tag":64,"props":202,"children":203},{},[204,206,212],{"type":61,"value":205},"At runtime the working directory is the ",{"type":56,"tag":103,"props":207,"children":209},{"className":208},[],[210],{"type":61,"value":211},"doris-website",{"type":61,"value":213}," repo root. The paths below mix two conventions — pay attention to which is which:",{"type":56,"tag":95,"props":215,"children":216},{},[217,250,284],{"type":56,"tag":99,"props":218,"children":219},{},[220,225,227,233,235,240,242,248],{"type":56,"tag":82,"props":221,"children":222},{},[223],{"type":61,"value":224},"SEO\u002FGEO guide (must read at runtime)",{"type":61,"value":226},": ",{"type":56,"tag":103,"props":228,"children":230},{"className":229},[],[231],{"type":61,"value":232},".\u002Freferences\u002Fseo-geo.md",{"type":61,"value":234}," ",{"type":56,"tag":82,"props":236,"children":237},{},[238],{"type":61,"value":239},"relative to this skill's directory",{"type":61,"value":241}," — i.e. resolve it as ",{"type":56,"tag":103,"props":243,"children":245},{"className":244},[],[246],{"type":61,"value":247},"doc-tools\u002Fskills\u002Fdoris-doc-optimize\u002Freferences\u002Fseo-geo.md",{"type":61,"value":249}," from the repo root. This is the source of truth for description length, keyword strategy, knowledge-type meta comments, and structural patterns. Read it on every run; it can evolve.",{"type":56,"tag":99,"props":251,"children":252},{},[253,258,260,266,268,274,276,282],{"type":56,"tag":82,"props":254,"children":255},{},[256],{"type":61,"value":257},"Static image assets",{"type":61,"value":259}," (repo-relative): ",{"type":56,"tag":103,"props":261,"children":263},{"className":262},[],[264],{"type":61,"value":265},".\u002Fstatic\u002F",{"type":61,"value":267}," — internal references like ",{"type":56,"tag":103,"props":269,"children":271},{"className":270},[],[272],{"type":61,"value":273},"\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png",{"type":61,"value":275}," must resolve to ",{"type":56,"tag":103,"props":277,"children":279},{"className":278},[],[280],{"type":61,"value":281},".\u002Fstatic\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png",{"type":61,"value":283},".",{"type":56,"tag":99,"props":285,"children":286},{},[287,292,294,299,301,306],{"type":56,"tag":82,"props":288,"children":289},{},[290],{"type":61,"value":291},"Internal doc cross-references",{"type":61,"value":293},": never include ",{"type":56,"tag":103,"props":295,"children":297},{"className":296},[],[298],{"type":61,"value":162},{"type":61,"value":300}," \u002F ",{"type":56,"tag":103,"props":302,"children":304},{"className":303},[],[305],{"type":61,"value":169},{"type":61,"value":307}," extensions (project convention).",{"type":56,"tag":70,"props":309,"children":311},{"id":310},"workflow",[312],{"type":61,"value":313},"Workflow",{"type":56,"tag":64,"props":315,"children":316},{},[317],{"type":61,"value":318},"Run the steps in order. Step 1 (read the file) and step 2 (read the SEO\u002FGEO guide) can run in parallel.",{"type":56,"tag":320,"props":321,"children":323},"h3",{"id":322},"step-1-read-the-target-file",[324],{"type":61,"value":325},"Step 1 — Read the target file",{"type":56,"tag":64,"props":327,"children":328},{},[329],{"type":61,"value":330},"Read the entire file. Note:",{"type":56,"tag":95,"props":332,"children":333},{},[334,346,351],{"type":56,"tag":99,"props":335,"children":336},{},[337,339,344],{"type":61,"value":338},"Frontmatter style (JSON-inside-",{"type":56,"tag":103,"props":340,"children":342},{"className":341},[],[343],{"type":61,"value":116},{"type":61,"value":345}," for zh-CN Doris docs, YAML elsewhere) — preserve it exactly.",{"type":56,"tag":99,"props":347,"children":348},{},[349],{"type":61,"value":350},"All code blocks, YAML samples, image references, and example outputs — these are immutable content; you may regroup them but never delete or rewrite their substance.",{"type":56,"tag":99,"props":352,"children":353},{},[354],{"type":61,"value":355},"The language (zh-CN vs en) — this affects keyword strategy and section names.",{"type":56,"tag":320,"props":357,"children":359},{"id":358},"step-2-read-referencesseo-geomd",[360,362],{"type":61,"value":361},"Step 2 — Read ",{"type":56,"tag":103,"props":363,"children":365},{"className":364},[],[366],{"type":61,"value":232},{"type":56,"tag":64,"props":368,"children":369},{},[370,372,377],{"type":61,"value":371},"Always read the bundled SEO\u002FGEO guide at runtime so the latest conventions apply. The path is relative to this skill's directory — resolve it to ",{"type":56,"tag":103,"props":373,"children":375},{"className":374},[],[376],{"type":61,"value":247},{"type":61,"value":378}," from the repo root. Pull from it:",{"type":56,"tag":95,"props":380,"children":381},{},[382,387,392],{"type":56,"tag":99,"props":383,"children":384},{},[385],{"type":61,"value":386},"The frontmatter checklist (title \u002F description \u002F keywords).",{"type":56,"tag":99,"props":388,"children":389},{},[390],{"type":61,"value":391},"The GEO knowledge-type and 适用场景 meta-comment patterns.",{"type":56,"tag":99,"props":393,"children":394},{},[395],{"type":61,"value":396},"The structural recommendations per doc type (Guide \u002F Reference \u002F Feature \u002F Tutorial \u002F FAQ \u002F Mixed).",{"type":56,"tag":320,"props":398,"children":400},{"id":399},"step-3-plan-the-new-structure",[401],{"type":61,"value":402},"Step 3 — Plan the new structure",{"type":56,"tag":64,"props":404,"children":405},{},[406,408,413],{"type":61,"value":407},"Before writing, sketch the target outline. The goal is ",{"type":56,"tag":82,"props":409,"children":410},{},[411],{"type":61,"value":412},"scenario-driven",{"type":61,"value":414}," organization — the reader should be able to answer \"is this doc for me?\" within the first screen, then follow a clear path to action.",{"type":56,"tag":64,"props":416,"children":417},{},[418],{"type":61,"value":419},"A typical reshape adds these sections near the top (use only the ones that apply — don't pad):",{"type":56,"tag":421,"props":422,"children":423},"ol",{},[424,434,444,454],{"type":56,"tag":99,"props":425,"children":426},{},[427,432],{"type":56,"tag":82,"props":428,"children":429},{},[430],{"type":61,"value":431},"Opening paragraph",{"type":61,"value":433}," — one short paragraph framing who the doc is for and what they will achieve.",{"type":56,"tag":99,"props":435,"children":436},{},[437,442],{"type":56,"tag":82,"props":438,"children":439},{},[440],{"type":61,"value":441},"适用场景 \u002F Use cases",{"type":61,"value":443}," — a table when there are multiple scenarios; omit if the doc has a single obvious use case.",{"type":56,"tag":99,"props":445,"children":446},{},[447,452],{"type":56,"tag":82,"props":448,"children":449},{},[450],{"type":61,"value":451},"前置条件 \u002F Prerequisites",{"type":61,"value":453}," — a bulleted list of environment \u002F version \u002F permission requirements; omit if there are none.",{"type":56,"tag":99,"props":455,"children":456},{},[457,462],{"type":56,"tag":82,"props":458,"children":459},{},[460],{"type":61,"value":461},"流程总览 \u002F Overview",{"type":61,"value":463}," — a numbered list of the high-level steps; only when the doc has a multi-step procedure (≥3 steps).",{"type":56,"tag":64,"props":465,"children":466},{},[467],{"type":61,"value":468},"For the body:",{"type":56,"tag":95,"props":470,"children":471},{},[472,477,489,494],{"type":56,"tag":99,"props":473,"children":474},{},[475],{"type":61,"value":476},"Group related content into clear H2 sections, with H3 sub-steps.",{"type":56,"tag":99,"props":478,"children":479},{},[480,482,487],{"type":61,"value":481},"Each procedural block follows ",{"type":56,"tag":82,"props":483,"children":484},{},[485],{"type":61,"value":486},"目的 → 命令 → 说明",{"type":61,"value":488}," (intent → command → explanation), so a reader copying commands always knows why.",{"type":56,"tag":99,"props":490,"children":491},{},[492],{"type":61,"value":493},"Move parameter explanations into tables (one row per field).",{"type":56,"tag":99,"props":495,"children":496},{},[497,499,504],{"type":61,"value":498},"End with a ",{"type":56,"tag":82,"props":500,"children":501},{},[502],{"type":61,"value":503},"常见问题 \u002F Troubleshooting",{"type":61,"value":505}," table when the doc has clear failure modes (the original had warnings, \"if X then Y\" prose, or known pitfalls). If the original has none, do not invent failure modes.",{"type":56,"tag":64,"props":507,"children":508},{},[509,514],{"type":56,"tag":82,"props":510,"children":511},{},[512],{"type":61,"value":513},"Important",{"type":61,"value":515},": every heading from the original must have its content reachable in the new version. You may rename, regroup, or split sections — but if any original H2\u002FH3 carried content, that content must land somewhere in the output.",{"type":56,"tag":320,"props":517,"children":519},{"id":518},"step-4-rewrite-the-file",[520],{"type":61,"value":521},"Step 4 — Rewrite the file",{"type":56,"tag":64,"props":523,"children":524},{},[525],{"type":61,"value":526},"Apply the plan. While rewriting, enforce:",{"type":56,"tag":64,"props":528,"children":529},{},[530],{"type":56,"tag":82,"props":531,"children":532},{},[533],{"type":61,"value":534},"Content preservation",{"type":56,"tag":95,"props":536,"children":537},{},[538,543],{"type":56,"tag":99,"props":539,"children":540},{},[541],{"type":61,"value":542},"All commands, YAML, JSON, sample outputs, and image references are kept verbatim. You may move them, but not edit them — except to fix obvious typos in the prose around them, or to fix code-block-internal bugs that are clearly wrong (e.g. two shell commands concatenated with no newline; missing closing brace in a non-functional snippet). When in doubt, leave it as-is and note it in the summary.",{"type":56,"tag":99,"props":544,"children":545},{},[546],{"type":61,"value":547},"Never invent new commands, parameters, version numbers, or facts. If the original is ambiguous, preserve the ambiguity.",{"type":56,"tag":64,"props":549,"children":550},{},[551],{"type":56,"tag":82,"props":552,"children":553},{},[554],{"type":61,"value":555},"Writing",{"type":56,"tag":95,"props":557,"children":558},{},[559,564,622,643],{"type":56,"tag":99,"props":560,"children":561},{},[562],{"type":61,"value":563},"Tighten paragraphs to ≤3 sentences each.",{"type":56,"tag":99,"props":565,"children":566},{},[567,569,575,577,583,584,590,592,598,600,606,607,613,614,620],{"type":61,"value":568},"Unify terminology — ",{"type":56,"tag":103,"props":570,"children":572},{"className":571},[],[573],{"type":61,"value":574},"Kubernetes",{"type":61,"value":576}," (not ",{"type":56,"tag":103,"props":578,"children":580},{"className":579},[],[581],{"type":61,"value":582},"kubernetes",{"type":61,"value":129},{"type":56,"tag":103,"props":585,"children":587},{"className":586},[],[588],{"type":61,"value":589},"K8s",{"type":61,"value":591}," mid-sentence), ",{"type":56,"tag":103,"props":593,"children":595},{"className":594},[],[596],{"type":61,"value":597},"Prometheus",{"type":61,"value":599},", ",{"type":56,"tag":103,"props":601,"children":603},{"className":602},[],[604],{"type":61,"value":605},"Grafana",{"type":61,"value":599},{"type":56,"tag":103,"props":608,"children":610},{"className":609},[],[611],{"type":61,"value":612},"Helm",{"type":61,"value":599},{"type":56,"tag":103,"props":615,"children":617},{"className":616},[],[618],{"type":61,"value":619},"Doris",{"type":61,"value":621},", etc. Match the canonical casing of each product name.",{"type":56,"tag":99,"props":623,"children":624},{},[625,627,633,635,641],{"type":61,"value":626},"Insert a space between Chinese characters and adjacent ASCII letters \u002F digits (e.g. ",{"type":56,"tag":103,"props":628,"children":630},{"className":629},[],[631],{"type":61,"value":632},"部署 Prometheus",{"type":61,"value":634},", not ",{"type":56,"tag":103,"props":636,"children":638},{"className":637},[],[639],{"type":61,"value":640},"部署Prometheus",{"type":61,"value":642},").",{"type":56,"tag":99,"props":644,"children":645},{},[646],{"type":61,"value":647},"Fix obvious grammar, punctuation, and typos in the prose.",{"type":56,"tag":64,"props":649,"children":650},{},[651],{"type":56,"tag":82,"props":652,"children":653},{},[654],{"type":61,"value":655},"Structure",{"type":56,"tag":95,"props":657,"children":658},{},[659,664,669],{"type":56,"tag":99,"props":660,"children":661},{},[662],{"type":61,"value":663},"Tables for: parameter explanations, scenario matrices, troubleshooting, comparison.",{"type":56,"tag":99,"props":665,"children":666},{},[667],{"type":61,"value":668},"Ordered lists for: sequential steps.",{"type":56,"tag":99,"props":670,"children":671},{},[672],{"type":61,"value":673},"Unordered lists for: prerequisites, non-sequential items, bullet-point summaries.",{"type":56,"tag":64,"props":675,"children":676},{},[677],{"type":56,"tag":82,"props":678,"children":679},{},[680],{"type":61,"value":681},"Format hygiene",{"type":56,"tag":95,"props":683,"children":684},{},[685,690,748,753],{"type":56,"tag":99,"props":686,"children":687},{},[688],{"type":61,"value":689},"Indentation: 4 spaces (Markdown nested lists and YAML inside fenced blocks).",{"type":56,"tag":99,"props":691,"children":692},{},[693,695,701,702,708,710,716,718,724,726,732,734,739,741,746],{"type":61,"value":694},"Code-block language tags: ",{"type":56,"tag":103,"props":696,"children":698},{"className":697},[],[699],{"type":61,"value":700},"shell",{"type":61,"value":300},{"type":56,"tag":103,"props":703,"children":705},{"className":704},[],[706],{"type":61,"value":707},"bash",{"type":61,"value":709}," for commands, ",{"type":56,"tag":103,"props":711,"children":713},{"className":712},[],[714],{"type":61,"value":715},"yaml",{"type":61,"value":717}," for YAML, ",{"type":56,"tag":103,"props":719,"children":721},{"className":720},[],[722],{"type":61,"value":723},"json",{"type":61,"value":725}," for JSON, ",{"type":56,"tag":103,"props":727,"children":729},{"className":728},[],[730],{"type":61,"value":731},"sql",{"type":61,"value":733}," for SQL, ",{"type":56,"tag":103,"props":735,"children":737},{"className":736},[],[738],{"type":61,"value":61},{"type":61,"value":740}," for plain output (Pod listings, log lines, expected stdout). Do not use ",{"type":56,"tag":103,"props":742,"children":744},{"className":743},[],[745],{"type":61,"value":700},{"type":61,"value":747}," for non-shell output.",{"type":56,"tag":99,"props":749,"children":750},{},[751],{"type":61,"value":752},"One blank line between blocks; no trailing blank lines at end of file.",{"type":56,"tag":99,"props":754,"children":755},{},[756,758,764],{"type":61,"value":757},"Spaces around inline code: ",{"type":56,"tag":103,"props":759,"children":761},{"className":760},[],[762],{"type":61,"value":763},"访问 `http:\u002F\u002F...`",{"type":61,"value":765}," style.",{"type":56,"tag":64,"props":767,"children":768},{},[769],{"type":56,"tag":82,"props":770,"children":771},{},[772],{"type":61,"value":773},"SEO \u002F GEO",{"type":56,"tag":95,"props":775,"children":776},{},[777,790,803],{"type":56,"tag":99,"props":778,"children":779},{},[780,782,788],{"type":61,"value":781},"Update frontmatter ",{"type":56,"tag":103,"props":783,"children":785},{"className":784},[],[786],{"type":61,"value":787},"description",{"type":61,"value":789}," to be problem-oriented and ≤120 chars. Preserve the existing frontmatter shape (JSON-style for zh-CN Doris docs, YAML elsewhere).",{"type":56,"tag":99,"props":791,"children":792},{},[793,795,801],{"type":61,"value":794},"Expand ",{"type":56,"tag":103,"props":796,"children":798},{"className":797},[],[799],{"type":61,"value":800},"keywords",{"type":61,"value":802}," to cover synonyms, error\u002Fscenario keywords, and (for zh-CN) Chinese long-tail variants. Keep the original keywords; only add.",{"type":56,"tag":99,"props":804,"children":805},{},[806,808,814,816,822,824,829],{"type":61,"value":807},"Insert ",{"type":56,"tag":103,"props":809,"children":811},{"className":810},[],[812],{"type":61,"value":813},"\u003C!-- 知识类型: ... -->",{"type":61,"value":815}," and ",{"type":56,"tag":103,"props":817,"children":819},{"className":818},[],[820],{"type":61,"value":821},"\u003C!-- 适用场景: ... -->",{"type":61,"value":823}," HTML comments at the top of major sections per ",{"type":56,"tag":103,"props":825,"children":827},{"className":826},[],[828],{"type":61,"value":232},{"type":61,"value":830},". Place them above the H2\u002FH3 they describe, not inline.",{"type":56,"tag":64,"props":832,"children":833},{},[834],{"type":56,"tag":82,"props":835,"children":836},{},[837],{"type":61,"value":838},"Internal links",{"type":56,"tag":95,"props":840,"children":841},{},[842],{"type":56,"tag":99,"props":843,"children":844},{},[845,847,852,853,858],{"type":61,"value":846},"Doc cross-references must NOT include ",{"type":56,"tag":103,"props":848,"children":850},{"className":849},[],[851],{"type":61,"value":162},{"type":61,"value":300},{"type":56,"tag":103,"props":854,"children":856},{"className":855},[],[857],{"type":61,"value":169},{"type":61,"value":859}," extensions (project convention). If the original violates this, fix it.",{"type":56,"tag":320,"props":861,"children":863},{"id":862},"step-5-validate-links",[864],{"type":61,"value":865},"Step 5 — Validate links",{"type":56,"tag":64,"props":867,"children":868},{},[869],{"type":61,"value":870},"Run validation in parallel; fast and worth the time.",{"type":56,"tag":64,"props":872,"children":873},{},[874,887],{"type":56,"tag":82,"props":875,"children":876},{},[877,879,885],{"type":61,"value":878},"External ",{"type":56,"tag":103,"props":880,"children":882},{"className":881},[],[883],{"type":61,"value":884},"http(s)",{"type":61,"value":886}," links",{"type":61,"value":888}," — for each unique URL:",{"type":56,"tag":890,"props":891,"children":895},"pre",{"className":892,"code":893,"language":700,"meta":894,"style":894},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -sI -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" \u003Curl>\n","",[896],{"type":56,"tag":103,"props":897,"children":898},{"__ignoreMap":894},[899],{"type":56,"tag":900,"props":901,"children":904},"span",{"class":902,"line":903},"line",1,[905,911,917,922,927,932,938,943,948,953,958,964],{"type":56,"tag":900,"props":906,"children":908},{"style":907},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[909],{"type":61,"value":910},"curl",{"type":56,"tag":900,"props":912,"children":914},{"style":913},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[915],{"type":61,"value":916}," -sI",{"type":56,"tag":900,"props":918,"children":919},{"style":913},[920],{"type":61,"value":921}," -o",{"type":56,"tag":900,"props":923,"children":924},{"style":913},[925],{"type":61,"value":926}," \u002Fdev\u002Fnull",{"type":56,"tag":900,"props":928,"children":929},{"style":913},[930],{"type":61,"value":931}," -w",{"type":56,"tag":900,"props":933,"children":935},{"style":934},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[936],{"type":61,"value":937}," \"",{"type":56,"tag":900,"props":939,"children":940},{"style":913},[941],{"type":61,"value":942},"%{http_code}\\n",{"type":56,"tag":900,"props":944,"children":945},{"style":934},[946],{"type":61,"value":947},"\"",{"type":56,"tag":900,"props":949,"children":950},{"style":934},[951],{"type":61,"value":952}," \u003C",{"type":56,"tag":900,"props":954,"children":955},{"style":913},[956],{"type":61,"value":957},"ur",{"type":56,"tag":900,"props":959,"children":961},{"style":960},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[962],{"type":61,"value":963},"l",{"type":56,"tag":900,"props":965,"children":966},{"style":934},[967],{"type":61,"value":968},">\n",{"type":56,"tag":64,"props":970,"children":971},{},[972,974,980,982,988],{"type":61,"value":973},"If HEAD returns 4xx (especially 403\u002F405), retry with ",{"type":56,"tag":103,"props":975,"children":977},{"className":976},[],[978],{"type":61,"value":979},"curl -sIL",{"type":61,"value":981}," (follow redirects) and then ",{"type":56,"tag":103,"props":983,"children":985},{"className":984},[],[986],{"type":61,"value":987},"curl -sL -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" \u003Curl>",{"type":61,"value":989}," (GET). Accept 2xx and 3xx as alive. Anything else, flag in the summary; do not silently remove the link.",{"type":56,"tag":64,"props":991,"children":992},{},[993,998,1000,1006,1008,1014],{"type":56,"tag":82,"props":994,"children":995},{},[996],{"type":61,"value":997},"Image references",{"type":61,"value":999}," — for each ",{"type":56,"tag":103,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":61,"value":1005},"\u002Fimages\u002F...",{"type":61,"value":1007}," path, check that ",{"type":56,"tag":103,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":61,"value":1013},".\u002Fstatic\u002Fimages\u002F...",{"type":61,"value":1015}," exists:",{"type":56,"tag":890,"props":1017,"children":1019},{"className":892,"code":1018,"language":700,"meta":894,"style":894},"test -f .\u002Fstatic\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png && echo OK || echo MISSING\n",[1020],{"type":56,"tag":103,"props":1021,"children":1022},{"__ignoreMap":894},[1023],{"type":56,"tag":900,"props":1024,"children":1025},{"class":902,"line":903},[1026,1032,1037,1042,1047,1052,1057,1062,1066],{"type":56,"tag":900,"props":1027,"children":1029},{"style":1028},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1030],{"type":61,"value":1031},"test",{"type":56,"tag":900,"props":1033,"children":1034},{"style":913},[1035],{"type":61,"value":1036}," -f",{"type":56,"tag":900,"props":1038,"children":1039},{"style":913},[1040],{"type":61,"value":1041}," .\u002Fstatic\u002Fimages\u002Fnext\u002Finstall\u002Ffoo.png",{"type":56,"tag":900,"props":1043,"children":1044},{"style":934},[1045],{"type":61,"value":1046}," &&",{"type":56,"tag":900,"props":1048,"children":1049},{"style":1028},[1050],{"type":61,"value":1051}," echo",{"type":56,"tag":900,"props":1053,"children":1054},{"style":913},[1055],{"type":61,"value":1056}," OK",{"type":56,"tag":900,"props":1058,"children":1059},{"style":934},[1060],{"type":61,"value":1061}," ||",{"type":56,"tag":900,"props":1063,"children":1064},{"style":1028},[1065],{"type":61,"value":1051},{"type":56,"tag":900,"props":1067,"children":1068},{"style":913},[1069],{"type":61,"value":1070}," MISSING\n",{"type":56,"tag":64,"props":1072,"children":1073},{},[1074,1079,1081,1086,1087,1092,1093,1099],{"type":56,"tag":82,"props":1075,"children":1076},{},[1077],{"type":61,"value":1078},"Internal doc links",{"type":61,"value":1080}," — verify the target file exists (with ",{"type":56,"tag":103,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":61,"value":162},{"type":61,"value":300},{"type":56,"tag":103,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":61,"value":169},{"type":61,"value":300},{"type":56,"tag":103,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":61,"value":1098},"index.md",{"type":61,"value":1100}," fallback, since the project strips extensions). If a link points to a non-existent doc, flag it; do not delete.",{"type":56,"tag":320,"props":1102,"children":1104},{"id":1103},"step-6-write-the-file",[1105],{"type":61,"value":1106},"Step 6 — Write the file",{"type":56,"tag":64,"props":1108,"children":1109},{},[1110,1112,1118],{"type":61,"value":1111},"Overwrite the target file in place using the ",{"type":56,"tag":103,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":61,"value":1117},"Write",{"type":61,"value":1119}," tool. Read first if you haven't yet in this turn (you usually will have, in Step 1).",{"type":56,"tag":320,"props":1121,"children":1123},{"id":1122},"step-7-report",[1124],{"type":61,"value":1125},"Step 7 — Report",{"type":56,"tag":64,"props":1127,"children":1128},{},[1129],{"type":61,"value":1130},"Print a short summary listing:",{"type":56,"tag":421,"props":1132,"children":1133},{},[1134,1144,1168,1185],{"type":56,"tag":99,"props":1135,"children":1136},{},[1137,1142],{"type":56,"tag":82,"props":1138,"children":1139},{},[1140],{"type":61,"value":1141},"Structural changes",{"type":61,"value":1143}," — sections added (适用场景, 前置条件, 流程总览, 常见问题, etc.), sections merged, parameter table extracted from prose.",{"type":56,"tag":99,"props":1145,"children":1146},{},[1147,1152,1154,1159,1161,1166],{"type":56,"tag":82,"props":1148,"children":1149},{},[1150],{"type":61,"value":1151},"SEO\u002FGEO additions",{"type":61,"value":1153}," — new ",{"type":56,"tag":103,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":61,"value":787},{"type":61,"value":1160}," (quote it), ",{"type":56,"tag":103,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":61,"value":800},{"type":61,"value":1167}," added, knowledge-type meta comments inserted, FAQ table added.",{"type":56,"tag":99,"props":1169,"children":1170},{},[1171,1176,1178,1183],{"type":56,"tag":82,"props":1172,"children":1173},{},[1174],{"type":61,"value":1175},"Bug fixes",{"type":61,"value":1177}," — typos \u002F grammar \u002F command-concatenation fixes \u002F wrong code-block language tags \u002F ",{"type":56,"tag":103,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":61,"value":162},{"type":61,"value":1184}," extensions stripped from internal links. List concretely so the user can spot-check.",{"type":56,"tag":99,"props":1186,"children":1187},{},[1188,1193],{"type":56,"tag":82,"props":1189,"children":1190},{},[1191],{"type":61,"value":1192},"Link-check results",{"type":61,"value":1194}," — count of external links checked (all green \u002F N flagged), images verified (all present \u002F N missing). For any flag, name the URL or path.",{"type":56,"tag":64,"props":1196,"children":1197},{},[1198],{"type":61,"value":1199},"Keep the summary under ~15 lines. The user can read the diff; the summary's job is to highlight non-obvious changes and any flags that need their attention.",{"type":56,"tag":70,"props":1201,"children":1203},{"id":1202},"constraints-and-guardrails",[1204],{"type":61,"value":1205},"Constraints and guardrails",{"type":56,"tag":64,"props":1207,"children":1208},{},[1209],{"type":61,"value":1210},"These exist because the failure mode for this skill is silent content loss or hallucinated facts — both worse than leaving the doc unchanged.",{"type":56,"tag":95,"props":1212,"children":1213},{},[1214,1224,1234,1251,1274,1292],{"type":56,"tag":99,"props":1215,"children":1216},{},[1217,1222],{"type":56,"tag":82,"props":1218,"children":1219},{},[1220],{"type":61,"value":1221},"Never invent",{"type":61,"value":1223},": no new commands, parameters, version numbers, error messages, or troubleshooting steps that weren't in the original (or obviously implied by it).",{"type":56,"tag":99,"props":1225,"children":1226},{},[1227,1232],{"type":56,"tag":82,"props":1228,"children":1229},{},[1230],{"type":61,"value":1231},"Never delete",{"type":61,"value":1233},": code blocks, image references, example outputs, and admonitions stay. If a section feels redundant, merge it; don't drop it.",{"type":56,"tag":99,"props":1235,"children":1236},{},[1237,1242,1244,1249],{"type":56,"tag":82,"props":1238,"children":1239},{},[1240],{"type":61,"value":1241},"Preserve frontmatter shape",{"type":61,"value":1243},": zh-CN Doris docs use a JSON object inside ",{"type":56,"tag":103,"props":1245,"children":1247},{"className":1246},[],[1248],{"type":61,"value":116},{"type":61,"value":1250}," fences — keep that exact form. English docs use standard YAML — keep that.",{"type":56,"tag":99,"props":1252,"children":1253},{},[1254,1272],{"type":56,"tag":82,"props":1255,"children":1256},{},[1257,1259,1264,1265,1270],{"type":61,"value":1258},"No ",{"type":56,"tag":103,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":61,"value":162},{"type":61,"value":300},{"type":56,"tag":103,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":61,"value":169},{"type":61,"value":1271}," extensions in internal doc cross-references",{"type":61,"value":1273}," — project convention.",{"type":56,"tag":99,"props":1275,"children":1276},{},[1277,1282,1284,1290],{"type":56,"tag":82,"props":1278,"children":1279},{},[1280],{"type":61,"value":1281},"Don't translate",{"type":61,"value":1283},": if the user wants Chinese ↔ English, that is ",{"type":56,"tag":103,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":61,"value":1289},"doris-translate-zh-to-en",{"type":61,"value":1291},", not this skill.",{"type":56,"tag":99,"props":1293,"children":1294},{},[1295,1300],{"type":56,"tag":82,"props":1296,"children":1297},{},[1298],{"type":61,"value":1299},"One file per invocation",{"type":61,"value":1301},": if asked to optimize a folder, ask which single file to start with.",{"type":56,"tag":70,"props":1303,"children":1305},{"id":1304},"reference-example",[1306],{"type":61,"value":1307},"Reference example",{"type":56,"tag":64,"props":1309,"children":1310},{},[1311,1313,1319],{"type":61,"value":1312},"The canonical example is the install-prometheus-and-grafana doc under ",{"type":56,"tag":103,"props":1314,"children":1316},{"className":1315},[],[1317],{"type":61,"value":1318},"i18n\u002Fzh-CN\u002Fdocusaurus-plugin-content-docs-next\u002Fcurrent\u002Finstall\u002Fdeploy-on-kubernetes\u002Fseparating-storage-compute\u002F",{"type":61,"value":1320},". The optimization:",{"type":56,"tag":95,"props":1322,"children":1323},{},[1324,1353,1374,1379,1392,1439,1459,1479],{"type":56,"tag":99,"props":1325,"children":1326},{},[1327,1329,1335,1337,1343,1345,1351],{"type":61,"value":1328},"Added ",{"type":56,"tag":103,"props":1330,"children":1332},{"className":1331},[],[1333],{"type":61,"value":1334},"适用场景",{"type":61,"value":1336}," (table), ",{"type":56,"tag":103,"props":1338,"children":1340},{"className":1339},[],[1341],{"type":61,"value":1342},"前置条件",{"type":61,"value":1344}," (bullet list), ",{"type":56,"tag":103,"props":1346,"children":1348},{"className":1347},[],[1349],{"type":61,"value":1350},"部署流程总览",{"type":61,"value":1352}," (numbered list) at the top.",{"type":56,"tag":99,"props":1354,"children":1355},{},[1356,1358,1364,1366,1372],{"type":61,"value":1357},"Split each ",{"type":56,"tag":103,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":61,"value":1363},"Step N",{"type":61,"value":1365}," into ",{"type":56,"tag":103,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":61,"value":1371},"N.1 \u002F N.2 \u002F N.3",{"type":61,"value":1373}," sub-steps, each with intent → command → explanation.",{"type":56,"tag":99,"props":1375,"children":1376},{},[1377],{"type":61,"value":1378},"Extracted ServiceMonitor YAML field meanings into a parameter table.",{"type":56,"tag":99,"props":1380,"children":1381},{},[1382,1384,1390],{"type":61,"value":1383},"Added a ",{"type":56,"tag":103,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":61,"value":1389},"常见问题",{"type":61,"value":1391}," table at the end covering the four most common failure modes implied by the original prose (Targets not visible, Targets DOWN, Grafana empty, port unreachable).",{"type":56,"tag":99,"props":1393,"children":1394},{},[1395,1397,1402,1404,1409,1411,1417,1418,1424,1425,1431,1432,1438],{"type":61,"value":1396},"Updated ",{"type":56,"tag":103,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":61,"value":787},{"type":61,"value":1403}," to a 50-char problem-oriented summary; expanded ",{"type":56,"tag":103,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":61,"value":800},{"type":61,"value":1410}," with Chinese long-tail terms (",{"type":56,"tag":103,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":61,"value":1416},"存算分离",{"type":61,"value":599},{"type":56,"tag":103,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":61,"value":1423},"集群监控",{"type":61,"value":599},{"type":56,"tag":103,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":61,"value":1430},"指标采集",{"type":61,"value":599},{"type":56,"tag":103,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":61,"value":1437},"Dashboard",{"type":61,"value":642},{"type":56,"tag":99,"props":1440,"children":1441},{},[1442,1444,1450,1451,1457],{"type":61,"value":1443},"Inserted ",{"type":56,"tag":103,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":61,"value":1449},"\u003C!-- 知识类型 -->",{"type":61,"value":815},{"type":56,"tag":103,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":61,"value":1456},"\u003C!-- 适用场景 -->",{"type":61,"value":1458}," meta comments at the top of major sections.",{"type":56,"tag":99,"props":1460,"children":1461},{},[1462,1464,1470,1471,1477],{"type":61,"value":1463},"Fixed an upstream bug where ",{"type":56,"tag":103,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":61,"value":1469},"helm repo add ... helm-charts",{"type":61,"value":815},{"type":56,"tag":103,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":61,"value":1476},"helm repo update",{"type":61,"value":1478}," had been concatenated into one line with no separator.",{"type":56,"tag":99,"props":1480,"children":1481},{},[1482,1484,1490,1492,1498],{"type":61,"value":1483},"Verified all three external links (",{"type":56,"tag":103,"props":1485,"children":1487},{"className":1486},[],[1488],{"type":61,"value":1489},"get-helm-3",{"type":61,"value":1491},", prometheus-community charts repo, dashboard JSON) returned 200, and confirmed all three image files existed under ",{"type":56,"tag":103,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":61,"value":1497},"static\u002Fimages\u002Fnext\u002Finstall\u002F",{"type":61,"value":283},{"type":56,"tag":64,"props":1500,"children":1501},{},[1502],{"type":61,"value":1503},"That run is a good shape to emulate, but adapt to the doc in front of you — don't force these exact sections onto a doc that doesn't need them.",{"type":56,"tag":70,"props":1505,"children":1507},{"id":1506},"self-check-before-reporting-done",[1508],{"type":61,"value":1509},"Self-check before reporting done",{"type":56,"tag":64,"props":1511,"children":1512},{},[1513],{"type":61,"value":1514},"Before printing the summary:",{"type":56,"tag":95,"props":1516,"children":1517},{},[1518,1523,1535,1547,1552],{"type":56,"tag":99,"props":1519,"children":1520},{},[1521],{"type":61,"value":1522},"Diff the new file against the original mentally: is every code block, image, and YAML sample still present?",{"type":56,"tag":99,"props":1524,"children":1525},{},[1526,1528,1533],{"type":61,"value":1527},"Did you read ",{"type":56,"tag":103,"props":1529,"children":1531},{"className":1530},[],[1532],{"type":61,"value":232},{"type":61,"value":1534}," this run? (Yes \u002F re-read it.)",{"type":56,"tag":99,"props":1536,"children":1537},{},[1538,1540,1545],{"type":61,"value":1539},"Did you actually run ",{"type":56,"tag":103,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":61,"value":910},{"type":61,"value":1546}," on every external link, not just eyeball them?",{"type":56,"tag":99,"props":1548,"children":1549},{},[1550],{"type":61,"value":1551},"Is the frontmatter shape unchanged?",{"type":56,"tag":99,"props":1553,"children":1554},{},[1555,1557,1562,1563,1568],{"type":61,"value":1556},"Are there any internal doc cross-references with ",{"type":56,"tag":103,"props":1558,"children":1560},{"className":1559},[],[1561],{"type":61,"value":162},{"type":61,"value":300},{"type":56,"tag":103,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":61,"value":169},{"type":61,"value":1569}," still on them?",{"type":56,"tag":64,"props":1571,"children":1572},{},[1573],{"type":61,"value":1574},"If any answer is wrong, fix before reporting.",{"type":56,"tag":1576,"props":1577,"children":1578},"style",{},[1579],{"type":61,"value":1580},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1582,"total":1734},[1583,1600,1614,1627,1640,1653,1671,1682,1692,1703,1713,1723],{"slug":1584,"name":1584,"fn":1585,"description":1586,"org":1587,"tags":1588,"stars":1597,"repoUrl":1598,"updatedAt":1599},"datafusion-python","write Apache DataFusion Python code","Use when the user is writing datafusion-python (Apache DataFusion Python bindings) DataFrame or SQL code. Covers imports, data loading, DataFrame operations, expression building, SQL-to-DataFrame mappings, idiomatic patterns, and common pitfalls.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1589,1592,1595],{"name":1590,"slug":1591,"type":15},"Data Analysis","data-analysis",{"name":1593,"slug":1594,"type":15},"Python","python",{"name":1596,"slug":731,"type":15},"SQL",593,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fdatafusion-python","2026-07-12T08:36:04.957626",{"slug":1601,"name":1601,"fn":1602,"description":1603,"org":1604,"tags":1605,"stars":1611,"repoUrl":1612,"updatedAt":1613},"bydbql","generate and execute BanyanDB BydbQL queries","Generate, validate, and optionally execute read-only BanyanDB BydbQL for STREAM, MEASURE, TRACE, and PROPERTY resources. Use when the user asks to query BanyanDB, translate natural language to BydbQL, inspect BanyanDB schema or data, validate BydbQL, or fetch raw BanyanDB records.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1606,1608,1610],{"name":1607,"slug":28,"type":15},"Analytics",{"name":1609,"slug":31,"type":15},"Database",{"name":1596,"slug":731,"type":15},344,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking-banyandb","2026-07-12T08:31:01.294423",{"slug":1615,"name":1615,"fn":1616,"description":1617,"org":1618,"tags":1619,"stars":1611,"repoUrl":1612,"updatedAt":1626},"compiling","compile and build BanyanDB projects","Compile and build the SkyWalking BanyanDB project. Use when the user asks to compile, build, or generate code for this project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1620,1623],{"name":1621,"slug":1622,"type":15},"Build","build",{"name":1624,"slug":1625,"type":15},"Engineering","engineering","2026-07-12T08:31:06.373309",{"slug":1628,"name":1628,"fn":1629,"description":1630,"org":1631,"tags":1632,"stars":1611,"repoUrl":1612,"updatedAt":1639},"gh-pull-request","create GitHub pull requests for BanyanDB","Create a GitHub pull request for SkyWalking BanyanDB. Use when the user asks to create a PR, submit changes, or open a pull request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1633,1636],{"name":1634,"slug":1635,"type":15},"GitHub","github",{"name":1637,"slug":1638,"type":15},"Pull Requests","pull-requests","2026-07-12T08:31:03.792415",{"slug":1641,"name":1641,"fn":1642,"description":1643,"org":1644,"tags":1645,"stars":1611,"repoUrl":1612,"updatedAt":1652},"vendor-update","update Go and Node.js vendor dependencies","Upgrade Go\u002FNode.js vendor dependencies and sync tool versions. Use whenever the user says \"upgrade dependencies\", \"update vendors\", \"vendor update\", \"run vendor-upgrade\", \"bump dependencies\", \"update packages\", or asks to run the `vendor-update` Make target. This skill also checks `scripts\u002Fbuild\u002Fversion.mk` after upgrading to see if any tracked tool versions need updating too, and removes stale binaries from `bin\u002F` when versions change.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1646,1649],{"name":1647,"slug":1648,"type":15},"Go","go",{"name":1650,"slug":1651,"type":15},"Node.js","node-js","2026-07-12T08:31:02.555555",{"slug":1654,"name":1654,"fn":1655,"description":1656,"org":1657,"tags":1658,"stars":1668,"repoUrl":1669,"updatedAt":1670},"cayenne-cgen","generate Cayenne entity Java classes","Use this skill whenever the user wants to (re)generate Cayenne entity Java classes from a DataMap. Trigger on phrases like 'generate Java classes', 'regenerate entities', 'run cgen', 'create the entity classes', 'why is the Artist class missing fields', 'where did the `_Abstract*` classes come from', 'sync the entity classes with the model', or any request to materialize Java from the DataMap. Also trigger as a follow-up after modeling changes (someone added an entity, attribute, or relationship and now the Java side is stale). This skill exclusively uses the `mcp__cayenne__cgen_run` MCP tool — it does NOT use `mvn cayenne:cgen` or the Gradle cgen task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1659,1662,1665],{"name":1660,"slug":1661,"type":15},"Data Modeling","data-modeling",{"name":1663,"slug":1664,"type":15},"Java","java",{"name":1666,"slug":1667,"type":15},"ORM","orm",343,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fcayenne","2026-07-12T08:32:33.575211",{"slug":1672,"name":1672,"fn":1673,"description":1674,"org":1675,"tags":1676,"stars":1668,"repoUrl":1669,"updatedAt":1681},"cayenne-db-import","import database schema into Cayenne DataMaps","Use this skill when the user wants to import database schema metadata into a Cayenne DataMap — the *model\u002Fmapping only*, not names or Java classes. Trigger on phrases like 'reverse engineer the database', 'import the schema', 'generate a DataMap from my DB', 'add the new tables from the DB into the model', 'import the customer table', 'create entities from these tables', or any request to read database metadata to populate or update a DataMap's XML. This is for *full schema* or *bulk table* import; one-off a-la-carte entity additions belong in the cayenne-modeling skill. IMPORTANT — scope: this imports the mapping ONLY; it does not clean up the Object-layer names or (re)generate Java classes. When the user wants their whole project brought in line with the DB ('sync my project with the database', 'my schema changed, update everything', 'update my entities\u002Fclasses from the DB'), that is the end-to-end `cayenne-full-db-sync` skill, which runs this import and then name cleanup and class generation. To regenerate classes alone use `cayenne-cgen`. The skill runs reverse engineering directly via the `mcp__cayenne__dbimport_run` MCP tool when a DBConnector is already configured; otherwise it opens the CayenneModeler GUI via `mcp__cayenne__open_project` to configure the connection first.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1677,1678,1679,1680],{"name":1609,"slug":31,"type":15},{"name":1663,"slug":1664,"type":15},{"name":1666,"slug":1667,"type":15},{"name":1596,"slug":731,"type":15},"2026-07-19T05:40:33.655062",{"slug":1683,"name":1683,"fn":1684,"description":1685,"org":1686,"tags":1687,"stars":1668,"repoUrl":1669,"updatedAt":1691},"cayenne-full-db-sync","synchronize Cayenne projects with database","Use this skill when the user wants to bring their WHOLE Cayenne project in line with the database in one shot — the mapping, the Object-layer names, and the generated Java classes together. This is the end-to-end 'sync with the DB' workflow, and it orchestrates three skills in order: `cayenne-db-import` (import schema metadata into the DataMap) → `cayenne-model-naming` (polish the just-imported names) → `cayenne-cgen` (regenerate Java classes). Trigger on holistic phrases like 'sync my project with the database', 'sync with the DB', 'my schema changed, update everything', 'update my entities\u002Fclasses from the database', 'reverse engineer and regenerate the classes', 'import the new tables and rebuild the entities', 'full DB sync', 'bring the model and classes up to date with the DB'. The distinguishing signal is scope: the user wants the whole project (mapping + names + Java code), not just one stage. For the *model\u002Fmapping only* (no name cleanup, no class generation) use `cayenne-db-import`; to (re)generate classes alone use `cayenne-cgen`; to clean names alone use `cayenne-model-naming`. Uses the `mcp__cayenne__dbimport_run` and `mcp__cayenne__cgen_run` MCP tools via the sub-skills; does NOT use Maven or Gradle goals.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1688,1689,1690],{"name":1609,"slug":31,"type":15},{"name":1663,"slug":1664,"type":15},{"name":1666,"slug":1667,"type":15},"2026-07-19T06:03:49.112969",{"slug":1693,"name":1693,"fn":1694,"description":1695,"org":1696,"tags":1697,"stars":1668,"repoUrl":1669,"updatedAt":1702},"cayenne-model-naming","clean up Cayenne object-layer names","Use this skill to clean up Object-layer names in a Cayenne DataMap — ObjEntity, ObjAttribute, and ObjRelationship names, plus DbRelationship names (the first-class unit of relationship cleanup — every FK has one whether or not an ObjRelationship was generated; the ObjRelationship name is synced to it when one exists) — so they read as descriptive, consistent Java. Trigger on phrases like 'clean up the model names', 'fix the entity names', 'these names look ugly', 'make the names descriptive', 'normalize the ObjEntity\u002Fattribute\u002Frelationship names', 'why is this relationship called team1', 'rename entities to be consistent', 'the import produced Gametype instead of GameType'. Invoke it on an explicit user request, or as a manual follow-up after a `cayenne-db-import` to polish the just-imported additions — it is never triggered automatically. IMPORTANT: this is a LIGHT polish pass — CayenneModeler's reverse-engineering already produces good names for the common case; only improve the specific things its deterministic algorithm cannot (run-together names with no separators like `gametype`, meaningless numbered names like `team1` from multiple relationships between two tables, and a common entity prefix that leaks into relationship names like `aaOrders`). Do NOT rewrite names that are already correct. This is Obj-layer naming polish; for structural model edits use `cayenne-modeling`, and for regenerating classes afterward use `cayenne-cgen`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1698,1699,1700,1701],{"name":1660,"slug":1661,"type":15},{"name":1609,"slug":31,"type":15},{"name":1663,"slug":1664,"type":15},{"name":1666,"slug":1667,"type":15},"2026-07-22T05:35:32.342548",{"slug":1704,"name":1704,"fn":1705,"description":1706,"org":1707,"tags":1708,"stars":1668,"repoUrl":1669,"updatedAt":1712},"cayenne-modeler","manage Cayenne projects with CayenneModeler","Use this skill when the user explicitly wants to open CayenneModeler (the GUI) on a Cayenne project, or when the modeling task is inherently visual — reverse engineering (delegated to cayenne-db-import), bulk relationship layout, multi-entity visual refactoring. Trigger on phrases like 'open the Modeler', 'open in CayenneModeler', 'launch the GUI', 'edit visually', 'show me the project in the Modeler'. Do NOT trigger as a fallback for ordinary a-la-carte XML edits — those belong in the cayenne-modeling skill, which is faster and doesn't require the user to context-switch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1709,1710,1711],{"name":1660,"slug":1661,"type":15},{"name":1663,"slug":1664,"type":15},{"name":1666,"slug":1667,"type":15},"2026-07-12T08:32:37.199428",{"slug":1714,"name":1714,"fn":1715,"description":1716,"org":1717,"tags":1718,"stars":1668,"repoUrl":1669,"updatedAt":1722},"cayenne-modeling","edit and extend Cayenne ORM models","Use this skill whenever the user wants to edit, inspect, or extend the Cayenne ORM model in a project — adding or modifying entities, attributes, relationships, embeddables, named queries, stored procedures, or DataNodes. Trigger on phrases like 'add an ObjEntity', 'add a DbEntity', 'add a relationship', 'expose this column as an attribute', 'create a new DataMap', 'add a named query', 'create an embeddable', 'add a stored procedure', 'change the attribute type', 'mark this column as nullable', 'rename this entity', or any mention of a Cayenne `*.map.xml` or `cayenne-*.xml` file. Also trigger when the user references modeling concepts (ObjEntity, DbEntity, ObjAttribute, DbAttribute, ObjRelationship, DbRelationship, Embeddable, dbEntityName, deleteRule, db-attribute-path, db-relationship-path, defaultPackage) in the context of a Cayenne-using app. This is the *primary* skill for a-la-carte ORM model manipulation — direct XML edits, not the Modeler GUI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1719,1720,1721],{"name":1609,"slug":31,"type":15},{"name":1663,"slug":1664,"type":15},{"name":1666,"slug":1667,"type":15},"2026-07-19T05:40:32.6889",{"slug":1724,"name":1724,"fn":1725,"description":1726,"org":1727,"tags":1728,"stars":1668,"repoUrl":1669,"updatedAt":1733},"cayenne-query","write and modify Cayenne database queries","Use this skill whenever the user wants to write or modify a Cayenne query — fetching entities by criteria, joining, prefetching to avoid N+1, ordering, paginating, aggregating, or running raw SQL through Cayenne. Trigger on phrases like 'query for X', 'fetch all artists where ...', 'write an ObjectSelect', 'use SQLSelect', 'use SelectById', 'add a prefetch', 'get distinct values', 'count rows', 'find by ID', 'load by primary key', 'build a Cayenne expression', 'why am I getting N+1', 'how do I paginate', 'select a single column', 'select columns into a DTO', 'named query in the DataMap'. Do NOT trigger for modeling changes (use cayenne-modeling) or runtime bootstrap (use cayenne-runtime).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1729,1730,1731,1732],{"name":1609,"slug":31,"type":15},{"name":1663,"slug":1664,"type":15},{"name":1666,"slug":1667,"type":15},{"name":1596,"slug":731,"type":15},"2026-07-12T08:32:35.072322",108,{"items":1736,"total":1773},[1737,1749,1755],{"slug":1738,"name":1738,"fn":1739,"description":1740,"org":1741,"tags":1742,"stars":22,"repoUrl":23,"updatedAt":1748},"add-release","update Apache Doris website release information","Publish a new Apache Doris Core or Doris ecosystem release on the Doris website. Use when updating download data, bilingual release notes, the Doris Core release index, release navigation, or ecosystem release pages. Confirm the component and release metadata first because Core and ecosystem releases use different files and validation paths.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1743,1746,1747],{"name":1744,"slug":1745,"type":15},"Deployment","deployment",{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},"2026-07-19T05:38:47.44971",{"slug":4,"name":4,"fn":5,"description":6,"org":1750,"tags":1751,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1752,1753,1754],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"slug":1756,"name":1756,"fn":1757,"description":1758,"org":1759,"tags":1760,"stars":22,"repoUrl":23,"updatedAt":1772},"weekly-report-slack","generate Slack reports from community updates","Generate an English Slack-ready post from an Apache Doris weekly community report MDX file. Use when the user invokes `$weekly-report-slack path\u002Fto\u002Freport.mdx` or asks to turn a Doris weekly report, especially `src\u002Fpages\u002Fcommunity-report\u002F_reports\u002FYYYY-MM-DD.mdx`, into the standard Slack announcement format with date range, summary paragraph, highlights, and report link.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1761,1764,1767,1770],{"name":1762,"slug":1763,"type":15},"Communications","communications",{"name":1765,"slug":1766,"type":15},"Reporting","reporting",{"name":1768,"slug":1769,"type":15},"Slack","slack",{"name":555,"slug":1771,"type":15},"writing","2026-07-12T08:32:45.997147",3]