1"use strict";(self.webpackChunktms=self.webpackChunktms||[]).push([["4623"],{6140(e,t,n){n.r(t),n.d(t,{metadata:()=>s,default:()=>c,frontMatter:()=>i,contentTitle:()=>l,toc:()=>u,assets:()=>a});var s=JSON.parse('{"id":"TMS/tms-contributing","title":"Contributing","description":"How to contribute to The Marvellous Suspender, and the project\'s policy on AI-assisted pull requests.","source":"@site/docs/TMS/contributing.md","sourceDirName":"TMS","slug":"/TMS/tms-contributing","permalink":"/docs/TMS/tms-contributing","draft":false,"unlisted":false,"tags":[{"inline":true,"label":"TMS","permalink":"/docs/tags/tms"},{"inline":true,"label":"The Marvellous Suspender","permalink":"/docs/tags/the-marvellous-suspender"},{"inline":true,"label":"contributing","permalink":"/docs/tags/contributing"},{"inline":true,"label":"open source","permalink":"/docs/tags/open-source"}],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2,"title":"Contributing","description":"How to contribute to The Marvellous Suspender, and the project\'s policy on AI-assisted pull requests.","id":"tms-contributing","tags":["TMS","The Marvellous Suspender","contributing","open source"]},"sidebar":"mainSidebar","previous":{"title":"Permissions","permalink":"/docs/TMS/permissions"},"next":{"title":"Install from source","permalink":"/docs/TMS/tms-install-from-source"}}'),o=n(4848),r=n(8453);let i={sidebar_position:2,title:"Contributing",description:"How to contribute to The Marvellous Suspender, and the project's policy on AI-assisted pull requests.",id:"tms-contributing",tags:["TMS","The Marvellous Suspender","contributing","open source"]},l="Contributing to The Marvellous Suspender",a={},u=[{value:"If you use AI tools",id:"if-you-use-ai-tools",level:2}];function d(e){let t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"contributing-to-the-marvellous-suspender",children:"Contributing to The Marvellous Suspender"})}),"\n",(0,o.jsx)(t.p,{children:"TMS is maintained by volunteers and installed in more than 100,000 browsers, so a change has to be small enough to review and tested before it ships."}),"\n",(0,o.jsx)(t.p,{children:"Three files in the repository say how:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:(0,o.jsx)(t.a,{href:"https://github.com/gioxx/MarvellousSuspender/blob/master/AGENTS.md",children:(0,o.jsx)(t.code,{children:"AGENTS.md"})})}),': the rules every change has to meet and what "done" means. One file for people and for coding agents.']}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:(0,o.jsx)(t.a,{href:"https://github.com/gioxx/MarvellousSuspender/blob/master/CONTRIBUTING.md",children:(0,o.jsx)(t.code,{children:"CONTRIBUTING.md"})})}),": setup, branches, commits, how to run the tests."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:(0,o.jsx)(t.a,{href:"https://github.com/gioxx/MarvellousSuspender/blob/master/SECURITY.md",children:(0,o.jsx)(t.code,{children:"SECURITY.md"})})}),": how to report a vulnerability in private."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Translations do not go through the repository: use ",(0,o.jsx)(t.a,{href:"https://crowdin.com/project/tms",children:"Crowdin"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"if-you-use-ai-tools",children:"If you use AI tools"}),"\n",(0,o.jsx)(t.p,{children:"You can. The person who opens the pull request is its author: you have read it, run the tests, loaded the extension and tried the change, and you can answer a question about any line. Say in the pull request which parts were AI-assisted. A pull request whose author cannot explain it is closed without review."}),"\n",(0,o.jsxs)(t.p,{children:["If you use a coding agent, point it at ",(0,o.jsx)(t.code,{children:"AGENTS.md"})," before it writes anything."]})]})}function c(e={}){let{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453(e,t,n){n.d(t,{R:()=>i,x:()=>l});var s=n(6540);let o={},r=s.createContext(o);function i(e){let t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(r.Provider,{value:t},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.