1"use strict";(self.webpackChunkstylelint_io=self.webpackChunkstylelint_io||[]).push([["1079"],{2695:function(e,s,n){n.r(s),n.d(s,{metadata:function(){return i},default:function(){return u},frontMatter:function(){return r},contentTitle:function(){return o},toc:function(){return d},assets:function(){return a}});var i=JSON.parse('{"id":"maintainer-guide/issues","title":"Managing issues","description":"We manage issues consistently for the benefit of ourselves and our users.","source":"@site/docs/maintainer-guide/issues.md","sourceDirName":"maintainer-guide","slug":"/maintainer-guide/issues","permalink":"/maintainer-guide/issues","draft":false,"unlisted":false,"editUrl":"https://github.com/stylelint/stylelint/edit/main/docs/maintainer-guide/issues.md","tags":[],"version":"current","frontMatter":{"title":"Managing issues","sidebar_label":"Managing issues"},"sidebar":"docs","previous":{"title":"Benchmarking","permalink":"/contributor-guide/benchmarks"},"next":{"title":"Managing pull requests","permalink":"/maintainer-guide/pull-requests"}}'),t=n(4848),l=n(8453);let r={title:"Managing issues",sidebar_label:"Managing issues"},o="Managing issues",a={},d=[{value:"Labels and issue types",id:"labels-and-issue-types",level:2},{value:"Milestones",id:"milestones",level:2},{value:"Titles",id:"titles",level:2},{value:"Assignees",id:"assignees",level:2},{value:"Hiding comments",id:"hiding-comments",level:2},{value:"Saved replies",id:"saved-replies",level:2},{value:"Close an issue",id:"close-an-issue",level:3},{value:"Label as ready to implement",id:"label-as-ready-to-implement",level:3}];function c(e){let s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"managing-issues",children:"Managing issues"})}),"\n",(0,t.jsx)(s.p,{children:"We manage issues consistently for the benefit of ourselves and our users."}),"\n",(0,t.jsx)(s.h2,{id:"labels-and-issue-types",children:"Labels and issue types"}),"\n",(0,t.jsxs)(s.p,{children:["Use ",(0,t.jsx)(s.a,{href:"https://github.com/stylelint/stylelint/labels",children:"labels"})," and issue types."]}),"\n",(0,t.jsx)(s.p,{children:"When you first triage an issue, you should:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["add one of the ",(0,t.jsx)(s.code,{children:"status: needs *"})," labels, e.g. ",(0,t.jsx)(s.code,{children:"status: needs discussion"})]}),"\n",(0,t.jsx)(s.li,{children:"don't add any other label or an issue type"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"After triage, you should add:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.em,{children:"one"})," of the issue types, e.g. ",(0,t.jsx)(s.code,{children:"bug"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.em,{children:"one"})," of the non-need ",(0,t.jsx)(s.code,{children:"status: *"})," labels, e.g. ",(0,t.jsx)(s.code,{children:"status: ready to implement"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.em,{children:"zero or one"})," of the ",(0,t.jsx)(s.code,{children:"subtype: *"})," labels, e.g. ",(0,t.jsx)(s.code,{children:"subtype: new rule"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.em,{children:"zero, one or more"})," of the ",(0,t.jsx)(s.code,{children:"syntax: *"})," labels, e.g. ",(0,t.jsx)(s.code,{children:"syntax: scss"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.em,{children:"zero or one"})," of the ",(0,t.jsx)(s.code,{children:"priority: *"})," labels, e.g. ",(0,t.jsx)(s.code,{children:"priority: high"})]}),"\n",(0,t.jsxs)(s.li,{children:["optionally, the ",(0,t.jsx)(s.code,{children:"good first issue"}),", ",(0,t.jsx)(s.code,{children:"help wanted"})," and ",(0,t.jsx)(s.code,{children:"upstream"})," labels"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"milestones",children:"Milestones"}),"\n",(0,t.jsxs)(s.p,{children:["Use ",(0,t.jsx)(s.a,{href:"https://github.com/stylelint/stylelint/milestones",children:"milestones"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"You should:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["use the ",(0,t.jsx)(s.code,{children:"future-major"})," milestone for issues that introduce breaking changes"]}),"\n",(0,t.jsxs)(s.li,{children:["optionally, create version milestones (e.g. ",(0,t.jsx)(s.code,{children:"8.x"}),") to manage upcoming releases"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"titles",children:"Titles"}),"\n",(0,t.jsx)(s.p,{children:"Rename the title into a consistent format."}),"\n",(0,t.jsx)(s.p,{children:"You should:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["lead with the ",(0,t.jsx)(s.a,{href:"https://keepachangelog.com/en/1.1.0/#how",children:"CHA
1NGELOG group names"}),", but in the present tense:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:['"Remove x", e.g. "Remove ',(0,t.jsx)(s.code,{children:"unit-disallowed-list"}),' rule"']}),"\n",(0,t.jsxs)(s.li,{children:['"Deprecate x in y", e.g. "Deprecate ',(0,t.jsx)(s.code,{children:"resolvedNested"})," option in ",(0,t.jsx)(s.code,{children:"selector-class-pattern"}),'"']}),"\n",(0,t.jsxs)(s.li,{children:['"Add x", e.g. "Add ',(0,t.jsx)(s.code,{children:"unit-disallowed-list"}),' rule"']}),"\n",(0,t.jsxs)(s.li,{children:['"Add x to y", e.g. "Add ',(0,t.jsx)(s.code,{children:"ignoreProperties: []"})," to ",(0,t.jsx)(s.code,{children:"property-disallowed-list"}),'"']}),"\n",(0,t.jsxs)(s.li,{children:['"Fix x false positives/negatives for y", e.g. "Fix ',(0,t.jsx)(s.code,{children:"color-no-hex"}),' false positives for Less mixins"']}),"\n",(0,t.jsxs)(s.li,{children:['"Refactor x", e.g. "Refactor ',(0,t.jsx)(s.code,{children:"--fix"}),' flag to use shared util"']}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["use ",(0,t.jsx)(s.code,{children:"*"}),' if the issue applies to a group of rules, e.g. "Fix ',(0,t.jsx)(s.code,{children:"selector-*-pattern"}),' false negatives for SCSS variables"']}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"assignees",children:"Assignees"}),"\n",(0,t.jsx)(s.p,{children:"You can:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"assign yourself to an issue, but not other people without their permission"}),"\n",(0,t.jsx)(s.li,{children:"unassign others after asking if they are still working on an issue"}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"hiding-comments",children:"Hiding comments"}),"\n",(0,t.jsxs)(s.p,{children:["You can ",(0,t.jsx)(s.a,{href:"https://docs.github.com/en/communities/moderating-comments-and-conversations/managing-disruptive-comments",children:"hide comments"})," that are off-topic, unhelpful or low-quality so that the discussion remains easy to read."]}),"\n",(0,t.jsx)(s.h2,{id:"saved-replies",children:"Saved replies"}),"\n",(0,t.jsxs)(s.p,{children:["You should use ",(0,t.jsx)(s.a,{href:"https://help.github.com/en/github/writing-on-github/working-with-saved-replies",children:"saved replies"}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"close-an-issue",children:"Close an issue"}),"\n",(0,t.jsx)(s.p,{children:"That doesn't use a template:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"Thank you for creating this issue. However, issues need to follow one of our templates so that we can clearly understand your particular circumstances.\n\nPlease help us help you by [recreating the issue](https://github.com/stylelint/stylelint/issues/new/choose) using one of our templates.\n"})}),"\n",(0,t.jsx)(s.p,{children:"That is best suited as a plugin:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"Thank you for your suggestion. I think this is best-suited as a [plugin](https://stylelint.io/developer-guide/plugins).\n"})}),"\n",(0,t.jsx)(s.h3,{id:"label-as-ready-to-implement",children:"Label as ready to implement"}),"\n",(0,t.jsx)(s.p,{children:"That fixes a bug in a rule:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"I've labeled the issue as ready to implement. Please consider [contributing](https://stylelint.io/contributing) if you have time.\n\nThere are [steps on how to fix a bug in a rule](https://stylelint.io/contributor-guide/rules#fix-a-bug-in-a-rule) in the Contributor guide.\n"})}),"\n",(0,t.jsx)(s.p,{children:"That adds a new option to a rule:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"I've labeled the issue as ready to implement. Please consider [contributing](https://stylelint.io/contributing) if you have time.\n\nThere are [steps on how to add a new option](https://stylelint.io/contributor-guide/rules#add-an-option-to-a-rule) in the Contributor guide.\n"})}),"\n",(0,t.jsx)(s.p,{children:"That adds a new rule:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"I've labeled the issue as ready to implement. Please consider [contributing](https://stylelint.io/contributing) if you have time.\n\nThere are [steps on how to add a new rule](https://stylelint.io/contributor-guide/rules#add-a-rule) in the Contributor guide.\n"})}),"\n",(0,t.jsx)(s.p,{children:"That is another type of improvement:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"I've labeled the issue as ready to implement. Please consider [contributing](https://stylelint.io/contributing) if you have time.\n"})})]})}function u(e={}){let{wrapper:s}={...(0,l.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:function(e,s,n){n.d(s,{R:function(){return r},x:function(){return o}});var i=n(6540);let t={},l=i.createContext(t);function r(e){let s=i.useContext(l);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(l.Provider,{value:s},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.