[{"data":1,"prerenderedAt":698},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:_MT85VtDm6KqowUhzvG5tZrvX65-_xoLcpYKcob-Deg":72,"content-page-surround:docs:_MT85VtDm6KqowUhzvG5tZrvX65-_xoLcpYKcob-Deg":691,"i-lucide:clipboard":694},[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":5,"description":73,"icon":10,"redirectFrom":74,"body":83,"type":679,"id":6,"canonicalKey":7,"draft":9,"partial":9,"locale":8,"collection":680,"navigationFile":9,"file":681,"route":686,"resolution":688},"What the Lupinum OSS standard is for, what a standard repository looks like, and the one rule for tooling.",[75,76,77,78,79,80,81,82],"\u002Fdocs\u002Fget-started","\u002Fdocs\u002Fstandards","\u002Fdocs\u002Fprocedures","\u002Fdocs\u002Fchecklists","\u002Fdocs\u002Fget-started\u002Fchoose-a-profile","\u002Fdocs\u002Fget-started\u002Fnew-project-path","\u002Fdocs\u002Fstandards\u002Fdocumentation-ownership","\u002Fdocs\u002Fprocedures\u002Fdocumentation-change",{"type":84,"children":85,"toc":669},"root",[86,94,130,148,155,160,334,352,435,441,446,504,509,531,537,548,554,645,651],{"type":87,"tag":88,"props":89,"children":90},"element","p",{},[91],{"type":92,"value":93},"text","Lupinum maintains a set of open-source libraries with very little human time.\nAgents do most of the routine work. This standard keeps that sustainable:",{"type":87,"tag":95,"props":96,"children":97},"ul",{},[98,110,120],{"type":87,"tag":99,"props":100,"children":101},"li",{},[102,108],{"type":87,"tag":103,"props":104,"children":105},"strong",{},[106],{"type":92,"value":107},"Lazy maintenance.",{"type":92,"value":109}," A maintainer reviews pull requests and clicks two\nbuttons to release. Everything else is automated or delegated to agents.",{"type":87,"tag":99,"props":111,"children":112},{},[113,118],{"type":87,"tag":103,"props":114,"children":115},{},[116],{"type":92,"value":117},"Real security.",{"type":92,"value":119}," npm publishing cannot happen without the maintainer's\napproval, never uses a stored token, and never runs dependency code while it\nholds publish rights.",{"type":87,"tag":99,"props":121,"children":122},{},[123,128],{"type":87,"tag":103,"props":124,"children":125},{},[126],{"type":92,"value":127},"Minimal tooling.",{"type":92,"value":129}," A repository contains the library, its tests, its docs\nand a small amount of standard setup. Nothing else.",{"type":87,"tag":88,"props":131,"children":132},{},[133,135,146],{"type":92,"value":134},"The governed repositories are listed in\n",{"type":87,"tag":136,"props":137,"children":139},"a",{"href":138},"https:\u002F\u002Fgithub.com\u002Flupinum-dev\u002Flupinum-oss\u002Fblob\u002Fmain\u002Ffleet\u002Flibraries.json",[140],{"type":87,"tag":141,"props":142,"children":143},"code",{},[144],{"type":92,"value":145},"fleet\u002Flibraries.json",{"type":92,"value":147},".",{"type":87,"tag":149,"props":150,"children":152},"h2",{"id":151},"what-a-standard-repository-looks-like",[153],{"type":92,"value":154},"What a standard repository looks like",{"type":87,"tag":88,"props":156,"children":157},{},[158],{"type":92,"value":159},"Every library has the same layout. The root holds only what a visitor or an\nagent looks for first, and the configuration files that tools require there.",{"type":87,"tag":161,"props":162,"children":164},"pre",{"language":92,"class":163},"shiki shiki-themes light-plus dark-plus dark:dark-plus",[165],{"type":87,"tag":141,"props":166,"children":168},{"class":167},"language-text",[169,180,182,190,191,199,200,208,209,217,218,226,227,235,236,244,245,253,254,262,263,271,272,280,281,289,290,298,299,307,308,316,317,325,326],{"type":87,"tag":170,"props":171,"children":174},"span",{"class":172,"style":173},"line","display: inline",[175],{"type":87,"tag":170,"props":176,"children":177},{},[178],{"type":92,"value":179},"README.md, LICENSE   what visitors read first",{"type":92,"value":181},"\n",{"type":87,"tag":170,"props":183,"children":184},{"class":172,"style":173},[185],{"type":87,"tag":170,"props":186,"children":187},{},[188],{"type":92,"value":189},"AGENTS.md            one page for agents: commands, hard rules, library principles",{"type":92,"value":181},{"type":87,"tag":170,"props":192,"children":193},{"class":172,"style":173},[194],{"type":87,"tag":170,"props":195,"children":196},{},[197],{"type":92,"value":198},"CHANGELOG.md         generated by Changesets (in each package of a monorepo instead)",{"type":92,"value":181},{"type":87,"tag":170,"props":201,"children":202},{"class":172,"style":173},[203],{"type":87,"tag":170,"props":204,"children":205},{},[206],{"type":92,"value":207},"package.json, pnpm-workspace.yaml, pnpm-lock.yaml",{"type":92,"value":181},{"type":87,"tag":170,"props":210,"children":211},{"class":172,"style":173},[212],{"type":87,"tag":170,"props":213,"children":214},{},[215],{"type":92,"value":216},"                     plus the tool configuration files that must sit in the root",{"type":92,"value":181},{"type":87,"tag":170,"props":219,"children":220},{"class":172,"style":173},[221],{"type":87,"tag":170,"props":222,"children":223},{},[224],{"type":92,"value":225},"src\u002F or packages\u002F    the library",{"type":92,"value":181},{"type":87,"tag":170,"props":228,"children":229},{"class":172,"style":173},[230],{"type":87,"tag":170,"props":231,"children":232},{},[233],{"type":92,"value":234},"docs\u002F                documentation site, optional (Ginko Docs; Vercel deploys it through Git)",{"type":92,"value":181},{"type":87,"tag":170,"props":237,"children":238},{"class":172,"style":173},[239],{"type":87,"tag":170,"props":240,"children":241},{},[242],{"type":92,"value":243},".changeset\u002F          Changesets config and pending changesets",{"type":92,"value":181},{"type":87,"tag":170,"props":246,"children":247},{"class":172,"style":173},[248],{"type":87,"tag":170,"props":249,"children":250},{},[251],{"type":92,"value":252},".github\u002F",{"type":92,"value":181},{"type":87,"tag":170,"props":255,"children":256},{"class":172,"style":173},[257],{"type":87,"tag":170,"props":258,"children":259},{},[260],{"type":92,"value":261},"  workflows\u002F         ci.yml, release.yml, preview.yml",{"type":92,"value":181},{"type":87,"tag":170,"props":264,"children":265},{"class":172,"style":173},[266],{"type":87,"tag":170,"props":267,"children":268},{},[269],{"type":92,"value":270},"  ISSUE_TEMPLATE\u002F, pull_request_template.md",{"type":92,"value":181},{"type":87,"tag":170,"props":273,"children":274},{"class":172,"style":173},[275],{"type":87,"tag":170,"props":276,"children":277},{},[278],{"type":92,"value":279},"  CONTRIBUTING.md    short; GitHub shows it from here",{"type":92,"value":181},{"type":87,"tag":170,"props":282,"children":283},{"class":172,"style":173},[284],{"type":87,"tag":170,"props":285,"children":286},{},[287],{"type":92,"value":288},"  SECURITY.md        how to report, which versions get fixes",{"type":92,"value":181},{"type":87,"tag":170,"props":291,"children":292},{"class":172,"style":173},[293],{"type":87,"tag":170,"props":294,"children":295},{},[296],{"type":92,"value":297},"  renovate.json",{"type":92,"value":181},{"type":87,"tag":170,"props":300,"children":301},{"class":172,"style":173},[302],{"type":87,"tag":170,"props":303,"children":304},{},[305],{"type":92,"value":306},".claude\u002FCLAUDE.md    one line that imports AGENTS.md",{"type":92,"value":181},{"type":87,"tag":170,"props":309,"children":310},{"class":172,"style":173},[311],{"type":87,"tag":170,"props":312,"children":313},{},[314],{"type":92,"value":315},"internals\u002F           notes for maintainers and agents, not for users",{"type":92,"value":181},{"type":87,"tag":170,"props":318,"children":319},{"class":172,"style":173},[320],{"type":87,"tag":170,"props":321,"children":322},{},[323],{"type":92,"value":324},"  decisions.md       dated decision log: \"Dn: decision — why\"",{"type":92,"value":181},{"type":87,"tag":170,"props":327,"children":328},{"class":172,"style":173},[329],{"type":87,"tag":170,"props":330,"children":331},{},[332],{"type":92,"value":333},"  migrations.md      temporary compatibility code and when it goes (only while there is some)",{"type":87,"tag":88,"props":335,"children":336},{},[337,339,344,346,350],{"type":92,"value":338},"Nothing else goes in the root. Move a note into ",{"type":87,"tag":141,"props":340,"children":341},{},[342],{"type":92,"value":343},"internals\u002F",{"type":92,"value":345},", a community\nfile into ",{"type":87,"tag":141,"props":347,"children":348},{},[349],{"type":92,"value":252},{"type":92,"value":351},", and delete configuration that no tool reads.",{"type":87,"tag":88,"props":353,"children":354},{},[355,357,362,364,369,370,375,376,381,383,388,389,394,395,400,401,406,407,412,414,419,421,426,428,433],{"type":92,"value":356},"Package scripts stay close to this list: ",{"type":87,"tag":141,"props":358,"children":359},{},[360],{"type":92,"value":361},"dev",{"type":92,"value":363},", ",{"type":87,"tag":141,"props":365,"children":366},{},[367],{"type":92,"value":368},"build",{"type":92,"value":363},{"type":87,"tag":141,"props":371,"children":372},{},[373],{"type":92,"value":374},"lint",{"type":92,"value":363},{"type":87,"tag":141,"props":377,"children":378},{},[379],{"type":92,"value":380},"format",{"type":92,"value":382},",\n",{"type":87,"tag":141,"props":384,"children":385},{},[386],{"type":92,"value":387},"typecheck",{"type":92,"value":363},{"type":87,"tag":141,"props":390,"children":391},{},[392],{"type":92,"value":393},"test",{"type":92,"value":363},{"type":87,"tag":141,"props":396,"children":397},{},[398],{"type":92,"value":399},"docs:dev",{"type":92,"value":363},{"type":87,"tag":141,"props":402,"children":403},{},[404],{"type":92,"value":405},"docs:build",{"type":92,"value":363},{"type":87,"tag":141,"props":408,"children":409},{},[410],{"type":92,"value":411},"verify",{"type":92,"value":413}," and ",{"type":87,"tag":141,"props":415,"children":416},{},[417],{"type":92,"value":418},"changeset",{"type":92,"value":420},".\n",{"type":87,"tag":141,"props":422,"children":423},{},[424],{"type":92,"value":425},"pnpm verify",{"type":92,"value":427}," runs the core checks CI runs, so run it before you open a pull\nrequest. A slow suite (end-to-end tests, a build matrix) can run only as an\nextra CI job; ",{"type":87,"tag":141,"props":429,"children":430},{},[431],{"type":92,"value":432},"internals\u002Fdecisions.md",{"type":92,"value":434}," names it and says why.",{"type":87,"tag":149,"props":436,"children":438},{"id":437},"docs-for-agents-in-consumer-projects",[439],{"type":92,"value":440},"Docs for agents in consumer projects",{"type":87,"tag":88,"props":442,"children":443},{},[444],{"type":92,"value":445},"Every published package ships its documentation, so an agent working in a\nconsumer project reads the docs that match the installed version:",{"type":87,"tag":95,"props":447,"children":448},{},[449,479],{"type":87,"tag":99,"props":450,"children":451},{},[452,457,459,464,466,471,473,478],{"type":87,"tag":141,"props":453,"children":454},{},[455],{"type":92,"value":456},"pnpm build",{"type":92,"value":458}," copies the rendered docs pages into ",{"type":87,"tag":141,"props":460,"children":461},{},[462],{"type":92,"value":463},"dist\u002Fagent\u002F",{"type":92,"value":465}," with an\n",{"type":87,"tag":141,"props":467,"children":468},{},[469],{"type":92,"value":470},"AGENTS.md",{"type":92,"value":472}," index. The package exports it as ",{"type":87,"tag":141,"props":474,"children":475},{},[476],{"type":92,"value":477},"\u003Cpackage>\u002Fagent-docs",{"type":92,"value":147},{"type":87,"tag":99,"props":480,"children":481},{},[482,484,489,491,496,498,502],{"type":92,"value":483},"The package's own README (the one npm and ",{"type":87,"tag":141,"props":485,"children":486},{},[487],{"type":92,"value":488},"node_modules",{"type":92,"value":490}," show) has an\n",{"type":87,"tag":103,"props":492,"children":493},{},[494],{"type":92,"value":495},"Agent setup",{"type":92,"value":497}," section. It tells the agent how to find the index and which\nshort pointer to add to the consumer's ",{"type":87,"tag":141,"props":499,"children":500},{},[501],{"type":92,"value":470},{"type":92,"value":503},". The pointer names the\ninstalled package, so it stays correct after upgrades. Consumers copy no\ndocs and install no skill.",{"type":87,"tag":88,"props":505,"children":506},{},[507],{"type":92,"value":508},"The starters include both, and the audit fails a package without the export or\nthe README section.",{"type":87,"tag":88,"props":510,"children":511},{},[512,514,519,521,525,526,530],{"type":92,"value":513},"There is no ",{"type":87,"tag":141,"props":515,"children":516},{},[517],{"type":92,"value":518},"MAINTAINING.md",{"type":92,"value":520}," and no procedure handbook inside a repository.\nProcedures live in this handbook. Library-specific knowledge lives in\n",{"type":87,"tag":141,"props":522,"children":523},{},[524],{"type":92,"value":470},{"type":92,"value":413},{"type":87,"tag":141,"props":527,"children":528},{},[529],{"type":92,"value":432},{"type":92,"value":147},{"type":87,"tag":149,"props":532,"children":534},{"id":533},"the-rule-for-tooling",[535],{"type":92,"value":536},"The rule for tooling",{"type":87,"tag":88,"props":538,"children":539},{},[540,542,546],{"type":92,"value":541},"A check or script is allowed only if it guards behavior that a user relies on,\nor a real attack path. Process documentation is not security. See\n",{"type":87,"tag":136,"props":543,"children":544},{"href":59},[545],{"type":92,"value":55},{"type":92,"value":547}," for examples.",{"type":87,"tag":149,"props":549,"children":551},{"id":550},"what-this-repository-provides",[552],{"type":92,"value":553},"What this repository provides",{"type":87,"tag":95,"props":555,"children":556},{},[557,567,582,599,623],{"type":87,"tag":99,"props":558,"children":559},{},[560,565],{"type":87,"tag":103,"props":561,"children":562},{},[563],{"type":92,"value":564},"This handbook.",{"type":92,"value":566}," Eleven pages. Read the one you need.",{"type":87,"tag":99,"props":568,"children":569},{},[570,580],{"type":87,"tag":103,"props":571,"children":572},{},[573,575,579],{"type":92,"value":574},"The ",{"type":87,"tag":136,"props":576,"children":577},{"href":17},[578],{"type":92,"value":13},{"type":92,"value":147},{"type":92,"value":581}," It decides when a library follows the\nstandard: one ID per item.",{"type":87,"tag":99,"props":583,"children":584},{},[585,590,592,597],{"type":87,"tag":103,"props":586,"children":587},{},[588],{"type":92,"value":589},"Starters",{"type":92,"value":591}," in ",{"type":87,"tag":141,"props":593,"children":594},{},[595],{"type":92,"value":596},"starters\u002F",{"type":92,"value":598},". Generate a new repository that already follows\nthe standard.",{"type":87,"tag":99,"props":600,"children":601},{},[602,607,609,614,616,621],{"type":87,"tag":103,"props":603,"children":604},{},[605],{"type":92,"value":606},"The audit.",{"type":92,"value":608}," ",{"type":87,"tag":141,"props":610,"children":611},{},[612],{"type":92,"value":613},"pnpm audit:repos",{"type":92,"value":615}," checks every governed repository against\nthe checklist through its files, ",{"type":87,"tag":141,"props":617,"children":618},{},[619],{"type":92,"value":620},"gh api",{"type":92,"value":622}," and the npm registry, and reports\nwhether the repository follows the standard and the open items. It never\nchanges anything.",{"type":87,"tag":99,"props":624,"children":625},{},[626,637,638,643],{"type":87,"tag":103,"props":627,"children":628},{},[629,630,635],{"type":92,"value":574},{"type":87,"tag":141,"props":631,"children":632},{},[633],{"type":92,"value":634},"lupinum-oss",{"type":92,"value":636}," agent skill",{"type":92,"value":591},{"type":87,"tag":141,"props":639,"children":640},{},[641],{"type":92,"value":642},"skill\u002F",{"type":92,"value":644},". It points agents at this\nhandbook and the audit, and starts when someone builds, adopts, releases or\nchecks a library.",{"type":87,"tag":149,"props":646,"children":648},{"id":647},"change-the-standard",[649],{"type":92,"value":650},"Change the standard",{"type":87,"tag":88,"props":652,"children":653},{},[654,656,661,663,667],{"type":92,"value":655},"Open a pull request against ",{"type":87,"tag":141,"props":657,"children":658},{},[659],{"type":92,"value":660},"lupinum-dev\u002Flupinum-oss",{"type":92,"value":662},". Add an entry to its\n",{"type":87,"tag":141,"props":664,"children":665},{},[666],{"type":92,"value":432},{"type":92,"value":668}," that says what changes and why. Update the handbook, the\nchecklist, the starters and the audit in the same pull request. Existing repositories adopt\nthe change through their own normal pull requests; run the audit to find them.",{"title":670,"searchDepth":671,"depth":671,"links":672},"",4,[673,675,676,677,678],{"id":151,"depth":674,"text":154},2,{"id":437,"depth":674,"text":440},{"id":533,"depth":674,"text":536},{"id":550,"depth":674,"text":553},{"id":647,"depth":674,"text":650},"markdown","docs",{"source":682,"path":683,"stem":684,"dir":680,"extension":685},"content","docs\u002F1.overview.md","docs\u002F1.overview","md",{"requestedPath":11,"resolvedPath":11,"alternates":687},[],{"requested":689,"resolved":690,"usedFallback":9},{},{"locale":8},{"previous":692,"next":693},null,{"title":13,"id":14,"canonicalKey":15,"locale":8,"draft":9,"path":17},{"left":695,"top":695,"width":696,"height":696,"rotate":695,"vFlip":9,"hFlip":9,"body":697},0,24,"\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>",1791448769269]