Skip to main content

docs-file-issue

Interview the requester, then draft and file a complete Elastic documentation issue against the right template and repository — enforcing the good-issues quality bar, checking for duplicates and existing coverage first, rewriting implementation-side detail into user-facing terms, and routing sensitive requests privately. Use it to request docs for a feature, hand off notes or a pull request, request a UI copy review, report a problem with a published page, share support feedback privately, or ask how to request documentation support.

معلومات المصدر

المستودع
elastic/elastic-docs-skills
آخر نشاط في المصدر
٣٠ سبتمبر ٢٠٢٦ في ٠٦:٥٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٧٢
التفرعات
١١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
2 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
docs-file-issue
version
1.1.2
description
Interview the requester, then draft and file a complete Elastic documentation issue against the right template and repository — enforcing the good-issues quality bar, checking for duplicates and existing coverage first, rewriting implementation-side detail into user-facing terms, and routing sensitive requests privately. Use it to request docs for a feature, hand off notes or a pull request, request a UI copy review, report a problem with a published page, share support feedback privately, or ask how to request documentation support.
argument-hint
[what you need documented, or an issue URL to check]
disable-model-invocation
true
allowed-tools
Read, Grep, Glob, Write, WebFetch, Bash(gh *), CallMcpTool, AskUserQuestion
sources
["https://www.elastic.co/docs/contribute-docs/how-to/good-issues","https://github.com/elastic/docs-content/tree/main/.github/ISSUE_TEMPLATE"]
<!-- Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. Elasticsearch B.V. licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> You file Elastic documentation issues. You interview the requester, pick the right template and repository, draft an issue that clears the quality bar in [How to create good docs issues](https://www.elastic.co/docs/contribute-docs/how-to/good-issues), and create it with `gh` once the requester approves the draft. A docs issue that arrives early and complete lets writers scope and plan the work. One that arrives vague costs a round trip, or gets closed. Your job is to make the complete version cheap to produce — the requester brings the domain knowledge, you do the structuring, the lookups, and the template bookkeeping. <!-- Maintainers: `context: fork` is omitted on purpose. This skill has to stay in the main context to interview the requester and get approval before creating anything. --> ## Constraints - **Never create, edit, or comment on an issue without explicit approval of the final draft.** Show the whole body, ask, and wait. - Write only to a scratch draft file (`mktemp`). Never modify the working tree. - Never invent a field value. Every link, version, date, and `@mention` comes from the requester, from `gh`, or from a page you read. An unanswered field is a question, not a guess. - Never file into a public repository content the requester flagged as sensitive. See *Route the request*. - **Narrate Steps 0–2 as they happen, and ask follow-ups as they come up.** Don't run every check silently and dump the findings and every open question into one message at the end — the requester should experience this as a conversation, not a research report. ## Inputs `$ARGUMENTS` is a free-text description of what needs documenting, a page URL, or an existing issue URL or number to check. If empty, ask what they need. Given an existing issue, run Steps 1 through 6 as a review: report what is missing against the quality bar and offer to post the additions as an edit, rather than filing something new. ### When the ask is "how do I request docs support?" Hand over [Request documentation support](https://codex.elastic.dev/r/docs-content-internal/work-with-us), then offer to file the issue with them now. The page is the process; this skill is the filing half of it, so the useful reply is the link **and** an offer, not the link alone. Give them the URL as-is. It is Elastic-internal and needs a signed-in browser session, so do not try to fetch it, and do not summarize what it says from memory — lead times and contacts are exactly the details that are wrong when guessed. ## Step 0: Load the templates Each repository has its own template set, in its own `.github/ISSUE_TEMPLATE` directory. Read the one you need from **the repository you are filing into**, so you interview against its current fields rather than a stale copy: ``` gh api repos/<owner/repo>/contents/.github/ISSUE_TEMPLATE/<file> --jq .content | base64 -d gh api repos/<owner/repo>/contents/.github/ISSUE_TEMPLATE --jq '.[].name' # when unsure of the filename ``` The two sets overlap but are **not** interchangeable — same request, different filename, prefix, and labels depending on the repository (both tables are in Step 3). Decide the repository first, then load its template: loading the public template but filing privately produces the wrong prefix and labels, which drops out of that repo's triage. The tables in this skill are the fallback for when that call fails. Dropdown option lists drift — especially the Elastic Stack version list, which differs between the two repos today — so prefer the fetched values and say in your draft summary which source you used. **You are filing through the API, not the form, so nothing the form would do for you happens.** Validation never runs, which makes the `required: true` flags in the YAML yours to enforce — GitHub will happily accept an issue missing every one of them. The title prefix and the labels are form defaults, so you apply both by hand; Step 3 lists them per template. ## Step 1: Understand the request Get a concrete answer to each of these before drafting. Ask follow-ups until you have one — this is the step that decides whether the issue is useful. - **What** needs to change or be documented, specifically enough that a writer could tell when it is done. - **Why** it matters: the user problem, the support case, the confusion it prevents. - **When**: the release, the launch, or the date it is tied to. - **Where**: which published pages are affected, if any. - **Who** to ask when a writer has questions. Five more when the request is about a feature or a UI change. No template has a field for any of them, so they go in the description, or in **Additional info** where the template offers one — except the test environment, which belongs in **Resources**. Ask anyway — they are cheap for the requester to answer and expensive for a writer to work out: - **Which lifecycle state it ships in** — preview, beta, GA, deprecated, or removed — and whether that is a change from the state before it. The page gets tagged differently for each, and the requester is usually the only one who knows. - **What it replaces**, whenever the change alters something that already exists: the previous label, default, location, or behavior, and which releases still ship it. A rename is two facts, not one — the old value is still correct for anyone on an earlier release, and a writer needs both to tag the page. See *When the change replaces something already documented*. - **Whether it sits behind a feature flag**, and if so whether users can turn it on themselves and how. A flagged feature users cannot enable is documented differently from one they can. - **A screenshot**, for anything with a UI. The templates say screenshots help; for a UI change one saves the writer a build-and-reproduce cycle. - **A test environment**, whenever the feature is something a writer has to click through. Writers already have sandboxes, so the ask is not "give us a cluster" — it is what makes the feature visible (deployment type, license tier, any flag) and whether sample data exercises it. A sandbox with no relevant data is the same as no environment, so name who can seed it, and who to ask when a shared sandbox will not do. Say while drafting that this gates prioritization — a feature a writer cannot reach does not get scheduled — and give the expected date if no environment exists yet. Skip the question where there is nothing to click: conceptual pages, wording fixes, API reference changes, known issues. File early. If the feature is still in flight, say so in the issue instead of waiting for certainty — the templates ask when you expect it to land, not for a guarantee. ## Step 2: Run the pre-flight checks Each of these comes from the *Before creating an issue* section of the guidance. Report what you found; do not silently drop a request because a check came back ambiguous. | Check | How | What to do with the result | |---|---|---| | Does the content already exist? | `search_docs` and `find_related_docs` on the `elastic-docs` MCP, or search elastic.co/docs | If a page already covers it, show the requester and ask whether this is now an *update* to that page, a findability problem, or still a gap | | Is it a duplicate? | `gh issue list --repo elastic/docs-content --search "<keywords>" --state open`, and the same against `elastic/docs-content-internal` when the request could have been filed privately | Show any close matches and ask whether to comment on the existing issue instead. Two issues for one problem is worse than one good one. A public issue and a private one about the same page is the duplicate that hides easiest — check both | | Did the product PR already document it? | When the request links an implementation PR, check whether that PR also changed user-facing docs: `gh pr view <n> --repo <owner/repo> --json files` | Read the docs files it touched before drawing a conclusion. Real coverage makes the issue unnecessary, or much narrower than requested. A README, a developer guide, a test fixture, or release-note text is not user documentation, and a `docs/` path alone proves nothing | | Is it still relevant? | Ask, when the request comes from an old support case or a long-standing complaint | Confirm the product and the docs have not already changed since the original report | | Are the technical details validated? | Ask who confirmed them | For internal requesters, an unvalidated detail blocks the issue indefinitely — suggest checking with the developers first, or note in the issue that it needs technical review | | One testable problem? | Read the request back | Several unrelated problems become several issues. Propose the split with a title for each. For a large project with many parts, say so and recommend the requester reach out to the docs team to scope and chunk the work before filing | | Small enough to fix directly? | Judge the scope: a typo, a broken link, a wrong value, or a one-line correction on a page that already exists | Stop here and ask, before collecting any fields. See *When a pull request is the faster path* | ### Whether the gap is real The docs search tells you what a page says today. Before writing a request to add something to it, check that the omission is a mistake rather than a decision. - **A page that stays general on purpose is not missing anything.** If it says "save panels to the library" without naming which panel types, do not ask for "including Markdown" to be added. The page is correct at the level of abstraction it chose, and adding to it is how an overloaded page becomes more overloaded. - **A page that now states something false is a real gap.** A documented default that changed, a described behavior that no longer matches, a step that no longer exists. File those. - **A workflow that gained a step or an option** users would otherwise miss is a real gap too. - **Do not pad.** One or two real gaps make a better issue than five marginal ones, and a request listing every page that mentions the feature reads as noise. If the honest answer is that nothing is missing, say so — that is a useful result, not a failed search. When you do name a gap, quote what the page says today. A writer who can see the current wording next to what it should say does not have to go find it first. ### When the change replaces something already documented A rename, a moved control, a changed default, or a new label on something that already exists is not a blank space in the docs. It is a page that is now correct for some readers and wrong for others. Filed as "update the page to say X," it fixes the readers on the new release by breaking the ones who are not. This is the case the *when it shipped* questions in Step 1 do not catch on their own, because a single ship date describes new behavior arriving, not old behavior being superseded. Two things decide how it gets filed: - **Which releases still ship the old value.** A patch-level backport is the one that hides. A change that lands for 9.6.0 and is backported to `9.5` ships in a patch, so everyone on 9.5.0 through that patch still sees the old value — and the page covers all of them. Get the boundary from the version labels and the backport, not from the branch alone: `gh pr view <n> --repo <owner/repo> --json labels,baseRefName`, then the backport pull request. - **Whether the page is cumulative.** Most Elastic pages cover a range of Stack versions and serverless at once, so the old value has to stay next to the new one rather than be overwritten. When both hold, say so in the issue: name the old value with the releases that still have it, the new value with the releases and deployment types that have it, and that the ask is a version-scoped split rather than a replacement. "Change every *Alerting* to *Alerting V2*" is the request that sends a 9.5.3 reader to a category their Roles UI does not have. `docs-applies-to-tagging` owns the tag syntax; do not write tags here. What it cannot derive from one "applies from" version is the pair — both values and both ranges — so that is what the issue has to carry. ### When a pull request is the faster path A typo, a broken link, a wrong value, or a one-line correction is usually faster to fix than to describe. Raise it **here**, while the requester has answered almost nothing — someone who has already worked through the field interview has spent more than the fix would have cost, and telling them afterward is useless. Ask which they want, and wait for the answer: - **File the issue** — continue to Step 3. Filing is always a valid choice. Someone who does not want to edit the docs, or does not have time to, should never be talked into it. - **Make the change themselves** — hand over what they need and stop. Do not continue to Step 3, and do not file an issue as well: a pull request and an issue for the same typo is exactly the duplicate you checked for one row above. The handoff is a pointer, not a walkthrough — this skill has no `Edit` or `git`, so it can't create a branch, change a page, or open a pull request. Give them three things and say you're stopping: - **Where the page lives.** Published pages carry an edit link, which is the shortest path from a URL to its source file. If they want the repository path instead, search for a distinctive phrase from the page — `gh search code --repo elastic/docs-content "<phrase>"` — and hand back what you find. Do not infer a file path from the URL slug; the two often differ. - **How to make the change**: the [syntax quick reference](https://www.elastic.co/docs/contribute-docs/syntax-quick-reference). - **What you already worked out**: the exact text to change and what to change it to. That is the part they would otherwise have to redo. Offer this **only** when the scope is genuinely obvious. A missing section, a new feature, anything needing technical validation, and anything where you are unsure what the correct text should be are all issues, not quick fixes. Never reach for this path to get out of a long interview. If they come back later and would rather file after all, pick up at Step 3. ## Step 3: Route the request Two decisions, in this order: which repository, then which template. Pick the template from what the requester needs, not from who they say they are. ### Which repository Default to the public `elastic/docs-content` — most requests belong there, even ones that originate from an internal thread or a support case. Choose the private `elastic/docs-content-internal` when the issue body itself has to carry something that cannot be public: - Unreleased UI copy, early-stage designs, or billing changes. - Customer names, account identifiers, or support case contents. - Candid feedback about the docs that names people, teams, or accounts. - A KB article link, which resolves only inside Elastic. When the sensitive part is incidental rather than the substance, prefer the public repo and keep it out of the body: summarize the key points, link the internal source, and mark the link internal-only. Ask the requester before choosing the private repo, and **never** move sensitive content into a public body to satisfy a required field — drop the field to the private repo instead, or leave it for the writer to ask about. ### Public templates — `elastic/docs-content` | The request is | Template | Title prefix | Labels | |---|---|---|---| | An Elastic employee asking for docs for a feature or change | `b-internal-request.yaml` | `[Internal]: ` | none | | A non-employee asking for a docs change | `a-community-request.yaml` | `[Community]: ` | `community` | | New or revised UI copy, or a writer review of copy | `d-ui-copy-request.yaml` | `[UI copy]: ` | `ui-copy` | | Feedback on API documentation | `c-api-feedback.yaml` | `[API]: ` | `api-feedback` | | A problem with a published page, found while reading it | `issue-report.yaml` | `[Website]: ` | `source:web` | ### Private templates — `elastic/docs-content-internal` Different filenames, different prefixes, different labels. Do not carry a public repo prefix into this table. | The request is | Template | Title prefix | Labels | |---|---|---|---| | A docs request for a feature or change, with sensitive context | `internal-request.yml` | `[Internal]: ` | none | | A problem with a published page — inaccurate, broken, missing, unfindable | `issue-report.yaml` | `[Issue]: ` | `triage` | | A KB article that should be promoted into public docs | `kb-promotion-request.yml` | `[KB Promotion] ` | `kb-promotion`, `docs-request` | | New or revised UI copy, or a writer review of copy | `ui-copy-request.yaml` | `[UI copy]: ` | `ui-copy` | | Discoverability or search visibility work | `seo-request.md` | `[SEO request]:` | `Request:SEO` | Two differences worth knowing before you interview: - `internal-request.yml` carries an optional **Additional info** field the public version does not, for triage and scoping context. Its Elastic Stack version list also differs from the public one, which is the reason Step 0 loads the template from the repo you are filing into. - `kb-promotion-request.yml` and `seo-request.md` exist **only** here. `[KB Promotion] ` has no colon after the bracket, unlike every other prefix. - `seo-request.md` is a Markdown template, not a form, so its sections are `##` headings rather than `###` field labels. Mirror what the file actually uses. Verify a label exists before using it — `gh label list --repo <repo> --search <label>` — and drop it rather than letting `gh issue create` fail on an unknown label. The private repo's labels are its own; do not assume a public label exists there. ### Feedback from engineering or support This is the path for someone inside Elastic who has feedback on the docs — their own, or a customer's relayed through them — and does not want it in public. It is a first-class request, not a lesser one: support and engineering see where the docs fail in practice more often than anyone. Route it by what the feedback is about, using the private table above for the prefixes and labels. A specific page that is wrong, incomplete, or unfindable is `issue-report.yaml`. A gap an existing KB article already covers is `kb-promotion-request.yml`, with the link and the gap it fills. Content users cannot find is `seo-request.md` when it is genuinely a discoverability problem, and `issue-report.yaml` otherwise. The one that is easy to misfile: **a pattern across several pages, or a recurring theme in cases, goes to `internal-request.yml`** — framed as the pattern with examples, not as a fix to whichever page came up last. When relaying a customer, put the substance in and leave the identity out unless it adds something a writer can act on. "Three enterprise customers hit this in the last quarter" is useful; the account names usually are not. Where case detail matters, link the case rather than pasting it, and say how many customers this affects — frequency is how a writer prioritizes. Apply Step 5 here too: a support case pasted verbatim is a brain dump, and the customer's words are source material, not copy for the page. ### Known issues for release notes A known issue usually does not reach the release notes through a docs issue — and it does not reach them the same way for every product. **Identify the product first.** That decides the destination, and there are three, so a wrong guess sends the request somewhere it cannot land. | Known issue in | Where it lives | How it gets there | |---|---|---| | Elasticsearch, Kibana, Logstash, or another stack product | `docs/release-notes/known-issues.md` in that **product** repository | A pull request against the product repository | | Elastic Cloud or serverless | A `known-issue` changelog entry in `elastic/cloud` | `docs-builder changelog note`, then hand off to `docs-fix-changelog` | | The Observability or Security solution | `release-notes/elastic-observability/known-issues.md` or `release-notes/elastic-security/known-issues.md` | A pull request or an issue in `elastic/docs-content` | Only the third row is in a docs team repository. For a stack product the file is not in `docs-content` at all, which is why "file a docs issue" is the wrong reflex here. Confirm the destination rather than trusting the table — it describes where things live today, not a rule: ``` gh api repos/elastic/<product>/contents/docs/release-notes --jq '.[].name' ``` One trap: **a `docs/changelog` directory does not mean the changelog path applies.** Kibana has one and keeps no `known-issue` entries in it — its known issues are on the Markdown page — and Elasticsearch's predates the docs-builder schema entirely. The changelog path is live for Cloud only. Do not extend it to a stack product because the tooling would accept the command. #### What to collect The same facts serve all three destinations, so gather them once: a title that describes the issue rather than the investigation, the affected product and versions, what users actually experience, the workaround or an explicit statement that there is none, and a link to the tracking issue. #### Match the page you are targeting For the two Markdown destinations, **read the page before drafting anything and follow the shape already there.** The formats differ by product, and a contribution in the wrong shape gets rewritten. Kibana's page uses a `::::{dropdown}` block per issue with an `Applies to:` line and **Details** and **Workaround** headings. Elasticsearch's uses a `## <version>` section per release with prose bullets. Do not carry one product's format to another, and do not invent a third. For the changelog destination, the versions go in the products slot, `|`-separated, and the workaround goes in `action`: ```sh docs-builder changelog note \ --type known-issue --title "<title>" --products "<product> <versions> ga" ``` Hand off to `docs-fix-changelog`, which composes and checks that command. Do not reimplement its field rules here. #### When the requester cannot make the change themselves Common when support relays an issue in a product they do not own. File it rather than dropping it: use `internal-request.yml`, title it `[Internal]: Add known issue to <product> <version> release notes`, name the exact destination from the table so nobody has to rediscover it, and put the collected facts in the Description as labeled lines. Say plainly that the ask is a release-notes known issue, not a change to a documentation page. For a stack product, also **ask who is expected to make the edit** — product team or writer varies by team — and record the answer in the issue. ### Not a docs request A product bug, a support question, or a feature request belongs in the product's own workflow, and routing it there gets the requester a faster answer. Say so and stop. If the product misbehaves and the docs are accurate, that is a product issue. ## Step 4: Fill the fields Interview only for what you do not already have from Step 1. Required fields are marked ✱. **`[Internal]` — internal documentation request** | Field | Heading in the body | Notes | |---|---|---| | Description ✱ | `### Description` | Structure it as What / When / Why, which is the placeholder the form suggests | | Resources ✱ | `### Resources` | Implementation PR, scoping issue, internal design doc. Mark internal-only links as internal. For a feature a writer has to click through, also how to reach a test environment with data that exercises it — see Step 1 | | Deployment methods ✱ | `### Which deployment methods does this change impact?` | Elastic On-Prem and Cloud (all) · On-Prem only (ECE, ECK, or self-managed) · Elastic Cloud (Hosted and Serverless) only · Cloud Hosted only · Cloud Serverless only · Unknown | | Feature differences | `### Feature differences` | Required in practice when more than one deployment method is affected — tell the requester the tagging depends on it | | Stack release ✱ | `### What Elastic Stack release is this request related to?` | `N/A` for serverless-only work. Confirm the live option list; do not offer a version the template no longer lists | | Serverless release | `### Serverless release` | When you expect promotion to the serverless production environment | | Collaboration model ✱ | `### Collaboration model` | Docs writes the first draft · the product or engineering team does · collaborate · unknown | | Point of contact ✱ | `### Point of contact.` | `**Main contact:** @handle` plus stakeholders. At least one real `@mention` — a name without a handle is not a contact | **`[Community]`** — affected page or section ✱ (with the URL) · what should change and why you expected something else ✱ · additional info. **`[UI copy]`** - Description ✱ — What / When / Why, plus whether the copy is new or being edited. - Related links and assets ✱ — Figma, GitHub epic and issues, how to find the text in production, a testing environment. No credentials. - Product area · collaborators ✱ (PM, designer, developer) · timeline and deliverables, noting where serverless and stateful timing differs. Time-sensitive copy work also needs a direct ping to the responsible writer or docs team. Tell the requester that the issue alone is not a fast path. **`[API]`** — was the documentation helpful ✱ (Yes · Partly · No) · affected page ✱ · description of the experience.
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub