[{"data":1,"prerenderedAt":2030},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:nJFicuFyVZ7BqThu0uSPYUdCs-FkvC1pl_t2-NiEh98":72,"content-page-surround:docs:nJFicuFyVZ7BqThu0uSPYUdCs-FkvC1pl_t2-NiEh98":2021,"i-lucide:terminal":2024,"i-lucide:clipboard":2028},[4,12,18,24,30,36,42,48,54,60,66],{"title":5,"id":6,"canonicalKey":7,"locale":8,"draft":9,"icon":10,"path":11},"Overview","content:docs:1.overview.md","1","en",false,"lucide:compass","\u002Fdocs\u002Foverview",{"title":13,"id":14,"canonicalKey":15,"locale":8,"draft":9,"icon":16,"path":17},"Checklist","content:docs:2.checklist.md","2","lucide:list-checks","\u002Fdocs\u002Fchecklist",{"title":19,"id":20,"canonicalKey":21,"locale":8,"draft":9,"icon":22,"path":23},"Set up a repository","content:docs:3.set-up-a-repository.md","3","lucide:folder-plus","\u002Fdocs\u002Fset-up-a-repository",{"title":25,"id":26,"canonicalKey":27,"locale":8,"draft":9,"icon":28,"path":29},"Migrate a repository","content:docs:4.migrate-a-repository.md","4","lucide:arrow-right-left","\u002Fdocs\u002Fmigrate-a-repository",{"title":31,"id":32,"canonicalKey":33,"locale":8,"draft":9,"icon":34,"path":35},"Releasing","content:docs:5.releasing.md","5","lucide:rocket","\u002Fdocs\u002Freleasing",{"title":37,"id":38,"canonicalKey":39,"locale":8,"draft":9,"icon":40,"path":41},"Write library docs","content:docs:6.writing-docs.md","6","lucide:book-open","\u002Fdocs\u002Fwriting-docs",{"title":43,"id":44,"canonicalKey":45,"locale":8,"draft":9,"icon":46,"path":47},"Dependencies","content:docs:7.dependencies.md","7","lucide:package-search","\u002Fdocs\u002Fdependencies",{"title":49,"id":50,"canonicalKey":51,"locale":8,"draft":9,"icon":52,"path":53},"Security reports and incidents","content:docs:8.security.md","8","lucide:shield-alert","\u002Fdocs\u002Fsecurity",{"title":55,"id":56,"canonicalKey":57,"locale":8,"draft":9,"icon":58,"path":59},"Adding tooling","content:docs:9.adding-tooling.md","9","lucide:hammer","\u002Fdocs\u002Fadding-tooling",{"title":61,"id":62,"canonicalKey":63,"locale":8,"draft":9,"icon":64,"path":65},"Maintain the fleet","content:docs:10.maintain-the-fleet.md","10","lucide:calendar-check","\u002Fdocs\u002Fmaintain-the-fleet",{"title":67,"id":68,"canonicalKey":69,"locale":8,"draft":9,"icon":70,"path":71},"Troubleshooting","content:docs:11.troubleshooting.md","11","lucide:wrench","\u002Fdocs\u002Ftroubleshooting",{"title":19,"description":73,"icon":22,"redirectFrom":74,"body":85,"type":2010,"id":20,"canonicalKey":21,"draft":9,"partial":9,"locale":8,"collection":1819,"navigationFile":9,"file":2011,"route":2016,"resolution":2018},"Generate a repository from a starter and complete the one-time settings that files cannot hold.",[75,76,77,78,79,80,81,82,83,84],"\u002Fdocs\u002Fstandards\u002Frepository-structure","\u002Fdocs\u002Fstandards\u002Fgithub-and-contributions","\u002Fdocs\u002Fstandards\u002Fdocumentation-sites","\u002Fdocs\u002Fstandards\u002Fanalytics-and-feedback","\u002Fdocs\u002Fstandards\u002Fversioned-package-documentation","\u002Fdocs\u002Fprocedures\u002Fcreate-a-repository","\u002Fdocs\u002Fprocedures\u002Froll-out-a-standard","\u002Fdocs\u002Fchecklists\u002Frepository-launch","\u002Fdocs\u002Fchecklists\u002Fproduction-acceptance","\u002Fdocs\u002Fchecklists\u002Fquarterly-audit",{"type":86,"children":87,"toc":1998},"root",[88,104,123,130,184,332,376,445,451,462,468,480,541,560,626,631,662,698,948,973,1086,1103,1312,1337,1342,1508,1558,1581,1587,1598,1690,1709,1771,1783,1789,1801,1848,1853,1859,1864,1920,1926,1936,1958,1987],{"type":89,"tag":90,"props":91,"children":92},"element","p",{},[93,96,102],{"type":94,"value":95},"text","Files set up most of the standard. The settings below live in GitHub, npm and\nVercel, so a person does them once per repository. Agents can run the ",{"type":89,"tag":97,"props":98,"children":99},"code",{},[100],{"type":94,"value":101},"gh",{"type":94,"value":103},"\ncommands; the npm and Vercel steps need the maintainer's own login.",{"type":89,"tag":90,"props":105,"children":106},{},[107,109,114,116,121],{"type":94,"value":108},"Replace ",{"type":89,"tag":97,"props":110,"children":111},{},[112],{"type":94,"value":113},"OWNER\u002FREPO",{"type":94,"value":115}," with the repository, for example ",{"type":89,"tag":97,"props":117,"children":118},{},[119],{"type":94,"value":120},"lupinum-dev\u002Fnuxt-tour",{"type":94,"value":122},".",{"type":89,"tag":124,"props":125,"children":127},"h2",{"id":126},"generate-the-repository",[128],{"type":94,"value":129},"Generate the repository",{"type":89,"tag":90,"props":131,"children":132},{},[133,135,140,142,147,149,154,156,161,163,168,170,175,177,182],{"type":94,"value":134},"Pick a starter in ",{"type":89,"tag":97,"props":136,"children":137},{},[138],{"type":94,"value":139},"starters\u002F",{"type":94,"value":141}," of ",{"type":89,"tag":97,"props":143,"children":144},{},[145],{"type":94,"value":146},"lupinum-dev\u002Flupinum-oss",{"type":94,"value":148},": ",{"type":89,"tag":97,"props":150,"children":151},{},[152],{"type":94,"value":153},"nuxt-module",{"type":94,"value":155}," (a\nNuxt module, the usual case), ",{"type":89,"tag":97,"props":157,"children":158},{},[159],{"type":94,"value":160},"library",{"type":94,"value":162}," (one framework-free package) or\n",{"type":89,"tag":97,"props":164,"children":165},{},[166],{"type":94,"value":167},"library-monorepo",{"type":94,"value":169}," (several packages that release together in one Changesets\n",{"type":89,"tag":97,"props":171,"children":172},{},[173],{"type":94,"value":174},"fixed",{"type":94,"value":176}," group, for example a Vue package and its Nuxt module). From a\n",{"type":89,"tag":97,"props":178,"children":179},{},[180],{"type":94,"value":181},"lupinum-oss",{"type":94,"value":183}," checkout:",{"type":89,"tag":185,"props":186,"children":189},"pre",{"language":187,"class":188},"bash","shiki shiki-themes light-plus dark-plus dark:dark-plus",[190],{"type":89,"tag":97,"props":191,"children":193},{"class":192},"language-bash",[194,239,241,268,269,292,293,305,306,319,320],{"type":89,"tag":195,"props":196,"children":199},"span",{"class":197,"style":198},"line","display: inline",[200,206,212,218,223,228,233],{"type":89,"tag":195,"props":201,"children":203},{"style":202},"color:#795E26;--shiki-dark:#DCDCAA",[204],{"type":94,"value":205},"node",{"type":89,"tag":195,"props":207,"children":209},{"style":208},"color:#A31515;--shiki-dark:#CE9178",[210],{"type":94,"value":211}," starters\u002Fnuxt-module\u002Fsetup.mjs",{"type":89,"tag":195,"props":213,"children":215},{"style":214},"color:#0000FF;--shiki-dark:#569CD6",[216],{"type":94,"value":217}," --output",{"type":89,"tag":195,"props":219,"children":220},{"style":208},[221],{"type":94,"value":222}," ..\u002Fnuxt-example",{"type":89,"tag":195,"props":224,"children":225},{"style":214},[226],{"type":94,"value":227}," --name",{"type":89,"tag":195,"props":229,"children":230},{"style":208},[231],{"type":94,"value":232}," nuxt-example",{"type":89,"tag":195,"props":234,"children":236},{"style":235},"color:#EE0000;--shiki-dark:#D7BA7D",[237],{"type":94,"value":238}," \\",{"type":94,"value":240},"\n",{"type":89,"tag":195,"props":242,"children":243},{"class":197,"style":198},[244,249,254,259,264],{"type":89,"tag":195,"props":245,"children":246},{"style":214},[247],{"type":94,"value":248},"  --title",{"type":89,"tag":195,"props":250,"children":251},{"style":208},[252],{"type":94,"value":253}," \"Nuxt Example\"",{"type":89,"tag":195,"props":255,"children":256},{"style":214},[257],{"type":94,"value":258}," --description",{"type":89,"tag":195,"props":260,"children":261},{"style":208},[262],{"type":94,"value":263}," \"One sentence.\"",{"type":89,"tag":195,"props":265,"children":266},{"style":235},[267],{"type":94,"value":238},{"type":94,"value":240},{"type":89,"tag":195,"props":270,"children":271},{"class":197,"style":198},[272,277,282,287],{"type":89,"tag":195,"props":273,"children":274},{"style":214},[275],{"type":94,"value":276},"  --repository",{"type":89,"tag":195,"props":278,"children":279},{"style":208},[280],{"type":94,"value":281}," lupinum-dev\u002Fnuxt-example",{"type":89,"tag":195,"props":283,"children":284},{"style":214},[285],{"type":94,"value":286}," --domain",{"type":89,"tag":195,"props":288,"children":289},{"style":208},[290],{"type":94,"value":291}," nuxt-example.lupinum.com",{"type":94,"value":240},{"type":89,"tag":195,"props":294,"children":295},{"class":197,"style":198},[296,301],{"type":89,"tag":195,"props":297,"children":298},{"style":202},[299],{"type":94,"value":300},"cd",{"type":89,"tag":195,"props":302,"children":303},{"style":208},[304],{"type":94,"value":222},{"type":94,"value":240},{"type":89,"tag":195,"props":307,"children":308},{"class":197,"style":198},[309,314],{"type":89,"tag":195,"props":310,"children":311},{"style":202},[312],{"type":94,"value":313},"pnpm",{"type":89,"tag":195,"props":315,"children":316},{"style":208},[317],{"type":94,"value":318}," install",{"type":94,"value":240},{"type":89,"tag":195,"props":321,"children":322},{"class":197,"style":198},[323,327],{"type":89,"tag":195,"props":324,"children":325},{"style":202},[326],{"type":94,"value":313},{"type":89,"tag":195,"props":328,"children":329},{"style":208},[330],{"type":94,"value":331}," verify",{"type":89,"tag":90,"props":333,"children":334},{},[335,340,342,347,349,354,356,360,362,367,369,374],{"type":89,"tag":97,"props":336,"children":337},{},[338],{"type":94,"value":339},"--package",{"type":94,"value":341}," defaults to ",{"type":89,"tag":97,"props":343,"children":344},{},[345],{"type":94,"value":346},"@lupinum\u002F\u003Cname>",{"type":94,"value":348},"; ",{"type":89,"tag":97,"props":350,"children":351},{},[352],{"type":94,"value":353},"--plausible SCRIPT_ID",{"type":94,"value":355}," adds Plausible\nanalytics to the site. The monorepo starter takes ",{"type":89,"tag":97,"props":357,"children":358},{},[359],{"type":94,"value":339},{"type":94,"value":361}," once per package\nand ",{"type":89,"tag":97,"props":363,"children":364},{},[365],{"type":94,"value":366},"--primary",{"type":94,"value":368}," for the package the docs lead with. ",{"type":89,"tag":97,"props":370,"children":371},{},[372],{"type":94,"value":373},"--help",{"type":94,"value":375}," prints each\nstarter's options.",{"type":89,"tag":90,"props":377,"children":378},{},[379,381,386,388,393,395,400,402,407,409,414,416,421,423,428,430,434,436,443],{"type":94,"value":380},"Commit ",{"type":89,"tag":97,"props":382,"children":383},{},[384],{"type":94,"value":385},"pnpm-lock.yaml",{"type":94,"value":387},". Fill in the library-specific parts of ",{"type":89,"tag":97,"props":389,"children":390},{},[391],{"type":94,"value":392},"AGENTS.md",{"type":94,"value":394}," and\ncheck ",{"type":89,"tag":97,"props":396,"children":397},{},[398],{"type":94,"value":399},"D1",{"type":94,"value":401}," in ",{"type":89,"tag":97,"props":403,"children":404},{},[405],{"type":94,"value":406},"internals\u002Fdecisions.md",{"type":94,"value":408},". For a library, create the empty GitHub\nrepository (",{"type":89,"tag":97,"props":410,"children":411},{},[412],{"type":94,"value":413},"gh repo create OWNER\u002FREPO --public",{"type":94,"value":415},") and the ",{"type":89,"tag":97,"props":417,"children":418},{},[419],{"type":94,"value":420},"npm",{"type":94,"value":422}," environment\n(below) before you push the first commit to ",{"type":89,"tag":97,"props":424,"children":425},{},[426],{"type":94,"value":427},"main",{"type":94,"value":429},": that push already packs\nthe starting version and waits for approval in ",{"type":89,"tag":97,"props":431,"children":432},{},[433],{"type":94,"value":420},{"type":94,"value":435}," (see\n",{"type":89,"tag":437,"props":438,"children":440},"a",{"href":439},"\u002Fdocs\u002Freleasing#first-publication-of-a-new-package",[441],{"type":94,"value":442},"First publication",{"type":94,"value":444},"). If\nthe environment does not exist yet, GitHub creates it without a reviewer. Add\nthe ruleset after the first push.",{"type":89,"tag":124,"props":446,"children":448},{"id":447},"adopt-the-standard-in-an-existing-repository",[449],{"type":94,"value":450},"Adopt the standard in an existing repository",{"type":89,"tag":90,"props":452,"children":453},{},[454,456,460],{"type":94,"value":455},"Follow ",{"type":89,"tag":437,"props":457,"children":458},{"href":29},[459],{"type":94,"value":25},{"type":94,"value":461},". It uses the\nsettings on this page in a fixed order.",{"type":89,"tag":124,"props":463,"children":465},{"id":464},"github-settings",[466],{"type":94,"value":467},"GitHub settings",{"type":89,"tag":90,"props":469,"children":470},{},[471,473,478],{"type":94,"value":472},"Merge settings: squash only, delete branches after merge, auto-merge off. The\nruleset asks for no approvals, so auto-merge would let any token that can open\na pull request merge it once ",{"type":89,"tag":97,"props":474,"children":475},{},[476],{"type":94,"value":477},"ci",{"type":94,"value":479}," is green.",{"type":89,"tag":185,"props":481,"children":482},{"language":187,"class":188},[483],{"type":89,"tag":97,"props":484,"children":485},{"class":192},[486,522,523],{"type":89,"tag":195,"props":487,"children":488},{"class":197,"style":198},[489,493,498,503,508,513,518],{"type":89,"tag":195,"props":490,"children":491},{"style":202},[492],{"type":94,"value":101},{"type":89,"tag":195,"props":494,"children":495},{"style":208},[496],{"type":94,"value":497}," repo",{"type":89,"tag":195,"props":499,"children":500},{"style":208},[501],{"type":94,"value":502}," edit",{"type":89,"tag":195,"props":504,"children":505},{"style":208},[506],{"type":94,"value":507}," OWNER\u002FREPO",{"type":89,"tag":195,"props":509,"children":510},{"style":214},[511],{"type":94,"value":512}," --enable-squash-merge",{"type":89,"tag":195,"props":514,"children":515},{"style":214},[516],{"type":94,"value":517}," --enable-merge-commit=false",{"type":89,"tag":195,"props":519,"children":520},{"style":235},[521],{"type":94,"value":238},{"type":94,"value":240},{"type":89,"tag":195,"props":524,"children":525},{"class":197,"style":198},[526,531,536],{"type":89,"tag":195,"props":527,"children":528},{"style":214},[529],{"type":94,"value":530},"  --enable-rebase-merge=false",{"type":89,"tag":195,"props":532,"children":533},{"style":214},[534],{"type":94,"value":535}," --enable-auto-merge=false",{"type":89,"tag":195,"props":537,"children":538},{"style":214},[539],{"type":94,"value":540}," --delete-branch-on-merge",{"type":89,"tag":90,"props":542,"children":543},{},[544,546,551,553,558],{"type":94,"value":545},"Actions token: read-only by default. A library also lets Actions create pull\nrequests, so ",{"type":89,"tag":97,"props":547,"children":548},{},[549],{"type":94,"value":550},"release.yml",{"type":94,"value":552}," can open the Version packages pull request. A\nrepository that publishes nothing leaves that off\n(",{"type":89,"tag":97,"props":554,"children":555},{},[556],{"type":94,"value":557},"can_approve_pull_request_reviews=false",{"type":94,"value":559},").",{"type":89,"tag":185,"props":561,"children":562},{"language":187,"class":188},[563],{"type":89,"tag":97,"props":564,"children":565},{"class":192},[566,597,598],{"type":89,"tag":195,"props":567,"children":568},{"class":197,"style":198},[569,573,578,583,588,593],{"type":89,"tag":195,"props":570,"children":571},{"style":202},[572],{"type":94,"value":101},{"type":89,"tag":195,"props":574,"children":575},{"style":208},[576],{"type":94,"value":577}," api",{"type":89,"tag":195,"props":579,"children":580},{"style":214},[581],{"type":94,"value":582}," -X",{"type":89,"tag":195,"props":584,"children":585},{"style":208},[586],{"type":94,"value":587}," PUT",{"type":89,"tag":195,"props":589,"children":590},{"style":208},[591],{"type":94,"value":592}," repos\u002FOWNER\u002FREPO\u002Factions\u002Fpermissions\u002Fworkflow",{"type":89,"tag":195,"props":594,"children":595},{"style":235},[596],{"type":94,"value":238},{"type":94,"value":240},{"type":89,"tag":195,"props":599,"children":600},{"class":197,"style":198},[601,606,611,616,621],{"type":89,"tag":195,"props":602,"children":603},{"style":214},[604],{"type":94,"value":605},"  -f",{"type":89,"tag":195,"props":607,"children":608},{"style":208},[609],{"type":94,"value":610}," default_workflow_permissions=read",{"type":89,"tag":195,"props":612,"children":613},{"style":214},[614],{"type":94,"value":615}," -F",{"type":89,"tag":195,"props":617,"children":618},{"style":208},[619],{"type":94,"value":620}," can_approve_pull_request_reviews=",{"type":89,"tag":195,"props":622,"children":623},{"style":214},[624],{"type":94,"value":625},"true",{"type":89,"tag":90,"props":627,"children":628},{},[629],{"type":94,"value":630},"Dependabot security updates off: Renovate opens every update pull request.\nDependabot alerts stay on (see below).",{"type":89,"tag":185,"props":632,"children":633},{"language":187,"class":188},[634],{"type":89,"tag":97,"props":635,"children":636},{"class":192},[637],{"type":89,"tag":195,"props":638,"children":639},{"class":197,"style":198},[640,644,648,652,657],{"type":89,"tag":195,"props":641,"children":642},{"style":202},[643],{"type":94,"value":101},{"type":89,"tag":195,"props":645,"children":646},{"style":208},[647],{"type":94,"value":577},{"type":89,"tag":195,"props":649,"children":650},{"style":214},[651],{"type":94,"value":582},{"type":89,"tag":195,"props":653,"children":654},{"style":208},[655],{"type":94,"value":656}," DELETE",{"type":89,"tag":195,"props":658,"children":659},{"style":208},[660],{"type":94,"value":661}," repos\u002FOWNER\u002FREPO\u002Fautomated-security-fixes",{"type":89,"tag":90,"props":663,"children":664},{},[665,667,671,673,677,679,684,686,690,692,696],{"type":94,"value":666},"Ruleset for ",{"type":89,"tag":97,"props":668,"children":669},{},[670],{"type":94,"value":427},{"type":94,"value":672},": pull request required, required check ",{"type":89,"tag":97,"props":674,"children":675},{},[676],{"type":94,"value":477},{"type":94,"value":678}," (only from\nGitHub Actions, app ID 15368, so no other app can fake it), no force push, no\ndeletion, linear history, squash only, review threads resolved before merge.\n\"Require branches to be up to date\" stays off (",{"type":89,"tag":97,"props":680,"children":681},{},[682],{"type":94,"value":683},"strict_required_status_checks_policy: false",{"type":94,"value":685},"): ",{"type":89,"tag":97,"props":687,"children":688},{},[689],{"type":94,"value":477},{"type":94,"value":691}," runs again on ",{"type":89,"tag":97,"props":693,"children":694},{},[695],{"type":94,"value":427},{"type":94,"value":697}," after every merge, and the Version packages\npull request would otherwise need a manual update after each merge.",{"type":89,"tag":185,"props":699,"children":700},{"language":187,"class":188},[701],{"type":89,"tag":97,"props":702,"children":703},{"class":192},[704,750,751,759,760,768,769,777,778,786,787,795,796,804,805,813,814,822,823,831,832,840,841,849,850,858,859,867,868,876,877,885,886,894,895,903,904,912,913,921,922,930,931,939,940],{"type":89,"tag":195,"props":705,"children":706},{"class":197,"style":198},[707,711,715,719,724,729,734,739,745],{"type":89,"tag":195,"props":708,"children":709},{"style":202},[710],{"type":94,"value":101},{"type":89,"tag":195,"props":712,"children":713},{"style":208},[714],{"type":94,"value":577},{"type":89,"tag":195,"props":716,"children":717},{"style":214},[718],{"type":94,"value":582},{"type":89,"tag":195,"props":720,"children":721},{"style":208},[722],{"type":94,"value":723}," POST",{"type":89,"tag":195,"props":725,"children":726},{"style":208},[727],{"type":94,"value":728}," repos\u002FOWNER\u002FREPO\u002Frulesets",{"type":89,"tag":195,"props":730,"children":731},{"style":214},[732],{"type":94,"value":733}," --input",{"type":89,"tag":195,"props":735,"children":736},{"style":208},[737],{"type":94,"value":738}," -",{"type":89,"tag":195,"props":740,"children":742},{"style":741},"color:#000000;--shiki-dark:#D4D4D4",[743],{"type":94,"value":744}," \u003C\u003C",{"type":89,"tag":195,"props":746,"children":747},{"style":741},[748],{"type":94,"value":749},"'EOF'",{"type":94,"value":240},{"type":89,"tag":195,"props":752,"children":753},{"class":197,"style":198},[754],{"type":89,"tag":195,"props":755,"children":756},{"style":208},[757],{"type":94,"value":758},"{",{"type":94,"value":240},{"type":89,"tag":195,"props":761,"children":762},{"class":197,"style":198},[763],{"type":89,"tag":195,"props":764,"children":765},{"style":208},[766],{"type":94,"value":767},"  \"name\": \"main\",",{"type":94,"value":240},{"type":89,"tag":195,"props":770,"children":771},{"class":197,"style":198},[772],{"type":89,"tag":195,"props":773,"children":774},{"style":208},[775],{"type":94,"value":776},"  \"target\": \"branch\",",{"type":94,"value":240},{"type":89,"tag":195,"props":779,"children":780},{"class":197,"style":198},[781],{"type":89,"tag":195,"props":782,"children":783},{"style":208},[784],{"type":94,"value":785},"  \"enforcement\": \"active\",",{"type":94,"value":240},{"type":89,"tag":195,"props":788,"children":789},{"class":197,"style":198},[790],{"type":89,"tag":195,"props":791,"children":792},{"style":208},[793],{"type":94,"value":794},"  \"conditions\": { \"ref_name\": { \"include\": [\"~DEFAULT_BRANCH\"], \"exclude\": [] } },",{"type":94,"value":240},{"type":89,"tag":195,"props":797,"children":798},{"class":197,"style":198},[799],{"type":89,"tag":195,"props":800,"children":801},{"style":208},[802],{"type":94,"value":803},"  \"rules\": [",{"type":94,"value":240},{"type":89,"tag":195,"props":806,"children":807},{"class":197,"style":198},[808],{"type":89,"tag":195,"props":809,"children":810},{"style":208},[811],{"type":94,"value":812},"    { \"type\": \"deletion\" },",{"type":94,"value":240},{"type":89,"tag":195,"props":815,"children":816},{"class":197,"style":198},[817],{"type":89,"tag":195,"props":818,"children":819},{"style":208},[820],{"type":94,"value":821},"    { \"type\": \"non_fast_forward\" },",{"type":94,"value":240},{"type":89,"tag":195,"props":824,"children":825},{"class":197,"style":198},[826],{"type":89,"tag":195,"props":827,"children":828},{"style":208},[829],{"type":94,"value":830},"    { \"type\": \"required_linear_history\" },",{"type":94,"value":240},{"type":89,"tag":195,"props":833,"children":834},{"class":197,"style":198},[835],{"type":89,"tag":195,"props":836,"children":837},{"style":208},[838],{"type":94,"value":839},"    { \"type\": \"pull_request\", \"parameters\": {",{"type":94,"value":240},{"type":89,"tag":195,"props":842,"children":843},{"class":197,"style":198},[844],{"type":89,"tag":195,"props":845,"children":846},{"style":208},[847],{"type":94,"value":848},"        \"required_approving_review_count\": 0,",{"type":94,"value":240},{"type":89,"tag":195,"props":851,"children":852},{"class":197,"style":198},[853],{"type":89,"tag":195,"props":854,"children":855},{"style":208},[856],{"type":94,"value":857},"        \"dismiss_stale_reviews_on_push\": false,",{"type":94,"value":240},{"type":89,"tag":195,"props":860,"children":861},{"class":197,"style":198},[862],{"type":89,"tag":195,"props":863,"children":864},{"style":208},[865],{"type":94,"value":866},"        \"require_code_owner_review\": false,",{"type":94,"value":240},{"type":89,"tag":195,"props":869,"children":870},{"class":197,"style":198},[871],{"type":89,"tag":195,"props":872,"children":873},{"style":208},[874],{"type":94,"value":875},"        \"require_last_push_approval\": false,",{"type":94,"value":240},{"type":89,"tag":195,"props":878,"children":879},{"class":197,"style":198},[880],{"type":89,"tag":195,"props":881,"children":882},{"style":208},[883],{"type":94,"value":884},"        \"required_review_thread_resolution\": true,",{"type":94,"value":240},{"type":89,"tag":195,"props":887,"children":888},{"class":197,"style":198},[889],{"type":89,"tag":195,"props":890,"children":891},{"style":208},[892],{"type":94,"value":893},"        \"allowed_merge_methods\": [\"squash\"] } },",{"type":94,"value":240},{"type":89,"tag":195,"props":896,"children":897},{"class":197,"style":198},[898],{"type":89,"tag":195,"props":899,"children":900},{"style":208},[901],{"type":94,"value":902},"    { \"type\": \"required_status_checks\", \"parameters\": {",{"type":94,"value":240},{"type":89,"tag":195,"props":905,"children":906},{"class":197,"style":198},[907],{"type":89,"tag":195,"props":908,"children":909},{"style":208},[910],{"type":94,"value":911},"        \"strict_required_status_checks_policy\": false,",{"type":94,"value":240},{"type":89,"tag":195,"props":914,"children":915},{"class":197,"style":198},[916],{"type":89,"tag":195,"props":917,"children":918},{"style":208},[919],{"type":94,"value":920},"        \"required_status_checks\": [{ \"context\": \"ci\", \"integration_id\": 15368 }] } }",{"type":94,"value":240},{"type":89,"tag":195,"props":923,"children":924},{"class":197,"style":198},[925],{"type":89,"tag":195,"props":926,"children":927},{"style":208},[928],{"type":94,"value":929},"  ]",{"type":94,"value":240},{"type":89,"tag":195,"props":932,"children":933},{"class":197,"style":198},[934],{"type":89,"tag":195,"props":935,"children":936},{"style":208},[937],{"type":94,"value":938},"}",{"type":94,"value":240},{"type":89,"tag":195,"props":941,"children":942},{"class":197,"style":198},[943],{"type":89,"tag":195,"props":944,"children":945},{"style":741},[946],{"type":94,"value":947},"EOF",{"type":89,"tag":90,"props":949,"children":950},{},[951,953,957,959,964,966,971],{"type":94,"value":952},"For a library, a second ruleset protects every tag: once ",{"type":89,"tag":97,"props":954,"children":955},{},[956],{"type":94,"value":550},{"type":94,"value":958}," has\ncreated a tag, nobody can move or delete it. It covers all tags, so it fits\nevery tag format (",{"type":89,"tag":97,"props":960,"children":961},{},[962],{"type":94,"value":963},"v1.2.0",{"type":94,"value":965},", ",{"type":89,"tag":97,"props":967,"children":968},{},[969],{"type":94,"value":970},"@scope\u002Fname@1.2.0",{"type":94,"value":972},") without a pattern to get\nwrong. The audit fails a library without it or with bypass actors on it.",{"type":89,"tag":185,"props":974,"children":975},{"language":187,"class":188},[976],{"type":89,"tag":97,"props":977,"children":978},{"class":192},[979,1018,1019,1026,1027,1035,1036,1044,1045,1052,1053,1061,1062,1070,1071,1078,1079],{"type":89,"tag":195,"props":980,"children":981},{"class":197,"style":198},[982,986,990,994,998,1002,1006,1010,1014],{"type":89,"tag":195,"props":983,"children":984},{"style":202},[985],{"type":94,"value":101},{"type":89,"tag":195,"props":987,"children":988},{"style":208},[989],{"type":94,"value":577},{"type":89,"tag":195,"props":991,"children":992},{"style":214},[993],{"type":94,"value":582},{"type":89,"tag":195,"props":995,"children":996},{"style":208},[997],{"type":94,"value":723},{"type":89,"tag":195,"props":999,"children":1000},{"style":208},[1001],{"type":94,"value":728},{"type":89,"tag":195,"props":1003,"children":1004},{"style":214},[1005],{"type":94,"value":733},{"type":89,"tag":195,"props":1007,"children":1008},{"style":208},[1009],{"type":94,"value":738},{"type":89,"tag":195,"props":1011,"children":1012},{"style":741},[1013],{"type":94,"value":744},{"type":89,"tag":195,"props":1015,"children":1016},{"style":741},[1017],{"type":94,"value":749},{"type":94,"value":240},{"type":89,"tag":195,"props":1020,"children":1021},{"class":197,"style":198},[1022],{"type":89,"tag":195,"props":1023,"children":1024},{"style":208},[1025],{"type":94,"value":758},{"type":94,"value":240},{"type":89,"tag":195,"props":1028,"children":1029},{"class":197,"style":198},[1030],{"type":89,"tag":195,"props":1031,"children":1032},{"style":208},[1033],{"type":94,"value":1034},"  \"name\": \"tags\",",{"type":94,"value":240},{"type":89,"tag":195,"props":1037,"children":1038},{"class":197,"style":198},[1039],{"type":89,"tag":195,"props":1040,"children":1041},{"style":208},[1042],{"type":94,"value":1043},"  \"target\": \"tag\",",{"type":94,"value":240},{"type":89,"tag":195,"props":1046,"children":1047},{"class":197,"style":198},[1048],{"type":89,"tag":195,"props":1049,"children":1050},{"style":208},[1051],{"type":94,"value":785},{"type":94,"value":240},{"type":89,"tag":195,"props":1054,"children":1055},{"class":197,"style":198},[1056],{"type":89,"tag":195,"props":1057,"children":1058},{"style":208},[1059],{"type":94,"value":1060},"  \"conditions\": { \"ref_name\": { \"include\": [\"~ALL\"], \"exclude\": [] } },",{"type":94,"value":240},{"type":89,"tag":195,"props":1063,"children":1064},{"class":197,"style":198},[1065],{"type":89,"tag":195,"props":1066,"children":1067},{"style":208},[1068],{"type":94,"value":1069},"  \"rules\": [{ \"type\": \"update\" }, { \"type\": \"deletion\" }]",{"type":94,"value":240},{"type":89,"tag":195,"props":1072,"children":1073},{"class":197,"style":198},[1074],{"type":89,"tag":195,"props":1075,"children":1076},{"style":208},[1077],{"type":94,"value":938},{"type":94,"value":240},{"type":89,"tag":195,"props":1080,"children":1081},{"class":197,"style":198},[1082],{"type":89,"tag":195,"props":1083,"children":1084},{"style":741},[1085],{"type":94,"value":947},{"type":89,"tag":90,"props":1087,"children":1088},{},[1089,1091,1095,1097,1101],{"type":94,"value":1090},"A library also needs the ",{"type":89,"tag":97,"props":1092,"children":1093},{},[1094],{"type":94,"value":420},{"type":94,"value":1096}," environment: the maintainer must approve every\ndeployment, administrators cannot bypass that, and only ",{"type":89,"tag":97,"props":1098,"children":1099},{},[1100],{"type":94,"value":427},{"type":94,"value":1102}," can deploy.\nSelf-review stays allowed because the maintainer both merges the Version\npackages pull request and approves the publish.",{"type":89,"tag":185,"props":1104,"children":1105},{"language":187,"class":188},[1106],{"type":89,"tag":97,"props":1107,"children":1108},{"class":192},[1109,1149,1150,1157,1158,1185,1186,1194,1195,1203,1204,1212,1213,1220,1221,1228,1229,1257,1258,1280,1281],{"type":89,"tag":195,"props":1110,"children":1111},{"class":197,"style":198},[1112,1116,1120,1124,1128,1133,1137,1141,1145],{"type":89,"tag":195,"props":1113,"children":1114},{"style":202},[1115],{"type":94,"value":101},{"type":89,"tag":195,"props":1117,"children":1118},{"style":208},[1119],{"type":94,"value":577},{"type":89,"tag":195,"props":1121,"children":1122},{"style":214},[1123],{"type":94,"value":582},{"type":89,"tag":195,"props":1125,"children":1126},{"style":208},[1127],{"type":94,"value":587},{"type":89,"tag":195,"props":1129,"children":1130},{"style":208},[1131],{"type":94,"value":1132}," repos\u002FOWNER\u002FREPO\u002Fenvironments\u002Fnpm",{"type":89,"tag":195,"props":1134,"children":1135},{"style":214},[1136],{"type":94,"value":733},{"type":89,"tag":195,"props":1138,"children":1139},{"style":208},[1140],{"type":94,"value":738},{"type":89,"tag":195,"props":1142,"children":1143},{"style":741},[1144],{"type":94,"value":744},{"type":89,"tag":195,"props":1146,"children":1147},{"style":741},[1148],{"type":94,"value":947},{"type":94,"value":240},{"type":89,"tag":195,"props":1151,"children":1152},{"class":197,"style":198},[1153],{"type":89,"tag":195,"props":1154,"children":1155},{"style":208},[1156],{"type":94,"value":758},{"type":94,"value":240},{"type":89,"tag":195,"props":1159,"children":1160},{"class":197,"style":198},[1161,1166,1170,1175,1180],{"type":89,"tag":195,"props":1162,"children":1163},{"style":208},[1164],{"type":94,"value":1165},"  \"reviewers\": [{ \"type\": \"User\", \"id\": $(",{"type":89,"tag":195,"props":1167,"children":1168},{"style":202},[1169],{"type":94,"value":101},{"type":89,"tag":195,"props":1171,"children":1172},{"style":208},[1173],{"type":94,"value":1174}," api user ",{"type":89,"tag":195,"props":1176,"children":1177},{"style":214},[1178],{"type":94,"value":1179},"--jq",{"type":89,"tag":195,"props":1181,"children":1182},{"style":208},[1183],{"type":94,"value":1184}," .id) }],",{"type":94,"value":240},{"type":89,"tag":195,"props":1187,"children":1188},{"class":197,"style":198},[1189],{"type":89,"tag":195,"props":1190,"children":1191},{"style":208},[1192],{"type":94,"value":1193},"  \"prevent_self_review\": false,",{"type":94,"value":240},{"type":89,"tag":195,"props":1196,"children":1197},{"class":197,"style":198},[1198],{"type":89,"tag":195,"props":1199,"children":1200},{"style":208},[1201],{"type":94,"value":1202},"  \"can_admins_bypass\": false,",{"type":94,"value":240},{"type":89,"tag":195,"props":1205,"children":1206},{"class":197,"style":198},[1207],{"type":89,"tag":195,"props":1208,"children":1209},{"style":208},[1210],{"type":94,"value":1211},"  \"deployment_branch_policy\": { \"protected_branches\": false, \"custom_branch_policies\": true }",{"type":94,"value":240},{"type":89,"tag":195,"props":1214,"children":1215},{"class":197,"style":198},[1216],{"type":89,"tag":195,"props":1217,"children":1218},{"style":208},[1219],{"type":94,"value":938},{"type":94,"value":240},{"type":89,"tag":195,"props":1222,"children":1223},{"class":197,"style":198},[1224],{"type":89,"tag":195,"props":1225,"children":1226},{"style":741},[1227],{"type":94,"value":947},{"type":94,"value":240},{"type":89,"tag":195,"props":1230,"children":1231},{"class":197,"style":198},[1232,1236,1240,1244,1248,1253],{"type":89,"tag":195,"props":1233,"children":1234},{"style":202},[1235],{"type":94,"value":101},{"type":89,"tag":195,"props":1237,"children":1238},{"style":208},[1239],{"type":94,"value":577},{"type":89,"tag":195,"props":1241,"children":1242},{"style":214},[1243],{"type":94,"value":582},{"type":89,"tag":195,"props":1245,"children":1246},{"style":208},[1247],{"type":94,"value":723},{"type":89,"tag":195,"props":1249,"children":1250},{"style":208},[1251],{"type":94,"value":1252}," repos\u002FOWNER\u002FREPO\u002Fenvironments\u002Fnpm\u002Fdeployment-branch-policies",{"type":89,"tag":195,"props":1254,"children":1255},{"style":235},[1256],{"type":94,"value":238},{"type":94,"value":240},{"type":89,"tag":195,"props":1259,"children":1260},{"class":197,"style":198},[1261,1265,1270,1275],{"type":89,"tag":195,"props":1262,"children":1263},{"style":214},[1264],{"type":94,"value":605},{"type":89,"tag":195,"props":1266,"children":1267},{"style":208},[1268],{"type":94,"value":1269}," name=main",{"type":89,"tag":195,"props":1271,"children":1272},{"style":214},[1273],{"type":94,"value":1274}," -f",{"type":89,"tag":195,"props":1276,"children":1277},{"style":208},[1278],{"type":94,"value":1279}," type=branch",{"type":94,"value":240},{"type":89,"tag":195,"props":1282,"children":1283},{"class":197,"style":198},[1284,1288,1292,1296,1301,1306],{"type":89,"tag":195,"props":1285,"children":1286},{"style":202},[1287],{"type":94,"value":101},{"type":89,"tag":195,"props":1289,"children":1290},{"style":208},[1291],{"type":94,"value":577},{"type":89,"tag":195,"props":1293,"children":1294},{"style":208},[1295],{"type":94,"value":1132},{"type":89,"tag":195,"props":1297,"children":1298},{"style":214},[1299],{"type":94,"value":1300}," --jq",{"type":89,"tag":195,"props":1302,"children":1303},{"style":208},[1304],{"type":94,"value":1305}," .can_admins_bypass",{"type":89,"tag":195,"props":1307,"children":1309},{"style":1308},"color:#008000;--shiki-dark:#6A9955",[1310],{"type":94,"value":1311},"   # must print false",{"type":89,"tag":90,"props":1313,"children":1314},{},[1315,1317,1321,1323,1329,1331,1336],{"type":94,"value":1316},"If it prints ",{"type":89,"tag":97,"props":1318,"children":1319},{},[1320],{"type":94,"value":625},{"type":94,"value":1322},", turn off ",{"type":89,"tag":1324,"props":1325,"children":1326},"strong",{},[1327],{"type":94,"value":1328},"Allow administrators to bypass configured\nprotection rules",{"type":94,"value":1330}," under ",{"type":89,"tag":1324,"props":1332,"children":1333},{},[1334],{"type":94,"value":1335},"Settings → Environments → npm",{"type":94,"value":122},{"type":89,"tag":90,"props":1338,"children":1339},{},[1340],{"type":94,"value":1341},"Security features: secret scanning with push protection, private vulnerability\nreporting, Dependabot alerts (alerts only; Renovate opens the update pull\nrequests) and CodeQL default setup. Do not add a CodeQL workflow file. Add no\nActions secrets: the standard needs none, and the audit warns about any that\nexist.",{"type":89,"tag":185,"props":1343,"children":1344},{"language":187,"class":188},[1345],{"type":89,"tag":97,"props":1346,"children":1347},{"class":192},[1348,1389,1390,1398,1399,1407,1408,1416,1417,1424,1425,1449,1450,1474,1475],{"type":89,"tag":195,"props":1349,"children":1350},{"class":197,"style":198},[1351,1355,1359,1363,1368,1373,1377,1381,1385],{"type":89,"tag":195,"props":1352,"children":1353},{"style":202},[1354],{"type":94,"value":101},{"type":89,"tag":195,"props":1356,"children":1357},{"style":208},[1358],{"type":94,"value":577},{"type":89,"tag":195,"props":1360,"children":1361},{"style":214},[1362],{"type":94,"value":582},{"type":89,"tag":195,"props":1364,"children":1365},{"style":208},[1366],{"type":94,"value":1367}," PATCH",{"type":89,"tag":195,"props":1369,"children":1370},{"style":208},[1371],{"type":94,"value":1372}," repos\u002FOWNER\u002FREPO",{"type":89,"tag":195,"props":1374,"children":1375},{"style":214},[1376],{"type":94,"value":733},{"type":89,"tag":195,"props":1378,"children":1379},{"style":208},[1380],{"type":94,"value":738},{"type":89,"tag":195,"props":1382,"children":1383},{"style":741},[1384],{"type":94,"value":744},{"type":89,"tag":195,"props":1386,"children":1387},{"style":741},[1388],{"type":94,"value":749},{"type":94,"value":240},{"type":89,"tag":195,"props":1391,"children":1392},{"class":197,"style":198},[1393],{"type":89,"tag":195,"props":1394,"children":1395},{"style":208},[1396],{"type":94,"value":1397},"{ \"security_and_analysis\": {",{"type":94,"value":240},{"type":89,"tag":195,"props":1400,"children":1401},{"class":197,"style":198},[1402],{"type":89,"tag":195,"props":1403,"children":1404},{"style":208},[1405],{"type":94,"value":1406},"    \"secret_scanning\": { \"status\": \"enabled\" },",{"type":94,"value":240},{"type":89,"tag":195,"props":1409,"children":1410},{"class":197,"style":198},[1411],{"type":89,"tag":195,"props":1412,"children":1413},{"style":208},[1414],{"type":94,"value":1415},"    \"secret_scanning_push_protection\": { \"status\": \"enabled\" } } }",{"type":94,"value":240},{"type":89,"tag":195,"props":1418,"children":1419},{"class":197,"style":198},[1420],{"type":89,"tag":195,"props":1421,"children":1422},{"style":741},[1423],{"type":94,"value":947},{"type":94,"value":240},{"type":89,"tag":195,"props":1426,"children":1427},{"class":197,"style":198},[1428,1432,1436,1440,1444],{"type":89,"tag":195,"props":1429,"children":1430},{"style":202},[1431],{"type":94,"value":101},{"type":89,"tag":195,"props":1433,"children":1434},{"style":208},[1435],{"type":94,"value":577},{"type":89,"tag":195,"props":1437,"children":1438},{"style":214},[1439],{"type":94,"value":582},{"type":89,"tag":195,"props":1441,"children":1442},{"style":208},[1443],{"type":94,"value":587},{"type":89,"tag":195,"props":1445,"children":1446},{"style":208},[1447],{"type":94,"value":1448}," repos\u002FOWNER\u002FREPO\u002Fprivate-vulnerability-reporting",{"type":94,"value":240},{"type":89,"tag":195,"props":1451,"children":1452},{"class":197,"style":198},[1453,1457,1461,1465,1469],{"type":89,"tag":195,"props":1454,"children":1455},{"style":202},[1456],{"type":94,"value":101},{"type":89,"tag":195,"props":1458,"children":1459},{"style":208},[1460],{"type":94,"value":577},{"type":89,"tag":195,"props":1462,"children":1463},{"style":214},[1464],{"type":94,"value":582},{"type":89,"tag":195,"props":1466,"children":1467},{"style":208},[1468],{"type":94,"value":587},{"type":89,"tag":195,"props":1470,"children":1471},{"style":208},[1472],{"type":94,"value":1473}," repos\u002FOWNER\u002FREPO\u002Fvulnerability-alerts",{"type":94,"value":240},{"type":89,"tag":195,"props":1476,"children":1477},{"class":197,"style":198},[1478,1482,1486,1490,1494,1499,1503],{"type":89,"tag":195,"props":1479,"children":1480},{"style":202},[1481],{"type":94,"value":101},{"type":89,"tag":195,"props":1483,"children":1484},{"style":208},[1485],{"type":94,"value":577},{"type":89,"tag":195,"props":1487,"children":1488},{"style":214},[1489],{"type":94,"value":582},{"type":89,"tag":195,"props":1491,"children":1492},{"style":208},[1493],{"type":94,"value":1367},{"type":89,"tag":195,"props":1495,"children":1496},{"style":208},[1497],{"type":94,"value":1498}," repos\u002FOWNER\u002FREPO\u002Fcode-scanning\u002Fdefault-setup",{"type":89,"tag":195,"props":1500,"children":1501},{"style":214},[1502],{"type":94,"value":1274},{"type":89,"tag":195,"props":1504,"children":1505},{"style":208},[1506],{"type":94,"value":1507}," state=configured",{"type":89,"tag":90,"props":1509,"children":1510},{},[1511,1513,1519,1521,1527,1529,1534,1536,1541,1543,1549,1551,1556],{"type":94,"value":1512},"Install the ",{"type":89,"tag":437,"props":1514,"children":1516},{"href":1515},"https:\u002F\u002Fgithub.com\u002Fapps\u002Frenovate",[1517],{"type":94,"value":1518},"Renovate",{"type":94,"value":1520}," GitHub App on the\nrepository, and for libraries the ",{"type":89,"tag":437,"props":1522,"children":1524},{"href":1523},"https:\u002F\u002Fgithub.com\u002Fapps\u002Fpkg-pr-new",[1525],{"type":94,"value":1526},"pkg.pr.new",{"type":94,"value":1528},"\napp, which ",{"type":89,"tag":97,"props":1530,"children":1531},{},[1532],{"type":94,"value":1533},"preview.yml",{"type":94,"value":1535}," needs. Renovate installed for all repositories of an\norganization starts in ",{"type":89,"tag":1324,"props":1537,"children":1538},{},[1539],{"type":94,"value":1540},"Silent mode",{"type":94,"value":1542},": it opens no pull requests and no\nDependency Dashboard. Turn Silent mode off for the organization at\n",{"type":89,"tag":437,"props":1544,"children":1546},{"href":1545},"https:\u002F\u002Fdeveloper.mend.io",[1547],{"type":94,"value":1548},"developer.mend.io",{"type":94,"value":1550}," (",{"type":89,"tag":1324,"props":1552,"children":1553},{},[1554],{"type":94,"value":1555},"Settings → Dependency\nUpdates",{"type":94,"value":1557},"). The audit fails GH-08 until the Dependency Dashboard issue exists.",{"type":89,"tag":90,"props":1559,"children":1560},{},[1561,1563,1567,1569,1573,1575,1579],{"type":94,"value":1562},"A repository that publishes nothing, such as ",{"type":89,"tag":97,"props":1564,"children":1565},{},[1566],{"type":94,"value":181},{"type":94,"value":1568},", needs the GitHub\nsettings above except the library-only steps: leave pull request creation by\nActions off (",{"type":89,"tag":97,"props":1570,"children":1571},{},[1572],{"type":94,"value":557},{"type":94,"value":1574},"), and do not create the\ntag ruleset or the ",{"type":89,"tag":97,"props":1576,"children":1577},{},[1578],{"type":94,"value":420},{"type":94,"value":1580}," environment. Skip the npm settings below.",{"type":89,"tag":124,"props":1582,"children":1584},{"id":1583},"npm-settings",[1585],{"type":94,"value":1586},"npm settings",{"type":89,"tag":90,"props":1588,"children":1589},{},[1590,1592,1597],{"type":94,"value":1591},"For a library, do this for every package, after its first version exists on npm. For a\nbrand-new package, first follow\n",{"type":89,"tag":437,"props":1593,"children":1594},{"href":439},[1595],{"type":94,"value":1596},"First publication of a new package",{"type":94,"value":122},{"type":89,"tag":1599,"props":1600,"children":1601},"ol",{},[1602,1622,1660,1678],{"type":89,"tag":1603,"props":1604,"children":1605},"li",{},[1606,1608,1614,1616,1621],{"type":94,"value":1607},"On ",{"type":89,"tag":437,"props":1609,"children":1611},{"href":1610},"https:\u002F\u002Fwww.npmjs.com",[1612],{"type":94,"value":1613},"npmjs.com",{"type":94,"value":1615},", open the package, then ",{"type":89,"tag":1324,"props":1617,"children":1618},{},[1619],{"type":94,"value":1620},"Settings",{"type":94,"value":122},{"type":89,"tag":1603,"props":1623,"children":1624},{},[1625,1627,1632,1634,1639,1641,1646,1648,1652,1654,1658],{"type":94,"value":1626},"Under ",{"type":89,"tag":1324,"props":1628,"children":1629},{},[1630],{"type":94,"value":1631},"Trusted publishing",{"type":94,"value":1633},", add a GitHub Actions publisher: organization or\nuser ",{"type":89,"tag":97,"props":1635,"children":1636},{},[1637],{"type":94,"value":1638},"OWNER",{"type":94,"value":1640},", repository ",{"type":89,"tag":97,"props":1642,"children":1643},{},[1644],{"type":94,"value":1645},"REPO",{"type":94,"value":1647},", workflow ",{"type":89,"tag":97,"props":1649,"children":1650},{},[1651],{"type":94,"value":550},{"type":94,"value":1653},", environment ",{"type":89,"tag":97,"props":1655,"children":1656},{},[1657],{"type":94,"value":420},{"type":94,"value":1659},",\nallowed to publish directly (not only to stage a version).",{"type":89,"tag":1603,"props":1661,"children":1662},{},[1663,1664,1669,1671,1676],{"type":94,"value":1626},{"type":89,"tag":1324,"props":1665,"children":1666},{},[1667],{"type":94,"value":1668},"Publishing access",{"type":94,"value":1670},", select ",{"type":89,"tag":1324,"props":1672,"children":1673},{},[1674],{"type":94,"value":1675},"Require two-factor authentication and\ndisallow tokens",{"type":94,"value":1677},". Trusted publishing keeps working; stolen tokens do not.",{"type":89,"tag":1603,"props":1679,"children":1680},{},[1681,1683,1688],{"type":94,"value":1682},"Record the result as NPM-01 evidence in ",{"type":89,"tag":97,"props":1684,"children":1685},{},[1686],{"type":94,"value":1687},"fleet\u002Flibraries.json",{"type":94,"value":1689}," in\nlupinum-oss, with the date.",{"type":89,"tag":90,"props":1691,"children":1692},{},[1693,1695,1700,1702,1707],{"type":94,"value":1694},"The CLI equivalent for step 2 needs an npm version that has ",{"type":89,"tag":97,"props":1696,"children":1697},{},[1698],{"type":94,"value":1699},"npm trust",{"type":94,"value":1701}," (check with ",{"type":89,"tag":97,"props":1703,"children":1704},{},[1705],{"type":94,"value":1706},"npm trust --help",{"type":94,"value":1708},"; Node.js 24 ships one):",{"type":89,"tag":185,"props":1710,"children":1711},{"language":187,"class":188},[1712],{"type":89,"tag":97,"props":1713,"children":1714},{"class":192},[1715],{"type":89,"tag":195,"props":1716,"children":1717},{"class":197,"style":198},[1718,1722,1727,1732,1737,1742,1746,1751,1756,1761,1766],{"type":89,"tag":195,"props":1719,"children":1720},{"style":202},[1721],{"type":94,"value":420},{"type":89,"tag":195,"props":1723,"children":1724},{"style":208},[1725],{"type":94,"value":1726}," trust",{"type":89,"tag":195,"props":1728,"children":1729},{"style":208},[1730],{"type":94,"value":1731}," github",{"type":89,"tag":195,"props":1733,"children":1734},{"style":208},[1735],{"type":94,"value":1736}," @lupinum\u002FPACKAGE",{"type":89,"tag":195,"props":1738,"children":1739},{"style":214},[1740],{"type":94,"value":1741}," --repo",{"type":89,"tag":195,"props":1743,"children":1744},{"style":208},[1745],{"type":94,"value":507},{"type":89,"tag":195,"props":1747,"children":1748},{"style":214},[1749],{"type":94,"value":1750}," --file",{"type":89,"tag":195,"props":1752,"children":1753},{"style":208},[1754],{"type":94,"value":1755}," release.yml",{"type":89,"tag":195,"props":1757,"children":1758},{"style":214},[1759],{"type":94,"value":1760}," --env",{"type":89,"tag":195,"props":1762,"children":1763},{"style":208},[1764],{"type":94,"value":1765}," npm",{"type":89,"tag":195,"props":1767,"children":1768},{"style":214},[1769],{"type":94,"value":1770}," --allow-publish",{"type":89,"tag":90,"props":1772,"children":1773},{},[1774,1776,1781],{"type":94,"value":1775},"Never create an ",{"type":89,"tag":97,"props":1777,"children":1778},{},[1779],{"type":94,"value":1780},"NPM_TOKEN",{"type":94,"value":1782}," secret.",{"type":89,"tag":124,"props":1784,"children":1786},{"id":1785},"vercel",[1787],{"type":94,"value":1788},"Vercel",{"type":89,"tag":90,"props":1790,"children":1791},{},[1792,1794,1799],{"type":94,"value":1793},"Only for a library with a docs site (see ",{"type":89,"tag":437,"props":1795,"children":1797},{"href":1796},"\u002Fdocs\u002Fwriting-docs#docs-site-or-readme-only",[1798],{"type":94,"value":37},{"type":94,"value":1800},").\nImport the repository in Vercel through its Git integration:",{"type":89,"tag":1802,"props":1803,"children":1804},"ul",{},[1805,1821,1831,1843],{"type":89,"tag":1603,"props":1806,"children":1807},{},[1808,1813,1815,1820],{"type":89,"tag":1324,"props":1809,"children":1810},{},[1811],{"type":94,"value":1812},"Root Directory:",{"type":94,"value":1814}," ",{"type":89,"tag":97,"props":1816,"children":1817},{},[1818],{"type":94,"value":1819},"docs",{"type":94,"value":122},{"type":89,"tag":1603,"props":1822,"children":1823},{},[1824,1829],{"type":89,"tag":1324,"props":1825,"children":1826},{},[1827],{"type":94,"value":1828},"Include files outside the Root Directory in the Build Step:",{"type":94,"value":1830}," on, because\nthe docs build uses the repository's pnpm workspace.",{"type":89,"tag":1603,"props":1832,"children":1833},{},[1834,1836,1841],{"type":94,"value":1835},"Build command, output and the ignore command come from ",{"type":89,"tag":97,"props":1837,"children":1838},{},[1839],{"type":94,"value":1840},"docs\u002Fvercel.json",{"type":94,"value":1842},".\nThe ignore command builds only when the docs or the workspace manifests\nchanged since the branch's last deployment, so most pull requests do not\nuse build minutes.",{"type":89,"tag":1603,"props":1844,"children":1845},{},[1846],{"type":94,"value":1847},"Add the production domain.",{"type":89,"tag":90,"props":1849,"children":1850},{},[1851],{"type":94,"value":1852},"There is no Vercel token in GitHub and no custom preview workflow.",{"type":89,"tag":124,"props":1854,"children":1856},{"id":1855},"a-second-maintainer",[1857],{"type":94,"value":1858},"A second maintainer",{"type":89,"tag":90,"props":1860,"children":1861},{},[1862],{"type":94,"value":1863},"The standard assumes one maintainer: nobody else can review, so the release\nsummary before the npm approval replaces a second reviewer. When a second\nperson becomes a maintainer, add for every library:",{"type":89,"tag":1802,"props":1865,"children":1866},{},[1867,1904,1915],{"type":89,"tag":1603,"props":1868,"children":1869},{},[1870,1875,1877,1882,1884,1889,1891,1896,1898,1902],{"type":89,"tag":97,"props":1871,"children":1872},{},[1873],{"type":94,"value":1874},".github\u002FCODEOWNERS",{"type":94,"value":1876}," with both maintainers for ",{"type":89,"tag":97,"props":1878,"children":1879},{},[1880],{"type":94,"value":1881},"\u002F.github\u002F",{"type":94,"value":1883}," and\n",{"type":89,"tag":97,"props":1885,"children":1886},{},[1887],{"type":94,"value":1888},"\u002Fscripts\u002Frelease.mjs",{"type":94,"value":1890},", and ",{"type":89,"tag":97,"props":1892,"children":1893},{},[1894],{"type":94,"value":1895},"\"require_code_owner_review\": true",{"type":94,"value":1897}," in the\n",{"type":89,"tag":97,"props":1899,"children":1900},{},[1901],{"type":94,"value":427},{"type":94,"value":1903}," ruleset. A change to the release machinery then needs the other\nperson's approval.",{"type":89,"tag":1603,"props":1905,"children":1906},{},[1907,1909,1913],{"type":94,"value":1908},"The second maintainer as a required reviewer of the ",{"type":89,"tag":97,"props":1910,"children":1911},{},[1912],{"type":94,"value":420},{"type":94,"value":1914}," environment.",{"type":89,"tag":1603,"props":1916,"children":1917},{},[1918],{"type":94,"value":1919},"The second maintainer as an owner of every npm package (with 2FA) and of the\nGitHub organization, so one lost account no longer stops releases.",{"type":89,"tag":124,"props":1921,"children":1923},{"id":1922},"check-the-result",[1924],{"type":94,"value":1925},"Check the result",{"type":89,"tag":90,"props":1927,"children":1928},{},[1929,1931,1935],{"type":94,"value":1930},"From a ",{"type":89,"tag":97,"props":1932,"children":1933},{},[1934],{"type":94,"value":181},{"type":94,"value":183},{"type":89,"tag":185,"props":1937,"children":1938},{"language":187,"class":188},[1939],{"type":89,"tag":97,"props":1940,"children":1941},{"class":192},[1942],{"type":89,"tag":195,"props":1943,"children":1944},{"class":197,"style":198},[1945,1949,1954],{"type":89,"tag":195,"props":1946,"children":1947},{"style":202},[1948],{"type":94,"value":313},{"type":89,"tag":195,"props":1950,"children":1951},{"style":208},[1952],{"type":94,"value":1953}," audit:repos",{"type":89,"tag":195,"props":1955,"children":1956},{"style":208},[1957],{"type":94,"value":507},{"type":89,"tag":90,"props":1959,"children":1960},{},[1961,1963,1968,1970,1975,1977,1981,1982,1986],{"type":94,"value":1962},"Fix every ",{"type":89,"tag":97,"props":1964,"children":1965},{},[1966],{"type":94,"value":1967},"FAIL",{"type":94,"value":1969},". Read every ",{"type":89,"tag":97,"props":1971,"children":1972},{},[1973],{"type":94,"value":1974},"WARN",{"type":94,"value":1976},": it is either excess tooling to remove, or\na setting the audit could not read with your access. Add the repository to\n",{"type":89,"tag":97,"props":1978,"children":1979},{},[1980],{"type":94,"value":1687},{"type":94,"value":401},{"type":89,"tag":97,"props":1983,"children":1984},{},[1985],{"type":94,"value":181},{"type":94,"value":122},{"type":89,"tag":90,"props":1988,"children":1989},{},[1990,1992,1996],{"type":94,"value":1991},"The audit cannot see the npm ",{"type":89,"tag":1324,"props":1993,"children":1994},{},[1995],{"type":94,"value":1668},{"type":94,"value":1997}," setting. Check it by hand\nonce, after you set it.",{"title":1999,"searchDepth":2000,"depth":2000,"links":2001},"",4,[2002,2004,2005,2006,2007,2008,2009],{"id":126,"depth":2003,"text":129},2,{"id":447,"depth":2003,"text":450},{"id":464,"depth":2003,"text":467},{"id":1583,"depth":2003,"text":1586},{"id":1785,"depth":2003,"text":1788},{"id":1855,"depth":2003,"text":1858},{"id":1922,"depth":2003,"text":1925},"markdown",{"source":2012,"path":2013,"stem":2014,"dir":1819,"extension":2015},"content","docs\u002F3.set-up-a-repository.md","docs\u002F3.set-up-a-repository","md",{"requestedPath":23,"resolvedPath":23,"alternates":2017},[],{"requested":2019,"resolved":2020,"usedFallback":9},{},{"locale":8},{"previous":2022,"next":2023},{"title":13,"id":14,"canonicalKey":15,"locale":8,"draft":9,"path":17},{"title":25,"id":26,"canonicalKey":27,"locale":8,"draft":9,"path":29},{"left":2025,"top":2025,"width":2026,"height":2026,"rotate":2025,"vFlip":9,"hFlip":9,"body":2027},0,24,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19h8M4 17l6-6l-6-6\"\u002F>",{"left":2025,"top":2025,"width":2026,"height":2026,"rotate":2025,"vFlip":9,"hFlip":9,"body":2029},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1791448770426]