[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-elastic-docs-review-changelog":3,"mdc--kjr2fb-key":36,"related-repo-elastic-docs-review-changelog":3129,"related-org-elastic-docs-review-changelog":3207},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":31,"sourceUrl":34,"mdContent":35},"docs-review-changelog","validate Elastic changelog YAML files","Validate and assess the quality of Elastic changelog YAML files against current Elastic standards. Reports schema errors, content quality issues, systematic pattern violations, type-title alignment mismatches, and overly technical content that needs user-focused rewrites. Features repository-aware area validation. Fetches canonical guidance to stay in sync. Use when checking or reviewing changelog files before merging — pairs with docs-fix-changelog to get suggested fixes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"elastic","Elastic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Felastic.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Documentation","documentation","tag",{"name":17,"slug":18,"type":15},"YAML","yaml",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Technical Writing","technical-writing",71,"https:\u002F\u002Fgithub.com\u002Felastic\u002Felastic-docs-skills","2026-07-12T07:48:59.835813",null,9,[29,8,30],"docs","skills",{"repoUrl":24,"stars":23,"forks":27,"topics":32,"description":33},[29,8,30],"Instructions for code agents on how to author Elastic docs","https:\u002F\u002Fgithub.com\u002Felastic\u002Felastic-docs-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fchangelogs\u002Freview-changelog","---\nname: docs-review-changelog\nversion: 1.5.1\ndescription: Validate and assess the quality of Elastic changelog YAML files against current Elastic standards. Reports schema errors, content quality issues, systematic pattern violations, type-title alignment mismatches, and overly technical content that needs user-focused rewrites. Features repository-aware area validation. Fetches canonical guidance to stay in sync. Use when checking or reviewing changelog files before merging — pairs with docs-fix-changelog to get suggested fixes.\nargument-hint: \u003Cfile-or-directory>\ncontext: fork\nallowed-tools: Read, Grep, Glob, WebFetch\nsources:\n  - https:\u002F\u002Fgithub.com\u002Felastic\u002Fdocs-builder\u002Fblob\u002Fmain\u002Fsrc\u002FElastic.Documentation\u002FReleaseNotes\u002FChangelogEntry.cs\n  - https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Fcontribute-docs\u002Fcontent-types\u002Fchangelogs\n---\n\u003C!-- Copyright Elasticsearch B.V. and\u002For licensed to Elasticsearch B.V. under one\nor more contributor license agreements. See the NOTICE file distributed with\nthis work for additional information regarding copyright\nownership. Elasticsearch B.V. licenses this file to you under\nthe Apache License, Version 2.0 (the \"License\"); you may\nnot use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n\thttp:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing,\nsoftware distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations\nunder the License. -->\n\nYou are a changelog reviewer for Elastic documentation. Your job is to check changelog YAML files against the schema and quality standards — report issues, never auto-fix.\n\n**Target audience:** Power users who can follow PR links for details. **Correctness priority:** Accuracy always takes precedence over style.\n\n## How to use this skill\n\n**Purpose:** Quality gatekeeper for changelog YAML files. Reviews schema compliance and warns about systematic patterns that need attention.\n\n**Common workflows:**\n\n- **Review only:** Gate before merge (\"check `docs\u002Fchangelog`\") — use when you want to validate files without making changes\n- **Review → fix → review:** *Recommended* for files with many issues. Use the review report as a punch list, then run `docs-fix-changelog` on specific files, then re-run review on the same path before merge\n- **Fix only:** If you already know specific files need wording improvements and want suggestions\n\n**Relationship to `docs-fix-changelog`:**\n\n- This skill **never modifies files** — it only reports issues\n- `docs-fix-changelog` **suggests improvements** for issues found by this skill\n- Both skills check the same systematic patterns but serve different purposes: review warns, fix suggests\n- **Directory support:** This skill supports directories (globs `*.yaml`\u002F`*.yml` automatically)\n- **Optional workflow:** You don't have to run review before fix or vice versa — use whichever fits your needs\n\n**When to run `docs-fix-changelog` after review:** If this review surfaces quality warnings or formatting warnings, `docs-fix-changelog` can provide specific suggestions for improvement.\n\n## Inputs\n\n`$ARGUMENTS` is a file path or directory to review. If empty, ask the user what to review.\n\n## Step 1: Load canonical guidance and repository configuration\n\nTo ensure review warnings align with current standards and repository-specific rules:\n\n### Canonical Guidance Loading\n1. **First preference:** If a `docs-content` checkout exists in the workspace, read `docs-content\u002Fcontribute-docs\u002Fcontent-types\u002Fchangelogs.md`\n2. **Second preference:** Fetch the published guide at \u003Chttps:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Fcontribute-docs\u002Fcontent-types\u002Fchangelogs>\n3. **Fallback:** Use the embedded patterns in this skill if the above sources are unavailable\n\n### Repository Configuration Loading\n1. **Area validation:** Look for `docs\u002Fchangelog.yml` in the workspace to extract valid area values from the `pivot.areas` section\n2. **Repository context:** If found, use this as the authoritative source for area validation instead of generic rules\n3. **Fallback:** If no repository config found, note this limitation in the final summary\n\n**Purpose:** This ensures review warnings match both current writer guidance and repository-specific validation rules. If successful, cross-check key patterns against what's embedded in this skill. If there are significant discrepancies, note this in the final summary.\n\n**Software context:** Content relates to Elastic software (Elasticsearch, Elastic Observability, or Elastic Security products). Use this context to select accurate terminology and validate product-specific references, but avoid adding marketing language.\n\n## Step 2: Discover and parse files\n\nGlob for `*.yaml` and `*.yml` in `$ARGUMENTS`, or read a single file if given a direct path. Parse each file as YAML. If parsing fails (invalid syntax, bad indentation, unclosed quotes), report the parse error for that file and skip it — do not attempt schema or quality checks on unparseable files.\n\n## Step 3: Schema checks\n\nThese are hard errors — structural\u002Fparse failures only (missing required fields, invalid enums, YAML types, unquoted scalars, required `impact`\u002F`action` on `breaking-change`). Not style guidelines. The source of truth for the schema is `ChangelogEntry.cs` linked in `sources`.\n\n**Required fields:**\n\n- `title`: must be present\n- `type`: must be present, value must be one of: `feature`, `enhancement`, `security`, `bug-fix`, `breaking-change`, `deprecation`, `known-issue`, `docs`, `regression`, `other`\n- `products`: must be present, non-empty array; each entry must have a `product` key\n\n**Product ID validation:** Fetch `https:\u002F\u002Fraw.githubusercontent.com\u002Felastic\u002Fdocs-builder\u002Fmain\u002Fconfig\u002Fproducts.yml` to get the canonical list — valid IDs are the top-level keys under `products:`. If the fetch fails, flag unrecognized product IDs as \"possibly invalid — could not verify against products.yml\" rather than as errors.\n\n**Optional field constraints:**\n\n- `products[n].lifecycle` if present on any product entry, fetch `https:\u002F\u002Fgithub.com\u002Felastic\u002Fdocs-builder\u002Fblob\u002Fmain\u002Fsrc\u002FElastic.Documentation\u002FLifecycle.cs` to get canonical list (such as `ga`)\n- `subtype`: only permitted on `breaking-change` entries; value must be one of: `api`, `behavioral`, `configuration`, `dependency`, `subscription`, `plugin`, `security`, `other`\n- `prs` and `issues`: optional arrays, may be empty or absent — no validation beyond YAML type correctness\n- `areas` if present: must be an array of strings — validate against repository configuration from Step 1 if available (only flag areas not in `docs\u002Fchangelog.yml` pivot.areas section), otherwise use generic validation\n- `feature-id` if present: must be a string — used to associate a change with a unique feature flag\n- `highlight` if present: must be a boolean — marks entries for inclusion in release highlights\n\n**YAML quoting:** Text field values (`title`, `description`, `impact`, `action`) that contain `:` (colon followed by a space) MUST be wrapped in quotes — an unquoted value containing `:` is interpreted as the start of a new mapping key and causes a \"While scanning a plain scalar value, found invalid mapping\" error at bundle time. Also flag unquoted values containing `#`, `[`, `]`, `{`, or `}` as these can also cause parse failures.\n\nExample problem: `description: The tool no longer accepts the flag: -c`\nCorrect form: `description: \"The tool no longer accepts the flag: -c\"`\n\n## Step 4: Quality checks\n\nThese are warnings. The source of truth is the changelogs style guidance linked in `sources`.\n\n**All types:**\n\n- Title starts with base-form action verb (`Add`, `Fix`, `Improve`, `Remove`, `Update`…) — not third-person forms (`Adds`, `Fixes`)\n- Flag: title does not start with an approved base-form verb for the declared `type` (noun-phrase titles)\n- Flag titles starting with negative imperatives: `Don't`, `Do not` — these are not approved leading verbs for any type\n- Flag noun-phrase or gerund-led titles: `Ability to`, `Adding`, `Changing`, `Using`, `Shutdown`\n- Flag: slash-separated enumerations in titles (`foo\u002Fbar\u002Fbaz`)\n- Title is specific, not vague (\"Bug fixes\" or \"Performance improvements\" are too vague)\n- Title avoids bare internal references (\"PR #123\", \"bug #456\") — these don't help users\n- Title and description avoid implementation-focused language (describe user impact, not code changes)\n- Title over 80 or description over 600 characters → quality warning (guideline; low priority if ≤20 over; never a merge blocker)\n\n**Systematic pattern warnings:**\n\n**1. Title standardization issues (from canonical Title cleanup checklist):**\n\n- **Strip development labels:** Remove prefixes such as `feat:`, `fix:`, `Fix:`, `auto-implement:`, `ES|QL|DS`, `Aggs:`, `GPU codec:`, `DiskBBQ -`, and trailing tracker fragments like `Bugfix -`\n- **No bracket-only team tags:** Replace `[Security Solution]`, `[Query Rules]`, `[Inference]`, and similar with plain, user-facing wording\n- **Strong verbs:** Prefer *Improve validation for...* over *Better validation for...* (use present tense imperative: Fix, Add, Remove)\n- **No buried lede:** If title is vague, fold in concrete detail from description so release notes stand alone\n- **Base-form verb requirement:** Use `Fix`, `Add`, `Remove` (not third-person `Fixes`, `Adds`, `Removes`)\n- **Sentence case:** Follow standard sentence capitalization\n- **Feature\u002Fapp prefix patterns:** Flag titles with `[Feature\u002FApp]: [Action]` patterns that need contextual integration (e.g., \"File upload: Fix bug\" should integrate the feature contextually). Skip technical terms, API references, code identifiers.\n\n**2. Technical term enhancement issues:**\n\n- Missing backticks around class\u002Fmethod names, config keys, API endpoints, or code identifiers\n- British spelling that should use US English: `serialise` → `serialize`, `colour` → `color`\n- Unexpanded abbreviations where full form would be clearer: `params` → `parameters`\n- Inconsistent terminology: `ESQL` should be standardized to `ES|QL`\n\n**3. Content quality issues:**\n\n- Vague titles that could be more specific based on description content\n- Absent `description` when title is self-explanatory is fine; only flag **present** descriptions that repeat the title, say \"See PR\", or add no context\n- Implementation-focused phrasing instead of user-visible outcomes\n\n**4. YAML formatting issues (cross-reference with Step 2):**\n\n- Unquoted text containing special characters (see Step 2 for details)\n- Inconsistent formatting across text fields\n\n**5. UI element formatting issues:**\n\n- **Unclear UI labels:** Button names, page titles, tabs should be in \"quotation marks\" if the phrase is unclear. For example: 'Fix \"View in AI Assistant\" button availability'\n- **Incorrectly quoted feature names:** Feature names should be capitalized, not quoted (Machine Learning, not \"Machine Learning\")\n- **Missing backticks:** Field names, parameters, API endpoints should use `backticks`\n- **UI vs feature uncertainty:** Flag when formatting choice between UI label and feature name is unclear\n\n**5. Type-title alignment issues:**\n\nFlag when changelog `type` and `title` verb patterns don't align, indicating potential misclassification:\n\n- **`bug-fix`\u002F`regression` misalignment:** Title uses `Improve`, `Enable`, `Update`, `Enhance` instead of expected `Fix`, `Resolve`, `Correct`\n  - **Warning:** Type suggests fixing broken behavior, but title implies improvement\u002Faddition\n  - **Suggest:** Review whether behavior was actually broken or if this should be `enhancement`\n- **`bug-fix`\u002F`regression` enhancement verbs:** On `bug-fix`, flag titles starting with `Default`, `Reserve`, `Ensure`, or `Close` without `Fix`\n- **`bug-fix`\u002F`regression` preventive\u002Frestrictive framing:** Flag titles that describe a new restriction or validation rather than the user-visible failure, especially when the title does NOT start with `Fix`, `Resolve`, or `Correct`\n  - **Leading patterns to flag:** `Don't`, `Do not`, `Disallow`, `Prevent`, `Reject`, `Block`, `Forbid`, `Prohibit`, `Restrict`, `No longer allow`\n  - **Warning:** Title explains what is now blocked, not what was broken (recovery failure, query error, cluster red, etc.)\n  - **Suggest:** Rewrite as `Fix [symptom] when [condition]` — e.g. \"Don't allow runtime fields to shadow index sort fields\" → \"Fix shard recovery failures when runtime fields shadow index sort fields\"\n  - **Type note:** If the change only adds validation with no prior user-visible failure, consider `enhancement` instead of `bug-fix`\n\n- **`enhancement` misalignment:** Title uses `Fix`, `Resolve`, `Correct` instead of expected `Improve`, `Update`, `Optimize`, `Enable`, `Expand`, `Enhance`\n  - **Warning:** Type suggests improving working functionality, but title implies fixing broken behavior\n  - **Suggest:** Review whether behavior was broken (→ `bug-fix`) or truly an optimization (keep `enhancement`)\n\n- **`feature` misalignment:** Title uses `Fix`, `Improve` for substantial new capabilities\n  - **Warning:** Major new functionality should use `Add`, `Introduce`, `Enable`, `Support`\n  - **Suggest:** Review scope - substantial new capability (→ `feature`) vs minor addition (→ `enhancement`)\n\n- **`docs` misalignment:** Title doesn't focus on documentation clarity\u002Faccuracy\n  - **Warning:** Documentation changes should use `Update`, `Add`, `Clarify`, `Document`\n\n**Example patterns to flag:**\n\n- Type `bug-fix` + \"Improve query approximation accuracy...\" → **Flag alignment mismatch**\n- Type `bug-fix` + \"Don't allow runtime fields to shadow fields used in index sort\" → **Flag preventive framing + verb mismatch**\n- Type `enhancement` + \"Fix Painless score scripts...\" → **Flag alignment mismatch**  \n- Type `enhancement` + \"Fix ES|QL performance issues...\" → **Flag alignment mismatch**\n\n**6. Technical content issues:**\n\nFlag overly technical titles that focus on implementation details rather than user impact:\n\n- **Implementation-focused titles:** Class names, method names, or internal processes without user context\n  - **Warning:** Title focuses on code changes rather than user-visible symptoms\n  - **Example:** \"Fix splitValue nullability coercion when constructing ColorSeries\" → Flag as too technical\n  - **Suggest:** Rewrite to describe user-visible impact like \"Fix inline charts with grey time series for ES|QL queries\"\n\n- **Technical jargon without context:** Multiple technical terms that don't explain user experience\n  - **Warning:** Title requires deep technical knowledge to understand user impact\n  - **Suggest:** Focus on what users see, not how code works\n\n- **Missing user symptoms:** Describes internal fixes without explaining external effects\n  - **Warning:** Users can't determine if this change affects them\n  - **Suggest:** Include user-facing symptoms or feature areas affected\n- **Preventive vs corrective:** On `bug-fix`\u002F`regression`, if the title lacks symptom words (fail, error, crash, leak, hang, timeout, incorrect, missing, red, unallocated) and instead uses restriction words (allow, disallow, prevent, reject, validate, block), flag as likely preventive framing — soft heuristic for human review, not auto-fail\n- **Dev\u002Ftest language:** Flag `Repro and fix` phrasing and PR-title passthrough with class\u002Fmethod names\n- **Unexpanded dev acronyms:** Flag `NPE`, `UOE` — expand per `docs-fix-changelog` acronym table\n- **ES|QL function tokens:** When `areas` includes `ES|QL`, flag unbackticked function names (`UNION_BY_NAME`, `JSON_EXTRACT`, etc.)\n\n**Eligibility (report only — never delete files):**\n\n- Recommend removal when linked PR\u002Fissue is test-only, refactor-only, or internal plumbing with no user-visible change\n- Without PR context: flag title\u002Fdescription mentioning test-only work or internal refactor\n- Report under `### Recommend removal`; do not modify or delete files\n\n**Type-specific:**\n\n- `breaking-change`: `impact` and `action` are REQUIRED — flag as errors if absent; `subtype` is strongly recommended\n- `deprecation` and `known-issue`: `impact` and\u002For `action` are recommended — flag as warnings if absent\n- `feature` \u002F `enhancement`: title\u002Fdescription should explain what users can now do, not how it was built\n- `bug-fix` \u002F `regression`: title\u002Fdescription should explain what was wrong and what is now correct\n- When present, `description` must add context beyond repeating the title; flagging \"See PR\" or \"Internal refactoring\" as low-value\n- `impact` if present: should explain scope and who is affected\n- `action` if present: should provide clear, prescriptive steps\n\n## Step 5: Formatting checks\n\nThese are warnings. Check `description`, `impact`, and `action` field values for formatting consistency.\n\n**Link formatting:**\n\n- Bare URLs used as link text — should use `[descriptive text](url)` instead\n- Generic link text like \"click here\" or \"read more\" — should be descriptive of the destination\n\n**Code formatting:**\n\n- Code fences without a language identifier — e.g. ` ``` ` with no language tag (use `yaml`, `json`, `bash`, `console`, etc.)\n- Field names, config keys, commands, class names, or API endpoints written as plain text — should use inline backticks\n- Missing backticks around obvious code identifiers like method names, parameter names, or specific values\n\n**Text formatting:**\n\n- Inconsistent spelling (should follow US English conventions)\n- Inconsistent terminology\n\n## Step 6: Report\n\nProduce one section per file reviewed. Omit empty sections. Use this format:\n\n```markdown\n## Changelog review: \u003Cfilename>\n\n### Summary\n- N schema errors, M quality warnings, P formatting warnings\n\n### Schema errors\n- `field`: description of the problem\n\n### Quality warnings\n- `field`: description of the problem\n\n### Formatting warnings\n- `field`: description of the problem\n\n### Recommend removal\n- Optional; include only when eligibility checks fire — reason and PR\u002Fissue reference if available\n```\n\nIf a file has no issues, say so explicitly.\n\n### Confidence Assessment\nInclude this section when resource loading or validation has limitations:\n\n- **Canonical guidance:** [✓ Loaded successfully | ✗ Failed - using embedded patterns]\n- **Repository config:** [✓ Found docs\u002Fchangelog.yml | ✗ Not found - using generic validation]  \n- **Validation confidence:** [High | Medium | Low] - [Brief reason]\n- **Review limitations:** [Any factors affecting review accuracy]\n\nEnd with a one-line overall summary across all files reviewed. If any files have quality warnings (including systematic pattern issues, type-title alignment mismatches, and technical content issues) or formatting warnings, suggest running `docs-fix-changelog` to get specific improvement suggestions that address the same patterns this review identified.\n\n**Sync awareness:** If Step 1 successfully loaded canonical guidance and you detected significant discrepancies between the live documentation and this skill's embedded patterns, flag this in your summary. Note which patterns may need updating and suggest checking the canonical source directly at \u003Chttps:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Fcontribute-docs\u002Fcontent-types\u002Fchangelogs>.\n",{"data":37,"body":45},{"name":4,"version":38,"description":6,"argument-hint":39,"context":40,"allowed-tools":41,"sources":42},"1.5.1","\u003Cfile-or-directory>","fork","Read, Grep, Glob, WebFetch",[43,44],"https:\u002F\u002Fgithub.com\u002Felastic\u002Fdocs-builder\u002Fblob\u002Fmain\u002Fsrc\u002FElastic.Documentation\u002FReleaseNotes\u002FChangelogEntry.cs","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Fcontribute-docs\u002Fcontent-types\u002Fchangelogs",{"type":46,"children":47},"root",[48,56,74,81,91,99,159,174,246,270,276,287,293,298,305,360,366,414,423,433,439,465,471,515,523,635,661,669,828,915,934,940,951,959,1120,1128,1136,1354,1362,1440,1448,1480,1488,1501,1509,1558,1566,1584,2147,2155,2221,2229,2234,2450,2458,2484,2492,2619,2625,2650,2658,2679,2687,2740,2748,2761,2767,2772,3013,3018,3024,3029,3095,3107,3123],{"type":49,"tag":50,"props":51,"children":52},"element","p",{},[53],{"type":54,"value":55},"text","You are a changelog reviewer for Elastic documentation. Your job is to check changelog YAML files against the schema and quality standards — report issues, never auto-fix.",{"type":49,"tag":50,"props":57,"children":58},{},[59,65,67,72],{"type":49,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":54,"value":64},"Target audience:",{"type":54,"value":66}," Power users who can follow PR links for details. ",{"type":49,"tag":60,"props":68,"children":69},{},[70],{"type":54,"value":71},"Correctness priority:",{"type":54,"value":73}," Accuracy always takes precedence over style.",{"type":49,"tag":75,"props":76,"children":78},"h2",{"id":77},"how-to-use-this-skill",[79],{"type":54,"value":80},"How to use this skill",{"type":49,"tag":50,"props":82,"children":83},{},[84,89],{"type":49,"tag":60,"props":85,"children":86},{},[87],{"type":54,"value":88},"Purpose:",{"type":54,"value":90}," Quality gatekeeper for changelog YAML files. Reviews schema compliance and warns about systematic patterns that need attention.",{"type":49,"tag":50,"props":92,"children":93},{},[94],{"type":49,"tag":60,"props":95,"children":96},{},[97],{"type":54,"value":98},"Common workflows:",{"type":49,"tag":100,"props":101,"children":102},"ul",{},[103,123,149],{"type":49,"tag":104,"props":105,"children":106},"li",{},[107,112,114,121],{"type":49,"tag":60,"props":108,"children":109},{},[110],{"type":54,"value":111},"Review only:",{"type":54,"value":113}," Gate before merge (\"check ",{"type":49,"tag":115,"props":116,"children":118},"code",{"className":117},[],[119],{"type":54,"value":120},"docs\u002Fchangelog",{"type":54,"value":122},"\") — use when you want to validate files without making changes",{"type":49,"tag":104,"props":124,"children":125},{},[126,131,133,139,141,147],{"type":49,"tag":60,"props":127,"children":128},{},[129],{"type":54,"value":130},"Review → fix → review:",{"type":54,"value":132}," ",{"type":49,"tag":134,"props":135,"children":136},"em",{},[137],{"type":54,"value":138},"Recommended",{"type":54,"value":140}," for files with many issues. Use the review report as a punch list, then run ",{"type":49,"tag":115,"props":142,"children":144},{"className":143},[],[145],{"type":54,"value":146},"docs-fix-changelog",{"type":54,"value":148}," on specific files, then re-run review on the same path before merge",{"type":49,"tag":104,"props":150,"children":151},{},[152,157],{"type":49,"tag":60,"props":153,"children":154},{},[155],{"type":54,"value":156},"Fix only:",{"type":54,"value":158}," If you already know specific files need wording improvements and want suggestions",{"type":49,"tag":50,"props":160,"children":161},{},[162],{"type":49,"tag":60,"props":163,"children":164},{},[165,167,172],{"type":54,"value":166},"Relationship to ",{"type":49,"tag":115,"props":168,"children":170},{"className":169},[],[171],{"type":54,"value":146},{"type":54,"value":173},":",{"type":49,"tag":100,"props":175,"children":176},{},[177,189,205,210,236],{"type":49,"tag":104,"props":178,"children":179},{},[180,182,187],{"type":54,"value":181},"This skill ",{"type":49,"tag":60,"props":183,"children":184},{},[185],{"type":54,"value":186},"never modifies files",{"type":54,"value":188}," — it only reports issues",{"type":49,"tag":104,"props":190,"children":191},{},[192,197,198,203],{"type":49,"tag":115,"props":193,"children":195},{"className":194},[],[196],{"type":54,"value":146},{"type":54,"value":132},{"type":49,"tag":60,"props":199,"children":200},{},[201],{"type":54,"value":202},"suggests improvements",{"type":54,"value":204}," for issues found by this skill",{"type":49,"tag":104,"props":206,"children":207},{},[208],{"type":54,"value":209},"Both skills check the same systematic patterns but serve different purposes: review warns, fix suggests",{"type":49,"tag":104,"props":211,"children":212},{},[213,218,220,226,228,234],{"type":49,"tag":60,"props":214,"children":215},{},[216],{"type":54,"value":217},"Directory support:",{"type":54,"value":219}," This skill supports directories (globs ",{"type":49,"tag":115,"props":221,"children":223},{"className":222},[],[224],{"type":54,"value":225},"*.yaml",{"type":54,"value":227},"\u002F",{"type":49,"tag":115,"props":229,"children":231},{"className":230},[],[232],{"type":54,"value":233},"*.yml",{"type":54,"value":235}," automatically)",{"type":49,"tag":104,"props":237,"children":238},{},[239,244],{"type":49,"tag":60,"props":240,"children":241},{},[242],{"type":54,"value":243},"Optional workflow:",{"type":54,"value":245}," You don't have to run review before fix or vice versa — use whichever fits your needs",{"type":49,"tag":50,"props":247,"children":248},{},[249,261,263,268],{"type":49,"tag":60,"props":250,"children":251},{},[252,254,259],{"type":54,"value":253},"When to run ",{"type":49,"tag":115,"props":255,"children":257},{"className":256},[],[258],{"type":54,"value":146},{"type":54,"value":260}," after review:",{"type":54,"value":262}," If this review surfaces quality warnings or formatting warnings, ",{"type":49,"tag":115,"props":264,"children":266},{"className":265},[],[267],{"type":54,"value":146},{"type":54,"value":269}," can provide specific suggestions for improvement.",{"type":49,"tag":75,"props":271,"children":273},{"id":272},"inputs",[274],{"type":54,"value":275},"Inputs",{"type":49,"tag":50,"props":277,"children":278},{},[279,285],{"type":49,"tag":115,"props":280,"children":282},{"className":281},[],[283],{"type":54,"value":284},"$ARGUMENTS",{"type":54,"value":286}," is a file path or directory to review. If empty, ask the user what to review.",{"type":49,"tag":75,"props":288,"children":290},{"id":289},"step-1-load-canonical-guidance-and-repository-configuration",[291],{"type":54,"value":292},"Step 1: Load canonical guidance and repository configuration",{"type":49,"tag":50,"props":294,"children":295},{},[296],{"type":54,"value":297},"To ensure review warnings align with current standards and repository-specific rules:",{"type":49,"tag":299,"props":300,"children":302},"h3",{"id":301},"canonical-guidance-loading",[303],{"type":54,"value":304},"Canonical Guidance Loading",{"type":49,"tag":306,"props":307,"children":308},"ol",{},[309,333,350],{"type":49,"tag":104,"props":310,"children":311},{},[312,317,319,325,327],{"type":49,"tag":60,"props":313,"children":314},{},[315],{"type":54,"value":316},"First preference:",{"type":54,"value":318}," If a ",{"type":49,"tag":115,"props":320,"children":322},{"className":321},[],[323],{"type":54,"value":324},"docs-content",{"type":54,"value":326}," checkout exists in the workspace, read ",{"type":49,"tag":115,"props":328,"children":330},{"className":329},[],[331],{"type":54,"value":332},"docs-content\u002Fcontribute-docs\u002Fcontent-types\u002Fchangelogs.md",{"type":49,"tag":104,"props":334,"children":335},{},[336,341,343],{"type":49,"tag":60,"props":337,"children":338},{},[339],{"type":54,"value":340},"Second preference:",{"type":54,"value":342}," Fetch the published guide at ",{"type":49,"tag":344,"props":345,"children":348},"a",{"href":44,"rel":346},[347],"nofollow",[349],{"type":54,"value":44},{"type":49,"tag":104,"props":351,"children":352},{},[353,358],{"type":49,"tag":60,"props":354,"children":355},{},[356],{"type":54,"value":357},"Fallback:",{"type":54,"value":359}," Use the embedded patterns in this skill if the above sources are unavailable",{"type":49,"tag":299,"props":361,"children":363},{"id":362},"repository-configuration-loading",[364],{"type":54,"value":365},"Repository Configuration Loading",{"type":49,"tag":306,"props":367,"children":368},{},[369,395,405],{"type":49,"tag":104,"props":370,"children":371},{},[372,377,379,385,387,393],{"type":49,"tag":60,"props":373,"children":374},{},[375],{"type":54,"value":376},"Area validation:",{"type":54,"value":378}," Look for ",{"type":49,"tag":115,"props":380,"children":382},{"className":381},[],[383],{"type":54,"value":384},"docs\u002Fchangelog.yml",{"type":54,"value":386}," in the workspace to extract valid area values from the ",{"type":49,"tag":115,"props":388,"children":390},{"className":389},[],[391],{"type":54,"value":392},"pivot.areas",{"type":54,"value":394}," section",{"type":49,"tag":104,"props":396,"children":397},{},[398,403],{"type":49,"tag":60,"props":399,"children":400},{},[401],{"type":54,"value":402},"Repository context:",{"type":54,"value":404}," If found, use this as the authoritative source for area validation instead of generic rules",{"type":49,"tag":104,"props":406,"children":407},{},[408,412],{"type":49,"tag":60,"props":409,"children":410},{},[411],{"type":54,"value":357},{"type":54,"value":413}," If no repository config found, note this limitation in the final summary",{"type":49,"tag":50,"props":415,"children":416},{},[417,421],{"type":49,"tag":60,"props":418,"children":419},{},[420],{"type":54,"value":88},{"type":54,"value":422}," This ensures review warnings match both current writer guidance and repository-specific validation rules. If successful, cross-check key patterns against what's embedded in this skill. If there are significant discrepancies, note this in the final summary.",{"type":49,"tag":50,"props":424,"children":425},{},[426,431],{"type":49,"tag":60,"props":427,"children":428},{},[429],{"type":54,"value":430},"Software context:",{"type":54,"value":432}," Content relates to Elastic software (Elasticsearch, Elastic Observability, or Elastic Security products). Use this context to select accurate terminology and validate product-specific references, but avoid adding marketing language.",{"type":49,"tag":75,"props":434,"children":436},{"id":435},"step-2-discover-and-parse-files",[437],{"type":54,"value":438},"Step 2: Discover and parse files",{"type":49,"tag":50,"props":440,"children":441},{},[442,444,449,451,456,458,463],{"type":54,"value":443},"Glob for ",{"type":49,"tag":115,"props":445,"children":447},{"className":446},[],[448],{"type":54,"value":225},{"type":54,"value":450}," and ",{"type":49,"tag":115,"props":452,"children":454},{"className":453},[],[455],{"type":54,"value":233},{"type":54,"value":457}," in ",{"type":49,"tag":115,"props":459,"children":461},{"className":460},[],[462],{"type":54,"value":284},{"type":54,"value":464},", or read a single file if given a direct path. Parse each file as YAML. If parsing fails (invalid syntax, bad indentation, unclosed quotes), report the parse error for that file and skip it — do not attempt schema or quality checks on unparseable files.",{"type":49,"tag":75,"props":466,"children":468},{"id":467},"step-3-schema-checks",[469],{"type":54,"value":470},"Step 3: Schema checks",{"type":49,"tag":50,"props":472,"children":473},{},[474,476,482,483,489,491,497,499,505,507,513],{"type":54,"value":475},"These are hard errors — structural\u002Fparse failures only (missing required fields, invalid enums, YAML types, unquoted scalars, required ",{"type":49,"tag":115,"props":477,"children":479},{"className":478},[],[480],{"type":54,"value":481},"impact",{"type":54,"value":227},{"type":49,"tag":115,"props":484,"children":486},{"className":485},[],[487],{"type":54,"value":488},"action",{"type":54,"value":490}," on ",{"type":49,"tag":115,"props":492,"children":494},{"className":493},[],[495],{"type":54,"value":496},"breaking-change",{"type":54,"value":498},"). Not style guidelines. The source of truth for the schema is ",{"type":49,"tag":115,"props":500,"children":502},{"className":501},[],[503],{"type":54,"value":504},"ChangelogEntry.cs",{"type":54,"value":506}," linked in ",{"type":49,"tag":115,"props":508,"children":510},{"className":509},[],[511],{"type":54,"value":512},"sources",{"type":54,"value":514},".",{"type":49,"tag":50,"props":516,"children":517},{},[518],{"type":49,"tag":60,"props":519,"children":520},{},[521],{"type":54,"value":522},"Required fields:",{"type":49,"tag":100,"props":524,"children":525},{},[526,537,616],{"type":49,"tag":104,"props":527,"children":528},{},[529,535],{"type":49,"tag":115,"props":530,"children":532},{"className":531},[],[533],{"type":54,"value":534},"title",{"type":54,"value":536},": must be present",{"type":49,"tag":104,"props":538,"children":539},{},[540,546,548,554,556,562,563,569,570,576,577,582,583,589,590,596,597,602,603,609,610],{"type":49,"tag":115,"props":541,"children":543},{"className":542},[],[544],{"type":54,"value":545},"type",{"type":54,"value":547},": must be present, value must be one of: ",{"type":49,"tag":115,"props":549,"children":551},{"className":550},[],[552],{"type":54,"value":553},"feature",{"type":54,"value":555},", ",{"type":49,"tag":115,"props":557,"children":559},{"className":558},[],[560],{"type":54,"value":561},"enhancement",{"type":54,"value":555},{"type":49,"tag":115,"props":564,"children":566},{"className":565},[],[567],{"type":54,"value":568},"security",{"type":54,"value":555},{"type":49,"tag":115,"props":571,"children":573},{"className":572},[],[574],{"type":54,"value":575},"bug-fix",{"type":54,"value":555},{"type":49,"tag":115,"props":578,"children":580},{"className":579},[],[581],{"type":54,"value":496},{"type":54,"value":555},{"type":49,"tag":115,"props":584,"children":586},{"className":585},[],[587],{"type":54,"value":588},"deprecation",{"type":54,"value":555},{"type":49,"tag":115,"props":591,"children":593},{"className":592},[],[594],{"type":54,"value":595},"known-issue",{"type":54,"value":555},{"type":49,"tag":115,"props":598,"children":600},{"className":599},[],[601],{"type":54,"value":29},{"type":54,"value":555},{"type":49,"tag":115,"props":604,"children":606},{"className":605},[],[607],{"type":54,"value":608},"regression",{"type":54,"value":555},{"type":49,"tag":115,"props":611,"children":613},{"className":612},[],[614],{"type":54,"value":615},"other",{"type":49,"tag":104,"props":617,"children":618},{},[619,625,627,633],{"type":49,"tag":115,"props":620,"children":622},{"className":621},[],[623],{"type":54,"value":624},"products",{"type":54,"value":626},": must be present, non-empty array; each entry must have a ",{"type":49,"tag":115,"props":628,"children":630},{"className":629},[],[631],{"type":54,"value":632},"product",{"type":54,"value":634}," key",{"type":49,"tag":50,"props":636,"children":637},{},[638,643,645,651,653,659],{"type":49,"tag":60,"props":639,"children":640},{},[641],{"type":54,"value":642},"Product ID validation:",{"type":54,"value":644}," Fetch ",{"type":49,"tag":115,"props":646,"children":648},{"className":647},[],[649],{"type":54,"value":650},"https:\u002F\u002Fraw.githubusercontent.com\u002Felastic\u002Fdocs-builder\u002Fmain\u002Fconfig\u002Fproducts.yml",{"type":54,"value":652}," to get the canonical list — valid IDs are the top-level keys under ",{"type":49,"tag":115,"props":654,"children":656},{"className":655},[],[657],{"type":54,"value":658},"products:",{"type":54,"value":660},". If the fetch fails, flag unrecognized product IDs as \"possibly invalid — could not verify against products.yml\" rather than as errors.",{"type":49,"tag":50,"props":662,"children":663},{},[664],{"type":49,"tag":60,"props":665,"children":666},{},[667],{"type":54,"value":668},"Optional field constraints:",{"type":49,"tag":100,"props":670,"children":671},{},[672,699,770,788,806,817],{"type":49,"tag":104,"props":673,"children":674},{},[675,681,683,689,691,697],{"type":49,"tag":115,"props":676,"children":678},{"className":677},[],[679],{"type":54,"value":680},"products[n].lifecycle",{"type":54,"value":682}," if present on any product entry, fetch ",{"type":49,"tag":115,"props":684,"children":686},{"className":685},[],[687],{"type":54,"value":688},"https:\u002F\u002Fgithub.com\u002Felastic\u002Fdocs-builder\u002Fblob\u002Fmain\u002Fsrc\u002FElastic.Documentation\u002FLifecycle.cs",{"type":54,"value":690}," to get canonical list (such as ",{"type":49,"tag":115,"props":692,"children":694},{"className":693},[],[695],{"type":54,"value":696},"ga",{"type":54,"value":698},")",{"type":49,"tag":104,"props":700,"children":701},{},[702,708,710,715,717,723,724,730,731,737,738,744,745,751,752,758,759,764,765],{"type":49,"tag":115,"props":703,"children":705},{"className":704},[],[706],{"type":54,"value":707},"subtype",{"type":54,"value":709},": only permitted on ",{"type":49,"tag":115,"props":711,"children":713},{"className":712},[],[714],{"type":54,"value":496},{"type":54,"value":716}," entries; value must be one of: ",{"type":49,"tag":115,"props":718,"children":720},{"className":719},[],[721],{"type":54,"value":722},"api",{"type":54,"value":555},{"type":49,"tag":115,"props":725,"children":727},{"className":726},[],[728],{"type":54,"value":729},"behavioral",{"type":54,"value":555},{"type":49,"tag":115,"props":732,"children":734},{"className":733},[],[735],{"type":54,"value":736},"configuration",{"type":54,"value":555},{"type":49,"tag":115,"props":739,"children":741},{"className":740},[],[742],{"type":54,"value":743},"dependency",{"type":54,"value":555},{"type":49,"tag":115,"props":746,"children":748},{"className":747},[],[749],{"type":54,"value":750},"subscription",{"type":54,"value":555},{"type":49,"tag":115,"props":753,"children":755},{"className":754},[],[756],{"type":54,"value":757},"plugin",{"type":54,"value":555},{"type":49,"tag":115,"props":760,"children":762},{"className":761},[],[763],{"type":54,"value":568},{"type":54,"value":555},{"type":49,"tag":115,"props":766,"children":768},{"className":767},[],[769],{"type":54,"value":615},{"type":49,"tag":104,"props":771,"children":772},{},[773,779,780,786],{"type":49,"tag":115,"props":774,"children":776},{"className":775},[],[777],{"type":54,"value":778},"prs",{"type":54,"value":450},{"type":49,"tag":115,"props":781,"children":783},{"className":782},[],[784],{"type":54,"value":785},"issues",{"type":54,"value":787},": optional arrays, may be empty or absent — no validation beyond YAML type correctness",{"type":49,"tag":104,"props":789,"children":790},{},[791,797,799,804],{"type":49,"tag":115,"props":792,"children":794},{"className":793},[],[795],{"type":54,"value":796},"areas",{"type":54,"value":798}," if present: must be an array of strings — validate against repository configuration from Step 1 if available (only flag areas not in ",{"type":49,"tag":115,"props":800,"children":802},{"className":801},[],[803],{"type":54,"value":384},{"type":54,"value":805}," pivot.areas section), otherwise use generic validation",{"type":49,"tag":104,"props":807,"children":808},{},[809,815],{"type":49,"tag":115,"props":810,"children":812},{"className":811},[],[813],{"type":54,"value":814},"feature-id",{"type":54,"value":816}," if present: must be a string — used to associate a change with a unique feature flag",{"type":49,"tag":104,"props":818,"children":819},{},[820,826],{"type":49,"tag":115,"props":821,"children":823},{"className":822},[],[824],{"type":54,"value":825},"highlight",{"type":54,"value":827}," if present: must be a boolean — marks entries for inclusion in release highlights",{"type":49,"tag":50,"props":829,"children":830},{},[831,836,838,843,844,850,851,856,857,862,864,869,871,876,878,884,885,891,892,898,899,905,907,913],{"type":49,"tag":60,"props":832,"children":833},{},[834],{"type":54,"value":835},"YAML quoting:",{"type":54,"value":837}," Text field values (",{"type":49,"tag":115,"props":839,"children":841},{"className":840},[],[842],{"type":54,"value":534},{"type":54,"value":555},{"type":49,"tag":115,"props":845,"children":847},{"className":846},[],[848],{"type":54,"value":849},"description",{"type":54,"value":555},{"type":49,"tag":115,"props":852,"children":854},{"className":853},[],[855],{"type":54,"value":481},{"type":54,"value":555},{"type":49,"tag":115,"props":858,"children":860},{"className":859},[],[861],{"type":54,"value":488},{"type":54,"value":863},") that contain ",{"type":49,"tag":115,"props":865,"children":867},{"className":866},[],[868],{"type":54,"value":173},{"type":54,"value":870}," (colon followed by a space) MUST be wrapped in quotes — an unquoted value containing ",{"type":49,"tag":115,"props":872,"children":874},{"className":873},[],[875],{"type":54,"value":173},{"type":54,"value":877}," is interpreted as the start of a new mapping key and causes a \"While scanning a plain scalar value, found invalid mapping\" error at bundle time. Also flag unquoted values containing ",{"type":49,"tag":115,"props":879,"children":881},{"className":880},[],[882],{"type":54,"value":883},"#",{"type":54,"value":555},{"type":49,"tag":115,"props":886,"children":888},{"className":887},[],[889],{"type":54,"value":890},"[",{"type":54,"value":555},{"type":49,"tag":115,"props":893,"children":895},{"className":894},[],[896],{"type":54,"value":897},"]",{"type":54,"value":555},{"type":49,"tag":115,"props":900,"children":902},{"className":901},[],[903],{"type":54,"value":904},"{",{"type":54,"value":906},", or ",{"type":49,"tag":115,"props":908,"children":910},{"className":909},[],[911],{"type":54,"value":912},"}",{"type":54,"value":914}," as these can also cause parse failures.",{"type":49,"tag":50,"props":916,"children":917},{},[918,920,926,928],{"type":54,"value":919},"Example problem: ",{"type":49,"tag":115,"props":921,"children":923},{"className":922},[],[924],{"type":54,"value":925},"description: The tool no longer accepts the flag: -c",{"type":54,"value":927},"\nCorrect form: ",{"type":49,"tag":115,"props":929,"children":931},{"className":930},[],[932],{"type":54,"value":933},"description: \"The tool no longer accepts the flag: -c\"",{"type":49,"tag":75,"props":935,"children":937},{"id":936},"step-4-quality-checks",[938],{"type":54,"value":939},"Step 4: Quality checks",{"type":49,"tag":50,"props":941,"children":942},{},[943,945,950],{"type":54,"value":944},"These are warnings. The source of truth is the changelogs style guidance linked in ",{"type":49,"tag":115,"props":946,"children":948},{"className":947},[],[949],{"type":54,"value":512},{"type":54,"value":514},{"type":49,"tag":50,"props":952,"children":953},{},[954],{"type":49,"tag":60,"props":955,"children":956},{},[957],{"type":54,"value":958},"All types:",{"type":49,"tag":100,"props":960,"children":961},{},[962,1017,1029,1049,1088,1100,1105,1110,1115],{"type":49,"tag":104,"props":963,"children":964},{},[965,967,973,974,980,981,987,988,994,995,1001,1003,1009,1010,1016],{"type":54,"value":966},"Title starts with base-form action verb (",{"type":49,"tag":115,"props":968,"children":970},{"className":969},[],[971],{"type":54,"value":972},"Add",{"type":54,"value":555},{"type":49,"tag":115,"props":975,"children":977},{"className":976},[],[978],{"type":54,"value":979},"Fix",{"type":54,"value":555},{"type":49,"tag":115,"props":982,"children":984},{"className":983},[],[985],{"type":54,"value":986},"Improve",{"type":54,"value":555},{"type":49,"tag":115,"props":989,"children":991},{"className":990},[],[992],{"type":54,"value":993},"Remove",{"type":54,"value":555},{"type":49,"tag":115,"props":996,"children":998},{"className":997},[],[999],{"type":54,"value":1000},"Update",{"type":54,"value":1002},"…) — not third-person forms (",{"type":49,"tag":115,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":54,"value":1008},"Adds",{"type":54,"value":555},{"type":49,"tag":115,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":54,"value":1015},"Fixes",{"type":54,"value":698},{"type":49,"tag":104,"props":1018,"children":1019},{},[1020,1022,1027],{"type":54,"value":1021},"Flag: title does not start with an approved base-form verb for the declared ",{"type":49,"tag":115,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":54,"value":545},{"type":54,"value":1028}," (noun-phrase titles)",{"type":49,"tag":104,"props":1030,"children":1031},{},[1032,1034,1040,1041,1047],{"type":54,"value":1033},"Flag titles starting with negative imperatives: ",{"type":49,"tag":115,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":54,"value":1039},"Don't",{"type":54,"value":555},{"type":49,"tag":115,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":54,"value":1046},"Do not",{"type":54,"value":1048}," — these are not approved leading verbs for any type",{"type":49,"tag":104,"props":1050,"children":1051},{},[1052,1054,1060,1061,1067,1068,1074,1075,1081,1082],{"type":54,"value":1053},"Flag noun-phrase or gerund-led titles: ",{"type":49,"tag":115,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":54,"value":1059},"Ability to",{"type":54,"value":555},{"type":49,"tag":115,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":54,"value":1066},"Adding",{"type":54,"value":555},{"type":49,"tag":115,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":54,"value":1073},"Changing",{"type":54,"value":555},{"type":49,"tag":115,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":54,"value":1080},"Using",{"type":54,"value":555},{"type":49,"tag":115,"props":1083,"children":1085},{"className":1084},[],[1086],{"type":54,"value":1087},"Shutdown",{"type":49,"tag":104,"props":1089,"children":1090},{},[1091,1093,1099],{"type":54,"value":1092},"Flag: slash-separated enumerations in titles (",{"type":49,"tag":115,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":54,"value":1098},"foo\u002Fbar\u002Fbaz",{"type":54,"value":698},{"type":49,"tag":104,"props":1101,"children":1102},{},[1103],{"type":54,"value":1104},"Title is specific, not vague (\"Bug fixes\" or \"Performance improvements\" are too vague)",{"type":49,"tag":104,"props":1106,"children":1107},{},[1108],{"type":54,"value":1109},"Title avoids bare internal references (\"PR #123\", \"bug #456\") — these don't help users",{"type":49,"tag":104,"props":1111,"children":1112},{},[1113],{"type":54,"value":1114},"Title and description avoid implementation-focused language (describe user impact, not code changes)",{"type":49,"tag":104,"props":1116,"children":1117},{},[1118],{"type":54,"value":1119},"Title over 80 or description over 600 characters → quality warning (guideline; low priority if ≤20 over; never a merge blocker)",{"type":49,"tag":50,"props":1121,"children":1122},{},[1123],{"type":49,"tag":60,"props":1124,"children":1125},{},[1126],{"type":54,"value":1127},"Systematic pattern warnings:",{"type":49,"tag":50,"props":1129,"children":1130},{},[1131],{"type":49,"tag":60,"props":1132,"children":1133},{},[1134],{"type":54,"value":1135},"1. Title standardization issues (from canonical Title cleanup checklist):",{"type":49,"tag":100,"props":1137,"children":1138},{},[1139,1212,1244,1268,1278,1326,1336],{"type":49,"tag":104,"props":1140,"children":1141},{},[1142,1147,1149,1155,1156,1162,1163,1169,1170,1176,1177,1183,1184,1190,1191,1197,1198,1204,1206],{"type":49,"tag":60,"props":1143,"children":1144},{},[1145],{"type":54,"value":1146},"Strip development labels:",{"type":54,"value":1148}," Remove prefixes such as ",{"type":49,"tag":115,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":54,"value":1154},"feat:",{"type":54,"value":555},{"type":49,"tag":115,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":54,"value":1161},"fix:",{"type":54,"value":555},{"type":49,"tag":115,"props":1164,"children":1166},{"className":1165},[],[1167],{"type":54,"value":1168},"Fix:",{"type":54,"value":555},{"type":49,"tag":115,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":54,"value":1175},"auto-implement:",{"type":54,"value":555},{"type":49,"tag":115,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":54,"value":1182},"ES|QL|DS",{"type":54,"value":555},{"type":49,"tag":115,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":54,"value":1189},"Aggs:",{"type":54,"value":555},{"type":49,"tag":115,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":54,"value":1196},"GPU codec:",{"type":54,"value":555},{"type":49,"tag":115,"props":1199,"children":1201},{"className":1200},[],[1202],{"type":54,"value":1203},"DiskBBQ -",{"type":54,"value":1205},", and trailing tracker fragments like ",{"type":49,"tag":115,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":54,"value":1211},"Bugfix -",{"type":49,"tag":104,"props":1213,"children":1214},{},[1215,1220,1222,1228,1229,1235,1236,1242],{"type":49,"tag":60,"props":1216,"children":1217},{},[1218],{"type":54,"value":1219},"No bracket-only team tags:",{"type":54,"value":1221}," Replace ",{"type":49,"tag":115,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":54,"value":1227},"[Security Solution]",{"type":54,"value":555},{"type":49,"tag":115,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":54,"value":1234},"[Query Rules]",{"type":54,"value":555},{"type":49,"tag":115,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":54,"value":1241},"[Inference]",{"type":54,"value":1243},", and similar with plain, user-facing wording",{"type":49,"tag":104,"props":1245,"children":1246},{},[1247,1252,1254,1259,1261,1266],{"type":49,"tag":60,"props":1248,"children":1249},{},[1250],{"type":54,"value":1251},"Strong verbs:",{"type":54,"value":1253}," Prefer ",{"type":49,"tag":134,"props":1255,"children":1256},{},[1257],{"type":54,"value":1258},"Improve validation for...",{"type":54,"value":1260}," over ",{"type":49,"tag":134,"props":1262,"children":1263},{},[1264],{"type":54,"value":1265},"Better validation for...",{"type":54,"value":1267}," (use present tense imperative: Fix, Add, Remove)",{"type":49,"tag":104,"props":1269,"children":1270},{},[1271,1276],{"type":49,"tag":60,"props":1272,"children":1273},{},[1274],{"type":54,"value":1275},"No buried lede:",{"type":54,"value":1277}," If title is vague, fold in concrete detail from description so release notes stand alone",{"type":49,"tag":104,"props":1279,"children":1280},{},[1281,1286,1288,1293,1294,1299,1300,1305,1307,1312,1313,1318,1319,1325],{"type":49,"tag":60,"props":1282,"children":1283},{},[1284],{"type":54,"value":1285},"Base-form verb requirement:",{"type":54,"value":1287}," Use ",{"type":49,"tag":115,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":54,"value":979},{"type":54,"value":555},{"type":49,"tag":115,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":54,"value":972},{"type":54,"value":555},{"type":49,"tag":115,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":54,"value":993},{"type":54,"value":1306}," (not third-person ",{"type":49,"tag":115,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":54,"value":1015},{"type":54,"value":555},{"type":49,"tag":115,"props":1314,"children":1316},{"className":1315},[],[1317],{"type":54,"value":1008},{"type":54,"value":555},{"type":49,"tag":115,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":54,"value":1324},"Removes",{"type":54,"value":698},{"type":49,"tag":104,"props":1327,"children":1328},{},[1329,1334],{"type":49,"tag":60,"props":1330,"children":1331},{},[1332],{"type":54,"value":1333},"Sentence case:",{"type":54,"value":1335}," Follow standard sentence capitalization",{"type":49,"tag":104,"props":1337,"children":1338},{},[1339,1344,1346,1352],{"type":49,"tag":60,"props":1340,"children":1341},{},[1342],{"type":54,"value":1343},"Feature\u002Fapp prefix patterns:",{"type":54,"value":1345}," Flag titles with ",{"type":49,"tag":115,"props":1347,"children":1349},{"className":1348},[],[1350],{"type":54,"value":1351},"[Feature\u002FApp]: [Action]",{"type":54,"value":1353}," patterns that need contextual integration (e.g., \"File upload: Fix bug\" should integrate the feature contextually). Skip technical terms, API references, code identifiers.",{"type":49,"tag":50,"props":1355,"children":1356},{},[1357],{"type":49,"tag":60,"props":1358,"children":1359},{},[1360],{"type":54,"value":1361},"2. Technical term enhancement issues:",{"type":49,"tag":100,"props":1363,"children":1364},{},[1365,1370,1403,1421],{"type":49,"tag":104,"props":1366,"children":1367},{},[1368],{"type":54,"value":1369},"Missing backticks around class\u002Fmethod names, config keys, API endpoints, or code identifiers",{"type":49,"tag":104,"props":1371,"children":1372},{},[1373,1375,1381,1383,1389,1390,1396,1397],{"type":54,"value":1374},"British spelling that should use US English: ",{"type":49,"tag":115,"props":1376,"children":1378},{"className":1377},[],[1379],{"type":54,"value":1380},"serialise",{"type":54,"value":1382}," → ",{"type":49,"tag":115,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":54,"value":1388},"serialize",{"type":54,"value":555},{"type":49,"tag":115,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":54,"value":1395},"colour",{"type":54,"value":1382},{"type":49,"tag":115,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":54,"value":1402},"color",{"type":49,"tag":104,"props":1404,"children":1405},{},[1406,1408,1414,1415],{"type":54,"value":1407},"Unexpanded abbreviations where full form would be clearer: ",{"type":49,"tag":115,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":54,"value":1413},"params",{"type":54,"value":1382},{"type":49,"tag":115,"props":1416,"children":1418},{"className":1417},[],[1419],{"type":54,"value":1420},"parameters",{"type":49,"tag":104,"props":1422,"children":1423},{},[1424,1426,1432,1434],{"type":54,"value":1425},"Inconsistent terminology: ",{"type":49,"tag":115,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":54,"value":1431},"ESQL",{"type":54,"value":1433}," should be standardized to ",{"type":49,"tag":115,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":54,"value":1439},"ES|QL",{"type":49,"tag":50,"props":1441,"children":1442},{},[1443],{"type":49,"tag":60,"props":1444,"children":1445},{},[1446],{"type":54,"value":1447},"3. Content quality issues:",{"type":49,"tag":100,"props":1449,"children":1450},{},[1451,1456,1475],{"type":49,"tag":104,"props":1452,"children":1453},{},[1454],{"type":54,"value":1455},"Vague titles that could be more specific based on description content",{"type":49,"tag":104,"props":1457,"children":1458},{},[1459,1461,1466,1468,1473],{"type":54,"value":1460},"Absent ",{"type":49,"tag":115,"props":1462,"children":1464},{"className":1463},[],[1465],{"type":54,"value":849},{"type":54,"value":1467}," when title is self-explanatory is fine; only flag ",{"type":49,"tag":60,"props":1469,"children":1470},{},[1471],{"type":54,"value":1472},"present",{"type":54,"value":1474}," descriptions that repeat the title, say \"See PR\", or add no context",{"type":49,"tag":104,"props":1476,"children":1477},{},[1478],{"type":54,"value":1479},"Implementation-focused phrasing instead of user-visible outcomes",{"type":49,"tag":50,"props":1481,"children":1482},{},[1483],{"type":49,"tag":60,"props":1484,"children":1485},{},[1486],{"type":54,"value":1487},"4. YAML formatting issues (cross-reference with Step 2):",{"type":49,"tag":100,"props":1489,"children":1490},{},[1491,1496],{"type":49,"tag":104,"props":1492,"children":1493},{},[1494],{"type":54,"value":1495},"Unquoted text containing special characters (see Step 2 for details)",{"type":49,"tag":104,"props":1497,"children":1498},{},[1499],{"type":54,"value":1500},"Inconsistent formatting across text fields",{"type":49,"tag":50,"props":1502,"children":1503},{},[1504],{"type":49,"tag":60,"props":1505,"children":1506},{},[1507],{"type":54,"value":1508},"5. UI element formatting issues:",{"type":49,"tag":100,"props":1510,"children":1511},{},[1512,1522,1532,1548],{"type":49,"tag":104,"props":1513,"children":1514},{},[1515,1520],{"type":49,"tag":60,"props":1516,"children":1517},{},[1518],{"type":54,"value":1519},"Unclear UI labels:",{"type":54,"value":1521}," Button names, page titles, tabs should be in \"quotation marks\" if the phrase is unclear. For example: 'Fix \"View in AI Assistant\" button availability'",{"type":49,"tag":104,"props":1523,"children":1524},{},[1525,1530],{"type":49,"tag":60,"props":1526,"children":1527},{},[1528],{"type":54,"value":1529},"Incorrectly quoted feature names:",{"type":54,"value":1531}," Feature names should be capitalized, not quoted (Machine Learning, not \"Machine Learning\")",{"type":49,"tag":104,"props":1533,"children":1534},{},[1535,1540,1542],{"type":49,"tag":60,"props":1536,"children":1537},{},[1538],{"type":54,"value":1539},"Missing backticks:",{"type":54,"value":1541}," Field names, parameters, API endpoints should use ",{"type":49,"tag":115,"props":1543,"children":1545},{"className":1544},[],[1546],{"type":54,"value":1547},"backticks",{"type":49,"tag":104,"props":1549,"children":1550},{},[1551,1556],{"type":49,"tag":60,"props":1552,"children":1553},{},[1554],{"type":54,"value":1555},"UI vs feature uncertainty:",{"type":54,"value":1557}," Flag when formatting choice between UI label and feature name is unclear",{"type":49,"tag":50,"props":1559,"children":1560},{},[1561],{"type":49,"tag":60,"props":1562,"children":1563},{},[1564],{"type":54,"value":1565},"5. Type-title alignment issues:",{"type":49,"tag":50,"props":1567,"children":1568},{},[1569,1571,1576,1577,1582],{"type":54,"value":1570},"Flag when changelog ",{"type":49,"tag":115,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":54,"value":545},{"type":54,"value":450},{"type":49,"tag":115,"props":1578,"children":1580},{"className":1579},[],[1581],{"type":54,"value":534},{"type":54,"value":1583}," verb patterns don't align, indicating potential misclassification:",{"type":49,"tag":100,"props":1585,"children":1586},{},[1587,1682,1744,1909,2011,2096],{"type":49,"tag":104,"props":1588,"children":1589},{},[1590,1606,1608,1613,1614,1620,1621,1626,1627,1633,1635,1640,1641,1647,1648,1654],{"type":49,"tag":60,"props":1591,"children":1592},{},[1593,1598,1599,1604],{"type":49,"tag":115,"props":1594,"children":1596},{"className":1595},[],[1597],{"type":54,"value":575},{"type":54,"value":227},{"type":49,"tag":115,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":54,"value":608},{"type":54,"value":1605}," misalignment:",{"type":54,"value":1607}," Title uses ",{"type":49,"tag":115,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":54,"value":986},{"type":54,"value":555},{"type":49,"tag":115,"props":1615,"children":1617},{"className":1616},[],[1618],{"type":54,"value":1619},"Enable",{"type":54,"value":555},{"type":49,"tag":115,"props":1622,"children":1624},{"className":1623},[],[1625],{"type":54,"value":1000},{"type":54,"value":555},{"type":49,"tag":115,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":54,"value":1632},"Enhance",{"type":54,"value":1634}," instead of expected ",{"type":49,"tag":115,"props":1636,"children":1638},{"className":1637},[],[1639],{"type":54,"value":979},{"type":54,"value":555},{"type":49,"tag":115,"props":1642,"children":1644},{"className":1643},[],[1645],{"type":54,"value":1646},"Resolve",{"type":54,"value":555},{"type":49,"tag":115,"props":1649,"children":1651},{"className":1650},[],[1652],{"type":54,"value":1653},"Correct",{"type":49,"tag":100,"props":1655,"children":1656},{},[1657,1667],{"type":49,"tag":104,"props":1658,"children":1659},{},[1660,1665],{"type":49,"tag":60,"props":1661,"children":1662},{},[1663],{"type":54,"value":1664},"Warning:",{"type":54,"value":1666}," Type suggests fixing broken behavior, but title implies improvement\u002Faddition",{"type":49,"tag":104,"props":1668,"children":1669},{},[1670,1675,1677],{"type":49,"tag":60,"props":1671,"children":1672},{},[1673],{"type":54,"value":1674},"Suggest:",{"type":54,"value":1676}," Review whether behavior was actually broken or if this should be ",{"type":49,"tag":115,"props":1678,"children":1680},{"className":1679},[],[1681],{"type":54,"value":561},{"type":49,"tag":104,"props":1683,"children":1684},{},[1685,1701,1703,1708,1710,1716,1717,1723,1724,1730,1731,1737,1739],{"type":49,"tag":60,"props":1686,"children":1687},{},[1688,1693,1694,1699],{"type":49,"tag":115,"props":1689,"children":1691},{"className":1690},[],[1692],{"type":54,"value":575},{"type":54,"value":227},{"type":49,"tag":115,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":54,"value":608},{"type":54,"value":1700}," enhancement verbs:",{"type":54,"value":1702}," On ",{"type":49,"tag":115,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":54,"value":575},{"type":54,"value":1709},", flag titles starting with ",{"type":49,"tag":115,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":54,"value":1715},"Default",{"type":54,"value":555},{"type":49,"tag":115,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":54,"value":1722},"Reserve",{"type":54,"value":555},{"type":49,"tag":115,"props":1725,"children":1727},{"className":1726},[],[1728],{"type":54,"value":1729},"Ensure",{"type":54,"value":906},{"type":49,"tag":115,"props":1732,"children":1734},{"className":1733},[],[1735],{"type":54,"value":1736},"Close",{"type":54,"value":1738}," without ",{"type":49,"tag":115,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":54,"value":979},{"type":49,"tag":104,"props":1745,"children":1746},{},[1747,1763,1765,1770,1771,1776,1777,1782],{"type":49,"tag":60,"props":1748,"children":1749},{},[1750,1755,1756,1761],{"type":49,"tag":115,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":54,"value":575},{"type":54,"value":227},{"type":49,"tag":115,"props":1757,"children":1759},{"className":1758},[],[1760],{"type":54,"value":608},{"type":54,"value":1762}," preventive\u002Frestrictive framing:",{"type":54,"value":1764}," Flag titles that describe a new restriction or validation rather than the user-visible failure, especially when the title does NOT start with ",{"type":49,"tag":115,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":54,"value":979},{"type":54,"value":555},{"type":49,"tag":115,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":54,"value":1646},{"type":54,"value":906},{"type":49,"tag":115,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":54,"value":1653},{"type":49,"tag":100,"props":1783,"children":1784},{},[1785,1861,1870,1887],{"type":49,"tag":104,"props":1786,"children":1787},{},[1788,1793,1794,1799,1800,1805,1806,1812,1813,1819,1820,1826,1827,1833,1834,1840,1841,1847,1848,1854,1855],{"type":49,"tag":60,"props":1789,"children":1790},{},[1791],{"type":54,"value":1792},"Leading patterns to flag:",{"type":54,"value":132},{"type":49,"tag":115,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":54,"value":1039},{"type":54,"value":555},{"type":49,"tag":115,"props":1801,"children":1803},{"className":1802},[],[1804],{"type":54,"value":1046},{"type":54,"value":555},{"type":49,"tag":115,"props":1807,"children":1809},{"className":1808},[],[1810],{"type":54,"value":1811},"Disallow",{"type":54,"value":555},{"type":49,"tag":115,"props":1814,"children":1816},{"className":1815},[],[1817],{"type":54,"value":1818},"Prevent",{"type":54,"value":555},{"type":49,"tag":115,"props":1821,"children":1823},{"className":1822},[],[1824],{"type":54,"value":1825},"Reject",{"type":54,"value":555},{"type":49,"tag":115,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":54,"value":1832},"Block",{"type":54,"value":555},{"type":49,"tag":115,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":54,"value":1839},"Forbid",{"type":54,"value":555},{"type":49,"tag":115,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":54,"value":1846},"Prohibit",{"type":54,"value":555},{"type":49,"tag":115,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":54,"value":1853},"Restrict",{"type":54,"value":555},{"type":49,"tag":115,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":54,"value":1860},"No longer allow",{"type":49,"tag":104,"props":1862,"children":1863},{},[1864,1868],{"type":49,"tag":60,"props":1865,"children":1866},{},[1867],{"type":54,"value":1664},{"type":54,"value":1869}," Title explains what is now blocked, not what was broken (recovery failure, query error, cluster red, etc.)",{"type":49,"tag":104,"props":1871,"children":1872},{},[1873,1877,1879,1885],{"type":49,"tag":60,"props":1874,"children":1875},{},[1876],{"type":54,"value":1674},{"type":54,"value":1878}," Rewrite as ",{"type":49,"tag":115,"props":1880,"children":1882},{"className":1881},[],[1883],{"type":54,"value":1884},"Fix [symptom] when [condition]",{"type":54,"value":1886}," — e.g. \"Don't allow runtime fields to shadow index sort fields\" → \"Fix shard recovery failures when runtime fields shadow index sort fields\"",{"type":49,"tag":104,"props":1888,"children":1889},{},[1890,1895,1897,1902,1904],{"type":49,"tag":60,"props":1891,"children":1892},{},[1893],{"type":54,"value":1894},"Type note:",{"type":54,"value":1896}," If the change only adds validation with no prior user-visible failure, consider ",{"type":49,"tag":115,"props":1898,"children":1900},{"className":1899},[],[1901],{"type":54,"value":561},{"type":54,"value":1903}," instead of ",{"type":49,"tag":115,"props":1905,"children":1907},{"className":1906},[],[1908],{"type":54,"value":575},{"type":49,"tag":104,"props":1910,"children":1911},{},[1912,1921,1922,1927,1928,1933,1934,1939,1940,1945,1946,1951,1952,1958,1959,1964,1965,1971,1972,1977],{"type":49,"tag":60,"props":1913,"children":1914},{},[1915,1920],{"type":49,"tag":115,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":54,"value":561},{"type":54,"value":1605},{"type":54,"value":1607},{"type":49,"tag":115,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":54,"value":979},{"type":54,"value":555},{"type":49,"tag":115,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":54,"value":1646},{"type":54,"value":555},{"type":49,"tag":115,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":54,"value":1653},{"type":54,"value":1634},{"type":49,"tag":115,"props":1941,"children":1943},{"className":1942},[],[1944],{"type":54,"value":986},{"type":54,"value":555},{"type":49,"tag":115,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":54,"value":1000},{"type":54,"value":555},{"type":49,"tag":115,"props":1953,"children":1955},{"className":1954},[],[1956],{"type":54,"value":1957},"Optimize",{"type":54,"value":555},{"type":49,"tag":115,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":54,"value":1619},{"type":54,"value":555},{"type":49,"tag":115,"props":1966,"children":1968},{"className":1967},[],[1969],{"type":54,"value":1970},"Expand",{"type":54,"value":555},{"type":49,"tag":115,"props":1973,"children":1975},{"className":1974},[],[1976],{"type":54,"value":1632},{"type":49,"tag":100,"props":1978,"children":1979},{},[1980,1989],{"type":49,"tag":104,"props":1981,"children":1982},{},[1983,1987],{"type":49,"tag":60,"props":1984,"children":1985},{},[1986],{"type":54,"value":1664},{"type":54,"value":1988}," Type suggests improving working functionality, but title implies fixing broken behavior",{"type":49,"tag":104,"props":1990,"children":1991},{},[1992,1996,1998,2003,2005,2010],{"type":49,"tag":60,"props":1993,"children":1994},{},[1995],{"type":54,"value":1674},{"type":54,"value":1997}," Review whether behavior was broken (→ ",{"type":49,"tag":115,"props":1999,"children":2001},{"className":2000},[],[2002],{"type":54,"value":575},{"type":54,"value":2004},") or truly an optimization (keep ",{"type":49,"tag":115,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":54,"value":561},{"type":54,"value":698},{"type":49,"tag":104,"props":2012,"children":2013},{},[2014,2023,2024,2029,2030,2035,2037],{"type":49,"tag":60,"props":2015,"children":2016},{},[2017,2022],{"type":49,"tag":115,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":54,"value":553},{"type":54,"value":1605},{"type":54,"value":1607},{"type":49,"tag":115,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":54,"value":979},{"type":54,"value":555},{"type":49,"tag":115,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":54,"value":986},{"type":54,"value":2036}," for substantial new capabilities",{"type":49,"tag":100,"props":2038,"children":2039},{},[2040,2074],{"type":49,"tag":104,"props":2041,"children":2042},{},[2043,2047,2049,2054,2055,2061,2062,2067,2068],{"type":49,"tag":60,"props":2044,"children":2045},{},[2046],{"type":54,"value":1664},{"type":54,"value":2048}," Major new functionality should use ",{"type":49,"tag":115,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":54,"value":972},{"type":54,"value":555},{"type":49,"tag":115,"props":2056,"children":2058},{"className":2057},[],[2059],{"type":54,"value":2060},"Introduce",{"type":54,"value":555},{"type":49,"tag":115,"props":2063,"children":2065},{"className":2064},[],[2066],{"type":54,"value":1619},{"type":54,"value":555},{"type":49,"tag":115,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":54,"value":2073},"Support",{"type":49,"tag":104,"props":2075,"children":2076},{},[2077,2081,2083,2088,2090,2095],{"type":49,"tag":60,"props":2078,"children":2079},{},[2080],{"type":54,"value":1674},{"type":54,"value":2082}," Review scope - substantial new capability (→ ",{"type":49,"tag":115,"props":2084,"children":2086},{"className":2085},[],[2087],{"type":54,"value":553},{"type":54,"value":2089},") vs minor addition (→ ",{"type":49,"tag":115,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":54,"value":561},{"type":54,"value":698},{"type":49,"tag":104,"props":2097,"children":2098},{},[2099,2108,2110],{"type":49,"tag":60,"props":2100,"children":2101},{},[2102,2107],{"type":49,"tag":115,"props":2103,"children":2105},{"className":2104},[],[2106],{"type":54,"value":29},{"type":54,"value":1605},{"type":54,"value":2109}," Title doesn't focus on documentation clarity\u002Faccuracy",{"type":49,"tag":100,"props":2111,"children":2112},{},[2113],{"type":49,"tag":104,"props":2114,"children":2115},{},[2116,2120,2122,2127,2128,2133,2134,2140,2141],{"type":49,"tag":60,"props":2117,"children":2118},{},[2119],{"type":54,"value":1664},{"type":54,"value":2121}," Documentation changes should use ",{"type":49,"tag":115,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":54,"value":1000},{"type":54,"value":555},{"type":49,"tag":115,"props":2129,"children":2131},{"className":2130},[],[2132],{"type":54,"value":972},{"type":54,"value":555},{"type":49,"tag":115,"props":2135,"children":2137},{"className":2136},[],[2138],{"type":54,"value":2139},"Clarify",{"type":54,"value":555},{"type":49,"tag":115,"props":2142,"children":2144},{"className":2143},[],[2145],{"type":54,"value":2146},"Document",{"type":49,"tag":50,"props":2148,"children":2149},{},[2150],{"type":49,"tag":60,"props":2151,"children":2152},{},[2153],{"type":54,"value":2154},"Example patterns to flag:",{"type":49,"tag":100,"props":2156,"children":2157},{},[2158,2175,2191,2206],{"type":49,"tag":104,"props":2159,"children":2160},{},[2161,2163,2168,2170],{"type":54,"value":2162},"Type ",{"type":49,"tag":115,"props":2164,"children":2166},{"className":2165},[],[2167],{"type":54,"value":575},{"type":54,"value":2169}," + \"Improve query approximation accuracy...\" → ",{"type":49,"tag":60,"props":2171,"children":2172},{},[2173],{"type":54,"value":2174},"Flag alignment mismatch",{"type":49,"tag":104,"props":2176,"children":2177},{},[2178,2179,2184,2186],{"type":54,"value":2162},{"type":49,"tag":115,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":54,"value":575},{"type":54,"value":2185}," + \"Don't allow runtime fields to shadow fields used in index sort\" → ",{"type":49,"tag":60,"props":2187,"children":2188},{},[2189],{"type":54,"value":2190},"Flag preventive framing + verb mismatch",{"type":49,"tag":104,"props":2192,"children":2193},{},[2194,2195,2200,2202],{"type":54,"value":2162},{"type":49,"tag":115,"props":2196,"children":2198},{"className":2197},[],[2199],{"type":54,"value":561},{"type":54,"value":2201}," + \"Fix Painless score scripts...\" → ",{"type":49,"tag":60,"props":2203,"children":2204},{},[2205],{"type":54,"value":2174},{"type":49,"tag":104,"props":2207,"children":2208},{},[2209,2210,2215,2217],{"type":54,"value":2162},{"type":49,"tag":115,"props":2211,"children":2213},{"className":2212},[],[2214],{"type":54,"value":561},{"type":54,"value":2216}," + \"Fix ES|QL performance issues...\" → ",{"type":49,"tag":60,"props":2218,"children":2219},{},[2220],{"type":54,"value":2174},{"type":49,"tag":50,"props":2222,"children":2223},{},[2224],{"type":49,"tag":60,"props":2225,"children":2226},{},[2227],{"type":54,"value":2228},"6. Technical content issues:",{"type":49,"tag":50,"props":2230,"children":2231},{},[2232],{"type":54,"value":2233},"Flag overly technical titles that focus on implementation details rather than user impact:",{"type":49,"tag":100,"props":2235,"children":2236},{},[2237,2278,2309,2340,2362,2380,2411],{"type":49,"tag":104,"props":2238,"children":2239},{},[2240,2245,2247],{"type":49,"tag":60,"props":2241,"children":2242},{},[2243],{"type":54,"value":2244},"Implementation-focused titles:",{"type":54,"value":2246}," Class names, method names, or internal processes without user context",{"type":49,"tag":100,"props":2248,"children":2249},{},[2250,2259,2269],{"type":49,"tag":104,"props":2251,"children":2252},{},[2253,2257],{"type":49,"tag":60,"props":2254,"children":2255},{},[2256],{"type":54,"value":1664},{"type":54,"value":2258}," Title focuses on code changes rather than user-visible symptoms",{"type":49,"tag":104,"props":2260,"children":2261},{},[2262,2267],{"type":49,"tag":60,"props":2263,"children":2264},{},[2265],{"type":54,"value":2266},"Example:",{"type":54,"value":2268}," \"Fix splitValue nullability coercion when constructing ColorSeries\" → Flag as too technical",{"type":49,"tag":104,"props":2270,"children":2271},{},[2272,2276],{"type":49,"tag":60,"props":2273,"children":2274},{},[2275],{"type":54,"value":1674},{"type":54,"value":2277}," Rewrite to describe user-visible impact like \"Fix inline charts with grey time series for ES|QL queries\"",{"type":49,"tag":104,"props":2279,"children":2280},{},[2281,2286,2288],{"type":49,"tag":60,"props":2282,"children":2283},{},[2284],{"type":54,"value":2285},"Technical jargon without context:",{"type":54,"value":2287}," Multiple technical terms that don't explain user experience",{"type":49,"tag":100,"props":2289,"children":2290},{},[2291,2300],{"type":49,"tag":104,"props":2292,"children":2293},{},[2294,2298],{"type":49,"tag":60,"props":2295,"children":2296},{},[2297],{"type":54,"value":1664},{"type":54,"value":2299}," Title requires deep technical knowledge to understand user impact",{"type":49,"tag":104,"props":2301,"children":2302},{},[2303,2307],{"type":49,"tag":60,"props":2304,"children":2305},{},[2306],{"type":54,"value":1674},{"type":54,"value":2308}," Focus on what users see, not how code works",{"type":49,"tag":104,"props":2310,"children":2311},{},[2312,2317,2319],{"type":49,"tag":60,"props":2313,"children":2314},{},[2315],{"type":54,"value":2316},"Missing user symptoms:",{"type":54,"value":2318}," Describes internal fixes without explaining external effects",{"type":49,"tag":100,"props":2320,"children":2321},{},[2322,2331],{"type":49,"tag":104,"props":2323,"children":2324},{},[2325,2329],{"type":49,"tag":60,"props":2326,"children":2327},{},[2328],{"type":54,"value":1664},{"type":54,"value":2330}," Users can't determine if this change affects them",{"type":49,"tag":104,"props":2332,"children":2333},{},[2334,2338],{"type":49,"tag":60,"props":2335,"children":2336},{},[2337],{"type":54,"value":1674},{"type":54,"value":2339}," Include user-facing symptoms or feature areas affected",{"type":49,"tag":104,"props":2341,"children":2342},{},[2343,2348,2349,2354,2355,2360],{"type":49,"tag":60,"props":2344,"children":2345},{},[2346],{"type":54,"value":2347},"Preventive vs corrective:",{"type":54,"value":1702},{"type":49,"tag":115,"props":2350,"children":2352},{"className":2351},[],[2353],{"type":54,"value":575},{"type":54,"value":227},{"type":49,"tag":115,"props":2356,"children":2358},{"className":2357},[],[2359],{"type":54,"value":608},{"type":54,"value":2361},", if the title lacks symptom words (fail, error, crash, leak, hang, timeout, incorrect, missing, red, unallocated) and instead uses restriction words (allow, disallow, prevent, reject, validate, block), flag as likely preventive framing — soft heuristic for human review, not auto-fail",{"type":49,"tag":104,"props":2363,"children":2364},{},[2365,2370,2372,2378],{"type":49,"tag":60,"props":2366,"children":2367},{},[2368],{"type":54,"value":2369},"Dev\u002Ftest language:",{"type":54,"value":2371}," Flag ",{"type":49,"tag":115,"props":2373,"children":2375},{"className":2374},[],[2376],{"type":54,"value":2377},"Repro and fix",{"type":54,"value":2379}," phrasing and PR-title passthrough with class\u002Fmethod names",{"type":49,"tag":104,"props":2381,"children":2382},{},[2383,2388,2389,2395,2396,2402,2404,2409],{"type":49,"tag":60,"props":2384,"children":2385},{},[2386],{"type":54,"value":2387},"Unexpanded dev acronyms:",{"type":54,"value":2371},{"type":49,"tag":115,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":54,"value":2394},"NPE",{"type":54,"value":555},{"type":49,"tag":115,"props":2397,"children":2399},{"className":2398},[],[2400],{"type":54,"value":2401},"UOE",{"type":54,"value":2403}," — expand per ",{"type":49,"tag":115,"props":2405,"children":2407},{"className":2406},[],[2408],{"type":54,"value":146},{"type":54,"value":2410}," acronym table",{"type":49,"tag":104,"props":2412,"children":2413},{},[2414,2419,2421,2426,2428,2433,2435,2441,2442,2448],{"type":49,"tag":60,"props":2415,"children":2416},{},[2417],{"type":54,"value":2418},"ES|QL function tokens:",{"type":54,"value":2420}," When ",{"type":49,"tag":115,"props":2422,"children":2424},{"className":2423},[],[2425],{"type":54,"value":796},{"type":54,"value":2427}," includes ",{"type":49,"tag":115,"props":2429,"children":2431},{"className":2430},[],[2432],{"type":54,"value":1439},{"type":54,"value":2434},", flag unbackticked function names (",{"type":49,"tag":115,"props":2436,"children":2438},{"className":2437},[],[2439],{"type":54,"value":2440},"UNION_BY_NAME",{"type":54,"value":555},{"type":49,"tag":115,"props":2443,"children":2445},{"className":2444},[],[2446],{"type":54,"value":2447},"JSON_EXTRACT",{"type":54,"value":2449},", etc.)",{"type":49,"tag":50,"props":2451,"children":2452},{},[2453],{"type":49,"tag":60,"props":2454,"children":2455},{},[2456],{"type":54,"value":2457},"Eligibility (report only — never delete files):",{"type":49,"tag":100,"props":2459,"children":2460},{},[2461,2466,2471],{"type":49,"tag":104,"props":2462,"children":2463},{},[2464],{"type":54,"value":2465},"Recommend removal when linked PR\u002Fissue is test-only, refactor-only, or internal plumbing with no user-visible change",{"type":49,"tag":104,"props":2467,"children":2468},{},[2469],{"type":54,"value":2470},"Without PR context: flag title\u002Fdescription mentioning test-only work or internal refactor",{"type":49,"tag":104,"props":2472,"children":2473},{},[2474,2476,2482],{"type":54,"value":2475},"Report under ",{"type":49,"tag":115,"props":2477,"children":2479},{"className":2478},[],[2480],{"type":54,"value":2481},"### Recommend removal",{"type":54,"value":2483},"; do not modify or delete files",{"type":49,"tag":50,"props":2485,"children":2486},{},[2487],{"type":49,"tag":60,"props":2488,"children":2489},{},[2490],{"type":54,"value":2491},"Type-specific:",{"type":49,"tag":100,"props":2493,"children":2494},{},[2495,2525,2554,2571,2587,2599,2609],{"type":49,"tag":104,"props":2496,"children":2497},{},[2498,2503,2505,2510,2511,2516,2518,2523],{"type":49,"tag":115,"props":2499,"children":2501},{"className":2500},[],[2502],{"type":54,"value":496},{"type":54,"value":2504},": ",{"type":49,"tag":115,"props":2506,"children":2508},{"className":2507},[],[2509],{"type":54,"value":481},{"type":54,"value":450},{"type":49,"tag":115,"props":2512,"children":2514},{"className":2513},[],[2515],{"type":54,"value":488},{"type":54,"value":2517}," are REQUIRED — flag as errors if absent; ",{"type":49,"tag":115,"props":2519,"children":2521},{"className":2520},[],[2522],{"type":54,"value":707},{"type":54,"value":2524}," is strongly recommended",{"type":49,"tag":104,"props":2526,"children":2527},{},[2528,2533,2534,2539,2540,2545,2547,2552],{"type":49,"tag":115,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":54,"value":588},{"type":54,"value":450},{"type":49,"tag":115,"props":2535,"children":2537},{"className":2536},[],[2538],{"type":54,"value":595},{"type":54,"value":2504},{"type":49,"tag":115,"props":2541,"children":2543},{"className":2542},[],[2544],{"type":54,"value":481},{"type":54,"value":2546}," and\u002For ",{"type":49,"tag":115,"props":2548,"children":2550},{"className":2549},[],[2551],{"type":54,"value":488},{"type":54,"value":2553}," are recommended — flag as warnings if absent",{"type":49,"tag":104,"props":2555,"children":2556},{},[2557,2562,2564,2569],{"type":49,"tag":115,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":54,"value":553},{"type":54,"value":2563}," \u002F ",{"type":49,"tag":115,"props":2565,"children":2567},{"className":2566},[],[2568],{"type":54,"value":561},{"type":54,"value":2570},": title\u002Fdescription should explain what users can now do, not how it was built",{"type":49,"tag":104,"props":2572,"children":2573},{},[2574,2579,2580,2585],{"type":49,"tag":115,"props":2575,"children":2577},{"className":2576},[],[2578],{"type":54,"value":575},{"type":54,"value":2563},{"type":49,"tag":115,"props":2581,"children":2583},{"className":2582},[],[2584],{"type":54,"value":608},{"type":54,"value":2586},": title\u002Fdescription should explain what was wrong and what is now correct",{"type":49,"tag":104,"props":2588,"children":2589},{},[2590,2592,2597],{"type":54,"value":2591},"When present, ",{"type":49,"tag":115,"props":2593,"children":2595},{"className":2594},[],[2596],{"type":54,"value":849},{"type":54,"value":2598}," must add context beyond repeating the title; flagging \"See PR\" or \"Internal refactoring\" as low-value",{"type":49,"tag":104,"props":2600,"children":2601},{},[2602,2607],{"type":49,"tag":115,"props":2603,"children":2605},{"className":2604},[],[2606],{"type":54,"value":481},{"type":54,"value":2608}," if present: should explain scope and who is affected",{"type":49,"tag":104,"props":2610,"children":2611},{},[2612,2617],{"type":49,"tag":115,"props":2613,"children":2615},{"className":2614},[],[2616],{"type":54,"value":488},{"type":54,"value":2618}," if present: should provide clear, prescriptive steps",{"type":49,"tag":75,"props":2620,"children":2622},{"id":2621},"step-5-formatting-checks",[2623],{"type":54,"value":2624},"Step 5: Formatting checks",{"type":49,"tag":50,"props":2626,"children":2627},{},[2628,2630,2635,2636,2641,2643,2648],{"type":54,"value":2629},"These are warnings. Check ",{"type":49,"tag":115,"props":2631,"children":2633},{"className":2632},[],[2634],{"type":54,"value":849},{"type":54,"value":555},{"type":49,"tag":115,"props":2637,"children":2639},{"className":2638},[],[2640],{"type":54,"value":481},{"type":54,"value":2642},", and ",{"type":49,"tag":115,"props":2644,"children":2646},{"className":2645},[],[2647],{"type":54,"value":488},{"type":54,"value":2649}," field values for formatting consistency.",{"type":49,"tag":50,"props":2651,"children":2652},{},[2653],{"type":49,"tag":60,"props":2654,"children":2655},{},[2656],{"type":54,"value":2657},"Link formatting:",{"type":49,"tag":100,"props":2659,"children":2660},{},[2661,2674],{"type":49,"tag":104,"props":2662,"children":2663},{},[2664,2666,2672],{"type":54,"value":2665},"Bare URLs used as link text — should use ",{"type":49,"tag":115,"props":2667,"children":2669},{"className":2668},[],[2670],{"type":54,"value":2671},"[descriptive text](url)",{"type":54,"value":2673}," instead",{"type":49,"tag":104,"props":2675,"children":2676},{},[2677],{"type":54,"value":2678},"Generic link text like \"click here\" or \"read more\" — should be descriptive of the destination",{"type":49,"tag":50,"props":2680,"children":2681},{},[2682],{"type":49,"tag":60,"props":2683,"children":2684},{},[2685],{"type":54,"value":2686},"Code formatting:",{"type":49,"tag":100,"props":2688,"children":2689},{},[2690,2730,2735],{"type":49,"tag":104,"props":2691,"children":2692},{},[2693,2695,2701,2703,2708,2709,2715,2716,2722,2723,2729],{"type":54,"value":2694},"Code fences without a language identifier — e.g. ",{"type":49,"tag":115,"props":2696,"children":2698},{"className":2697},[],[2699],{"type":54,"value":2700},"```",{"type":54,"value":2702}," with no language tag (use ",{"type":49,"tag":115,"props":2704,"children":2706},{"className":2705},[],[2707],{"type":54,"value":18},{"type":54,"value":555},{"type":49,"tag":115,"props":2710,"children":2712},{"className":2711},[],[2713],{"type":54,"value":2714},"json",{"type":54,"value":555},{"type":49,"tag":115,"props":2717,"children":2719},{"className":2718},[],[2720],{"type":54,"value":2721},"bash",{"type":54,"value":555},{"type":49,"tag":115,"props":2724,"children":2726},{"className":2725},[],[2727],{"type":54,"value":2728},"console",{"type":54,"value":2449},{"type":49,"tag":104,"props":2731,"children":2732},{},[2733],{"type":54,"value":2734},"Field names, config keys, commands, class names, or API endpoints written as plain text — should use inline backticks",{"type":49,"tag":104,"props":2736,"children":2737},{},[2738],{"type":54,"value":2739},"Missing backticks around obvious code identifiers like method names, parameter names, or specific values",{"type":49,"tag":50,"props":2741,"children":2742},{},[2743],{"type":49,"tag":60,"props":2744,"children":2745},{},[2746],{"type":54,"value":2747},"Text formatting:",{"type":49,"tag":100,"props":2749,"children":2750},{},[2751,2756],{"type":49,"tag":104,"props":2752,"children":2753},{},[2754],{"type":54,"value":2755},"Inconsistent spelling (should follow US English conventions)",{"type":49,"tag":104,"props":2757,"children":2758},{},[2759],{"type":54,"value":2760},"Inconsistent terminology",{"type":49,"tag":75,"props":2762,"children":2764},{"id":2763},"step-6-report",[2765],{"type":54,"value":2766},"Step 6: Report",{"type":49,"tag":50,"props":2768,"children":2769},{},[2770],{"type":54,"value":2771},"Produce one section per file reviewed. Omit empty sections. Use this format:",{"type":49,"tag":2773,"props":2774,"children":2779},"pre",{"className":2775,"code":2776,"language":2777,"meta":2778,"style":2778},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Changelog review: \u003Cfilename>\n\n### Summary\n- N schema errors, M quality warnings, P formatting warnings\n\n### Schema errors\n- `field`: description of the problem\n\n### Quality warnings\n- `field`: description of the problem\n\n### Formatting warnings\n- `field`: description of the problem\n\n### Recommend removal\n- Optional; include only when eligibility checks fire — reason and PR\u002Fissue reference if available\n","markdown","",[2780],{"type":49,"tag":115,"props":2781,"children":2782},{"__ignoreMap":2778},[2783,2801,2811,2825,2840,2848,2861,2890,2898,2910,2934,2942,2955,2979,2987,3000],{"type":49,"tag":2784,"props":2785,"children":2788},"span",{"class":2786,"line":2787},"line",1,[2789,2795],{"type":49,"tag":2784,"props":2790,"children":2792},{"style":2791},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[2793],{"type":54,"value":2794},"## ",{"type":49,"tag":2784,"props":2796,"children":2798},{"style":2797},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2799],{"type":54,"value":2800},"Changelog review: \u003Cfilename>\n",{"type":49,"tag":2784,"props":2802,"children":2804},{"class":2786,"line":2803},2,[2805],{"type":49,"tag":2784,"props":2806,"children":2808},{"emptyLinePlaceholder":2807},true,[2809],{"type":54,"value":2810},"\n",{"type":49,"tag":2784,"props":2812,"children":2814},{"class":2786,"line":2813},3,[2815,2820],{"type":49,"tag":2784,"props":2816,"children":2817},{"style":2791},[2818],{"type":54,"value":2819},"### ",{"type":49,"tag":2784,"props":2821,"children":2822},{"style":2797},[2823],{"type":54,"value":2824},"Summary\n",{"type":49,"tag":2784,"props":2826,"children":2828},{"class":2786,"line":2827},4,[2829,2834],{"type":49,"tag":2784,"props":2830,"children":2831},{"style":2791},[2832],{"type":54,"value":2833},"-",{"type":49,"tag":2784,"props":2835,"children":2837},{"style":2836},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[2838],{"type":54,"value":2839}," N schema errors, M quality warnings, P formatting warnings\n",{"type":49,"tag":2784,"props":2841,"children":2843},{"class":2786,"line":2842},5,[2844],{"type":49,"tag":2784,"props":2845,"children":2846},{"emptyLinePlaceholder":2807},[2847],{"type":54,"value":2810},{"type":49,"tag":2784,"props":2849,"children":2851},{"class":2786,"line":2850},6,[2852,2856],{"type":49,"tag":2784,"props":2853,"children":2854},{"style":2791},[2855],{"type":54,"value":2819},{"type":49,"tag":2784,"props":2857,"children":2858},{"style":2797},[2859],{"type":54,"value":2860},"Schema errors\n",{"type":49,"tag":2784,"props":2862,"children":2864},{"class":2786,"line":2863},7,[2865,2869,2874,2880,2885],{"type":49,"tag":2784,"props":2866,"children":2867},{"style":2791},[2868],{"type":54,"value":2833},{"type":49,"tag":2784,"props":2870,"children":2871},{"style":2791},[2872],{"type":54,"value":2873}," `",{"type":49,"tag":2784,"props":2875,"children":2877},{"style":2876},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[2878],{"type":54,"value":2879},"field",{"type":49,"tag":2784,"props":2881,"children":2882},{"style":2791},[2883],{"type":54,"value":2884},"`",{"type":49,"tag":2784,"props":2886,"children":2887},{"style":2836},[2888],{"type":54,"value":2889},": description of the problem\n",{"type":49,"tag":2784,"props":2891,"children":2893},{"class":2786,"line":2892},8,[2894],{"type":49,"tag":2784,"props":2895,"children":2896},{"emptyLinePlaceholder":2807},[2897],{"type":54,"value":2810},{"type":49,"tag":2784,"props":2899,"children":2900},{"class":2786,"line":27},[2901,2905],{"type":49,"tag":2784,"props":2902,"children":2903},{"style":2791},[2904],{"type":54,"value":2819},{"type":49,"tag":2784,"props":2906,"children":2907},{"style":2797},[2908],{"type":54,"value":2909},"Quality warnings\n",{"type":49,"tag":2784,"props":2911,"children":2913},{"class":2786,"line":2912},10,[2914,2918,2922,2926,2930],{"type":49,"tag":2784,"props":2915,"children":2916},{"style":2791},[2917],{"type":54,"value":2833},{"type":49,"tag":2784,"props":2919,"children":2920},{"style":2791},[2921],{"type":54,"value":2873},{"type":49,"tag":2784,"props":2923,"children":2924},{"style":2876},[2925],{"type":54,"value":2879},{"type":49,"tag":2784,"props":2927,"children":2928},{"style":2791},[2929],{"type":54,"value":2884},{"type":49,"tag":2784,"props":2931,"children":2932},{"style":2836},[2933],{"type":54,"value":2889},{"type":49,"tag":2784,"props":2935,"children":2937},{"class":2786,"line":2936},11,[2938],{"type":49,"tag":2784,"props":2939,"children":2940},{"emptyLinePlaceholder":2807},[2941],{"type":54,"value":2810},{"type":49,"tag":2784,"props":2943,"children":2945},{"class":2786,"line":2944},12,[2946,2950],{"type":49,"tag":2784,"props":2947,"children":2948},{"style":2791},[2949],{"type":54,"value":2819},{"type":49,"tag":2784,"props":2951,"children":2952},{"style":2797},[2953],{"type":54,"value":2954},"Formatting warnings\n",{"type":49,"tag":2784,"props":2956,"children":2958},{"class":2786,"line":2957},13,[2959,2963,2967,2971,2975],{"type":49,"tag":2784,"props":2960,"children":2961},{"style":2791},[2962],{"type":54,"value":2833},{"type":49,"tag":2784,"props":2964,"children":2965},{"style":2791},[2966],{"type":54,"value":2873},{"type":49,"tag":2784,"props":2968,"children":2969},{"style":2876},[2970],{"type":54,"value":2879},{"type":49,"tag":2784,"props":2972,"children":2973},{"style":2791},[2974],{"type":54,"value":2884},{"type":49,"tag":2784,"props":2976,"children":2977},{"style":2836},[2978],{"type":54,"value":2889},{"type":49,"tag":2784,"props":2980,"children":2982},{"class":2786,"line":2981},14,[2983],{"type":49,"tag":2784,"props":2984,"children":2985},{"emptyLinePlaceholder":2807},[2986],{"type":54,"value":2810},{"type":49,"tag":2784,"props":2988,"children":2990},{"class":2786,"line":2989},15,[2991,2995],{"type":49,"tag":2784,"props":2992,"children":2993},{"style":2791},[2994],{"type":54,"value":2819},{"type":49,"tag":2784,"props":2996,"children":2997},{"style":2797},[2998],{"type":54,"value":2999},"Recommend removal\n",{"type":49,"tag":2784,"props":3001,"children":3003},{"class":2786,"line":3002},16,[3004,3008],{"type":49,"tag":2784,"props":3005,"children":3006},{"style":2791},[3007],{"type":54,"value":2833},{"type":49,"tag":2784,"props":3009,"children":3010},{"style":2836},[3011],{"type":54,"value":3012}," Optional; include only when eligibility checks fire — reason and PR\u002Fissue reference if available\n",{"type":49,"tag":50,"props":3014,"children":3015},{},[3016],{"type":54,"value":3017},"If a file has no issues, say so explicitly.",{"type":49,"tag":299,"props":3019,"children":3021},{"id":3020},"confidence-assessment",[3022],{"type":54,"value":3023},"Confidence Assessment",{"type":49,"tag":50,"props":3025,"children":3026},{},[3027],{"type":54,"value":3028},"Include this section when resource loading or validation has limitations:",{"type":49,"tag":100,"props":3030,"children":3031},{},[3032,3046,3060,3081],{"type":49,"tag":104,"props":3033,"children":3034},{},[3035,3040,3041],{"type":49,"tag":60,"props":3036,"children":3037},{},[3038],{"type":54,"value":3039},"Canonical guidance:",{"type":54,"value":132},{"type":49,"tag":2784,"props":3042,"children":3043},{},[3044],{"type":54,"value":3045},"✓ Loaded successfully | ✗ Failed - using embedded patterns",{"type":49,"tag":104,"props":3047,"children":3048},{},[3049,3054,3055],{"type":49,"tag":60,"props":3050,"children":3051},{},[3052],{"type":54,"value":3053},"Repository config:",{"type":54,"value":132},{"type":49,"tag":2784,"props":3056,"children":3057},{},[3058],{"type":54,"value":3059},"✓ Found docs\u002Fchangelog.yml | ✗ Not found - using generic validation",{"type":49,"tag":104,"props":3061,"children":3062},{},[3063,3068,3069,3074,3076],{"type":49,"tag":60,"props":3064,"children":3065},{},[3066],{"type":54,"value":3067},"Validation confidence:",{"type":54,"value":132},{"type":49,"tag":2784,"props":3070,"children":3071},{},[3072],{"type":54,"value":3073},"High | Medium | Low",{"type":54,"value":3075}," - ",{"type":49,"tag":2784,"props":3077,"children":3078},{},[3079],{"type":54,"value":3080},"Brief reason",{"type":49,"tag":104,"props":3082,"children":3083},{},[3084,3089,3090],{"type":49,"tag":60,"props":3085,"children":3086},{},[3087],{"type":54,"value":3088},"Review limitations:",{"type":54,"value":132},{"type":49,"tag":2784,"props":3091,"children":3092},{},[3093],{"type":54,"value":3094},"Any factors affecting review accuracy",{"type":49,"tag":50,"props":3096,"children":3097},{},[3098,3100,3105],{"type":54,"value":3099},"End with a one-line overall summary across all files reviewed. If any files have quality warnings (including systematic pattern issues, type-title alignment mismatches, and technical content issues) or formatting warnings, suggest running ",{"type":49,"tag":115,"props":3101,"children":3103},{"className":3102},[],[3104],{"type":54,"value":146},{"type":54,"value":3106}," to get specific improvement suggestions that address the same patterns this review identified.",{"type":49,"tag":50,"props":3108,"children":3109},{},[3110,3115,3117,3122],{"type":49,"tag":60,"props":3111,"children":3112},{},[3113],{"type":54,"value":3114},"Sync awareness:",{"type":54,"value":3116}," If Step 1 successfully loaded canonical guidance and you detected significant discrepancies between the live documentation and this skill's embedded patterns, flag this in your summary. Note which patterns may need updating and suggest checking the canonical source directly at ",{"type":49,"tag":344,"props":3118,"children":3120},{"href":44,"rel":3119},[347],[3121],{"type":54,"value":44},{"type":54,"value":514},{"type":49,"tag":3124,"props":3125,"children":3126},"style",{},[3127],{"type":54,"value":3128},"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":3130,"total":3206},[3131,3141,3154,3164,3173,3183,3193],{"slug":3132,"name":3132,"fn":3133,"description":3134,"org":3135,"tags":3136,"stars":23,"repoUrl":24,"updatedAt":3140},"docs-applies-to-tagging","validate applies_to tags in Elastic documentation","Validate and generate applies_to tags in Elastic documentation, including for cumulative docs across versions and deployment types. Use when writing new docs pages, reviewing existing pages for correct applies_to usage, deciding whether to preserve or replace existing version-scoped content, or when content changes lifecycle state (experimental, preview, beta, GA, deprecated, removed).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3137,3138,3139],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:50:42.801473",{"slug":3142,"name":3142,"fn":3143,"description":3144,"org":3145,"tags":3146,"stars":23,"repoUrl":24,"updatedAt":3153},"docs-check-style","check documentation for Elastic style compliance","Check documentation for Elastic style guide compliance using Vale linter output and style rules. Use when writing, editing, or reviewing docs to catch voice, tone, grammar, formatting, accessibility, and word choice issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3147,3150,3151,3152],{"name":3148,"slug":3149,"type":15},"Accessibility","accessibility",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:49:36.112751",{"slug":3155,"name":3155,"fn":3156,"description":3157,"org":3158,"tags":3159,"stars":23,"repoUrl":24,"updatedAt":3163},"docs-content-type-checker","check Elastic documentation content types","Check a docs-content page against Elastic content type guidelines (overview, how-to, tutorial, troubleshooting, changelog), or classify a proposed page idea against the content types before drafting. Use when the user asks to check content type compliance, validate page structure, review a doc against content type standards, or decide which content type a planned page should use.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3160,3161,3162],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:50:36.826563",{"slug":3165,"name":3165,"fn":3166,"description":3167,"org":3168,"tags":3169,"stars":23,"repoUrl":24,"updatedAt":3172},"docs-draft-workflow-docs","draft Elastic Workflows documentation","Draft or update Elastic Workflows documentation pages in explore-analyze\u002Fworkflows\u002F — step references, use cases, how-tos, concepts, and overviews. Use when writing Workflows docs, documenting a step type, turning workflow YAML into documentation, drafting from a doc issue in docs-content or docs-content-internal, or creating a new page under the Workflows docset.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3170,3171],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:48:02.16095",{"slug":146,"name":146,"fn":3174,"description":3175,"org":3176,"tags":3177,"stars":23,"repoUrl":24,"updatedAt":3182},"improve Elastic changelog YAML files","Suggest improved text for changelog YAML files against current Elastic standards. Mirrors the pattern catalog from docs-review-changelog to provide consistent fixes. Includes type-title alignment checking and technical content assessment to catch overly technical titles that need user-focused rewrites. Features repository-aware area validation and enhanced confidence scoring. Supports single files or directories. Fetches canonical guidance to stay in sync. Use after review identifies quality issues, or when drafting new changelogs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3178,3179,3180,3181],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},"2026-07-12T07:48:58.570382",{"slug":3184,"name":3184,"fn":3185,"description":3186,"org":3187,"tags":3188,"stars":23,"repoUrl":24,"updatedAt":3192},"docs-flag-jargon-skill","flag Elastic jargon in documentation","Flag Elastic-internal jargon in documentation and suggest plain-language replacements. Use when reviewing, writing, or editing docs to catch terms that external readers would not understand.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3189,3190,3191],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:49:34.836748",{"slug":3194,"name":3194,"fn":3195,"description":3196,"org":3197,"tags":3198,"stars":23,"repoUrl":24,"updatedAt":3205},"docs-frontmatter-audit","audit Elastic documentation frontmatter","Audit Elastic documentation files for frontmatter completeness and correctness. Checks products, description, and navigation_title fields across a directory. Use when auditing docs metadata, checking frontmatter quality before publishing, or validating a batch of files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3199,3202,3203,3204],{"name":3200,"slug":3201,"type":15},"Audit","audit",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T07:49:39.883351",18,{"items":3208,"total":3377},[3209,3228,3245,3260,3279,3291,3301,3315,3327,3340,3351,3364],{"slug":3210,"name":3210,"fn":3211,"description":3212,"org":3213,"tags":3214,"stars":3225,"repoUrl":3226,"updatedAt":3227},"accessing-benchmark-results","retrieve and analyze Rally benchmark results","Retrieve Rally benchmark results from an external Elasticsearch metrics store. Use to list past races, get a single race's overall (per-task) results, chart a metric's trend across multiple runs, compare two races, or check whether a run converged — e.g. \"show me recent geonames races\", \"what's the service_time trend for nyc_taxis over the last 30 days?\", \"compare these two race-ids\". Applies when datastore.type = elasticsearch is set in ~\u002F.rally\u002Frally.ini.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3215,3218,3221,3222],{"name":3216,"slug":3217,"type":15},"Analytics","analytics",{"name":3219,"slug":3220,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":3223,"slug":3224,"type":15},"Performance","performance",2027,"https:\u002F\u002Fgithub.com\u002Felastic\u002Frally","2026-07-12T07:46:38.54144",{"slug":3229,"name":3229,"fn":3230,"description":3231,"org":3232,"tags":3233,"stars":3225,"repoUrl":3226,"updatedAt":3244},"developing-rally","develop and debug Rally source code","Work on Rally's own codebase, not running benchmarks with it. Use when setting up the dev environment, running Rally's tests or linters, navigating its source, debugging Rally's own code, or making changes to Rally itself.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3234,3237,3238,3241],{"name":3235,"slug":3236,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":3239,"slug":3240,"type":15},"Engineering","engineering",{"name":3242,"slug":3243,"type":15},"Local Development","local-development","2026-07-12T07:46:35.976807",{"slug":3246,"name":3246,"fn":3247,"description":3248,"org":3249,"tags":3250,"stars":3225,"repoUrl":3226,"updatedAt":3259},"running-benchmarks","run Rally benchmarks against Elasticsearch","Run Rally benchmarks (races) against Elasticsearch — an existing\u002Fexternal cluster or a Rally-provisioned distribution — and read the summary report. Use when running a race (any pipeline, track, challenge, target-hosts, or auth) or when interpreting throughput, latency, and service_time results.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3251,3252,3255,3256],{"name":9,"slug":8,"type":15},{"name":3253,"slug":3254,"type":15},"Elasticsearch","elasticsearch",{"name":3223,"slug":3224,"type":15},{"name":3257,"slug":3258,"type":15},"Testing","testing","2026-07-12T07:46:37.277964",{"slug":3261,"name":3261,"fn":3262,"description":3263,"org":3264,"tags":3265,"stars":3276,"repoUrl":3277,"updatedAt":3278},"cloud-access-management","manage Elastic Cloud organization access","Manage Elastic Cloud organization access: invite users, assign roles to Serverless projects, and create or revoke Cloud API keys. Use when granting, modifying, or auditing user access.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3266,3269,3270,3273],{"name":3267,"slug":3268,"type":15},"Cloud","cloud",{"name":9,"slug":8,"type":15},{"name":3271,"slug":3272,"type":15},"Operations","operations",{"name":3274,"slug":3275,"type":15},"Permissions","permissions",531,"https:\u002F\u002Fgithub.com\u002Felastic\u002Fagent-skills","2026-07-12T07:46:44.946285",{"slug":3280,"name":3280,"fn":3281,"description":3282,"org":3283,"tags":3284,"stars":3276,"repoUrl":3277,"updatedAt":3290},"cloud-create-project","create Elastic Cloud Serverless projects","Creates Elastic Cloud Serverless projects (Elasticsearch, Observability, or Security) via the REST API, saves credentials to file, and bootstraps a scoped Elasticsearch API key. Use when creating a new serverless project, provisioning a search or observability environment, or spinning up a new Elastic Cloud project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3285,3286,3289],{"name":3267,"slug":3268,"type":15},{"name":3287,"slug":3288,"type":15},"Deployment","deployment",{"name":3253,"slug":3254,"type":15},"2026-07-12T07:46:42.353362",{"slug":3292,"name":3292,"fn":3293,"description":3294,"org":3295,"tags":3296,"stars":3276,"repoUrl":3277,"updatedAt":3300},"cloud-manage-project","manage Elastic Cloud Serverless projects","Manages existing Elastic Cloud Serverless projects: list, get, update, delete, reset credentials, resume, and load saved credentials. Connects to existing projects by resolving endpoints and acquiring scoped Elasticsearch API keys. Use when performing day-2 operations on serverless projects, connecting to an existing project, loading or resetting project credentials, or looking up project details.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3297,3298,3299],{"name":3267,"slug":3268,"type":15},{"name":3253,"slug":3254,"type":15},{"name":3271,"slug":3272,"type":15},"2026-07-12T07:46:41.097412",{"slug":3302,"name":3302,"fn":3303,"description":3304,"org":3305,"tags":3306,"stars":3276,"repoUrl":3277,"updatedAt":3314},"cloud-network-security","manage Elastic Cloud network security","Manage Serverless network security (traffic filters): create, update, and delete IP filters and AWS PrivateLink VPC filters. Use when restricting network access or configuring private connectivity.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3307,3308,3309,3312],{"name":3267,"slug":3268,"type":15},{"name":3253,"slug":3254,"type":15},{"name":3310,"slug":3311,"type":15},"Networking","networking",{"name":3313,"slug":568,"type":15},"Security","2026-07-12T07:46:43.675992",{"slug":3316,"name":3316,"fn":3317,"description":3318,"org":3319,"tags":3320,"stars":3276,"repoUrl":3277,"updatedAt":3326},"cloud-setup","configure Elastic Cloud authentication","Configures Elastic Cloud authentication and environment defaults. Use when setting up EC_API_KEY, configuring Cloud API access, or when another cloud skill requires credentials.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3321,3324,3325],{"name":3322,"slug":3323,"type":15},"Authentication","authentication",{"name":3267,"slug":3268,"type":15},{"name":3253,"slug":3254,"type":15},"2026-07-12T07:46:39.783105",{"slug":3328,"name":3328,"fn":3329,"description":3330,"org":3331,"tags":3332,"stars":3276,"repoUrl":3277,"updatedAt":3339},"elasticsearch-audit","configure Elasticsearch security audit logs","Enable, configure, and query Elasticsearch security audit logs. Use when the task involves audit logging setup, event filtering, or investigating security incidents like failed logins.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3333,3334,3335,3338],{"name":3200,"slug":3201,"type":15},{"name":3253,"slug":3254,"type":15},{"name":3336,"slug":3337,"type":15},"Logs","logs",{"name":3313,"slug":568,"type":15},"2026-07-12T07:47:35.092599",{"slug":3341,"name":3341,"fn":3342,"description":3343,"org":3344,"tags":3345,"stars":3276,"repoUrl":3277,"updatedAt":3350},"elasticsearch-authn","configure Elasticsearch authentication realms","Authenticate to Elasticsearch using native, file-based, LDAP\u002FAD, SAML, OIDC, Kerberos, JWT, or certificate realms. Use when connecting with credentials, choosing a realm, or managing API keys. Assumes the target realms are already configured.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3346,3347,3348,3349],{"name":3322,"slug":3323,"type":15},{"name":9,"slug":8,"type":15},{"name":3253,"slug":3254,"type":15},{"name":3313,"slug":568,"type":15},"2026-07-12T07:47:41.474547",{"slug":3352,"name":3352,"fn":3353,"description":3354,"org":3355,"tags":3356,"stars":3276,"repoUrl":3277,"updatedAt":3363},"elasticsearch-authz","manage Elasticsearch RBAC and security roles","Manage Elasticsearch RBAC: native users, roles, role mappings, document- and field-level security. Use when creating users or roles, assigning privileges, or mapping external realms like LDAP\u002FSAML.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3357,3358,3359,3362],{"name":9,"slug":8,"type":15},{"name":3253,"slug":3254,"type":15},{"name":3360,"slug":3361,"type":15},"RBAC","rbac",{"name":3313,"slug":568,"type":15},"2026-07-12T07:47:36.394177",{"slug":3365,"name":3365,"fn":3366,"description":3367,"org":3368,"tags":3369,"stars":3276,"repoUrl":3277,"updatedAt":3376},"elasticsearch-esql","query Elasticsearch data with ES|QL","Execute ES|QL (Elasticsearch Query Language) queries, use when the user wants to query Elasticsearch data, analyze logs, aggregate metrics, explore data, or create charts and dashboards from ES|QL results.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3370,3371,3372,3373],{"name":3216,"slug":3217,"type":15},{"name":3219,"slug":3220,"type":15},{"name":3253,"slug":3254,"type":15},{"name":3374,"slug":3375,"type":15},"SQL","sql","2026-07-12T07:47:40.249533",86]