[{"data":1,"prerenderedAt":609},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Fdevelopment\u002Fcommit-conventions":231,"\u002Fdocs\u002Fdevelopment\u002Fcommit-conventions-surround":604},[4],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"Docs","\u002Fdocs","docs",[9,12,16,20,69,90,123,144,165,190],{"title":10,"path":6,"stem":11},"Gerbtrace Documentation","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",{"title":17,"path":18,"stem":19},"Licensing","\u002Fdocs\u002Flicensing","docs\u002F2.licensing",{"title":21,"path":22,"stem":23,"children":24,"page":68},"Viewer","\u002Fdocs\u002Fviewer","docs\u002F3.viewer",[25,29,33,37,41,45,49,53,56,60,64],{"title":26,"path":27,"stem":28},"Files","\u002Fdocs\u002Fviewer\u002Ffiles","docs\u002F3.viewer\u002F01.files",{"title":30,"path":31,"stem":32},"PCB","\u002Fdocs\u002Fviewer\u002Fpcb","docs\u002F3.viewer\u002F02.pcb",{"title":34,"path":35,"stem":36},"Panel","\u002Fdocs\u002Fviewer\u002Fpanel","docs\u002F3.viewer\u002F03.panel",{"title":38,"path":39,"stem":40},"Paste","\u002Fdocs\u002Fviewer\u002Fpaste","docs\u002F3.viewer\u002F04.paste",{"title":42,"path":43,"stem":44},"SMD","\u002Fdocs\u002Fviewer\u002Fsmd","docs\u002F3.viewer\u002F05.smd",{"title":46,"path":47,"stem":48},"THT","\u002Fdocs\u002Fviewer\u002Ftht","docs\u002F3.viewer\u002F06.tht",{"title":50,"path":51,"stem":52},"BOM","\u002Fdocs\u002Fviewer\u002Fbom","docs\u002F3.viewer\u002F07.bom",{"title":5,"path":54,"stem":55},"\u002Fdocs\u002Fviewer\u002Fdocs","docs\u002F3.viewer\u002F08.docs",{"title":57,"path":58,"stem":59},"Conversation","\u002Fdocs\u002Fviewer\u002Fconversation","docs\u002F3.viewer\u002F09.conversation",{"title":61,"path":62,"stem":63},"Summary","\u002Fdocs\u002Fviewer\u002Fsummary","docs\u002F3.viewer\u002F10.summary",{"title":65,"path":66,"stem":67},"Pricing","\u002Fdocs\u002Fviewer\u002Fpricing","docs\u002F3.viewer\u002F11.pricing",false,{"title":70,"path":71,"stem":72,"children":73,"page":68},"Tools","\u002Fdocs\u002Ftools","docs\u002F4.tools",[74,78,82,86],{"title":75,"path":76,"stem":77},"Exports","\u002Fdocs\u002Ftools\u002Fexports","docs\u002F4.tools\u002F1.exports",{"title":79,"path":80,"stem":81},"Compare","\u002Fdocs\u002Ftools\u002Fcompare","docs\u002F4.tools\u002F2.compare",{"title":83,"path":84,"stem":85},"Package Manager","\u002Fdocs\u002Ftools\u002Fpackage-manager","docs\u002F4.tools\u002F3.package-manager",{"title":87,"path":88,"stem":89},"Draw Tool","\u002Fdocs\u002Ftools\u002Fdraw-tool","docs\u002F4.tools\u002F4.draw-tool",{"title":91,"path":92,"stem":93,"children":94,"page":68},"Collaboration","\u002Fdocs\u002Fcollaboration","docs\u002F5.collaboration",[95,99,103,107,111,115,119],{"title":96,"path":97,"stem":98},"Team Settings","\u002Fdocs\u002Fcollaboration\u002Fteam-settings","docs\u002F5.collaboration\u002F1.team-settings",{"title":100,"path":101,"stem":102},"Team Members","\u002Fdocs\u002Fcollaboration\u002Fteam-members","docs\u002F5.collaboration\u002F2.team-members",{"title":104,"path":105,"stem":106},"User Profile","\u002Fdocs\u002Fcollaboration\u002Fuser-profile","docs\u002F5.collaboration\u002F3.user-profile",{"title":108,"path":109,"stem":110},"Spaces","\u002Fdocs\u002Fcollaboration\u002Fspaces","docs\u002F5.collaboration\u002F4.spaces",{"title":112,"path":113,"stem":114},"Notifications","\u002Fdocs\u002Fcollaboration\u002Fnotifications","docs\u002F5.collaboration\u002F6.notifications",{"title":116,"path":117,"stem":118},"Plans & Billing","\u002Fdocs\u002Fcollaboration\u002Fplans-and-billing","docs\u002F5.collaboration\u002F7.plans-and-billing",{"title":120,"path":121,"stem":122},"Connected Apps & MCP","\u002Fdocs\u002Fcollaboration\u002Fconnected-apps","docs\u002F5.collaboration\u002F8.connected-apps",{"title":124,"path":125,"stem":126,"children":127,"page":68},"App","\u002Fdocs\u002Fapp","docs\u002F6.app",[128,132,136,140],{"title":129,"path":130,"stem":131},"Desktop App","\u002Fdocs\u002Fapp\u002Fdesktop","docs\u002F6.app\u002F1.desktop",{"title":133,"path":134,"stem":135},"Light & Dark Mode","\u002Fdocs\u002Fapp\u002Flight-dark-mode","docs\u002F6.app\u002F2.light-dark-mode",{"title":137,"path":138,"stem":139},"Performance Monitor","\u002Fdocs\u002Fapp\u002Fperformance-monitor","docs\u002F6.app\u002F3.performance-monitor",{"title":141,"path":142,"stem":143},"Report a Bug","\u002Fdocs\u002Fapp\u002Freport-a-bug","docs\u002F6.app\u002F4.report-a-bug",{"title":145,"path":146,"stem":147,"children":148,"page":68},"Guides","\u002Fdocs\u002Fguides","docs\u002F7.guides",[149,153,157,161],{"title":150,"path":151,"stem":152},"Importing Files","\u002Fdocs\u002Fguides\u002Fimporting-files","docs\u002F7.guides\u002F1.importing-files",{"title":154,"path":155,"stem":156},"Supported Formats","\u002Fdocs\u002Fguides\u002Fsupported-formats","docs\u002F7.guides\u002F2.supported-formats",{"title":158,"path":159,"stem":160},"Package Library","\u002Fdocs\u002Fguides\u002Fpackage-library","docs\u002F7.guides\u002F3.package-library",{"title":162,"path":163,"stem":164},"Panel Checks","\u002Fdocs\u002Fguides\u002Fpanel-checks","docs\u002F7.guides\u002F4.panel-checks",{"title":166,"path":167,"stem":168,"children":169,"page":68},"Reference","\u002Fdocs\u002Freference","docs\u002F8.reference",[170,174,178,182,186],{"title":171,"path":172,"stem":173},"BOM File Format","\u002Fdocs\u002Freference\u002Fbom-format","docs\u002F8.reference\u002F1.bom-format",{"title":175,"path":176,"stem":177},"Package Definitions","\u002Fdocs\u002Freference\u002Fpackage-definitions","docs\u002F8.reference\u002F2.package-definitions",{"title":179,"path":180,"stem":181},"Package Naming","\u002Fdocs\u002Freference\u002Fpackage-naming","docs\u002F8.reference\u002F3.package-naming",{"title":183,"path":184,"stem":185},"TPSys Format","\u002Fdocs\u002Freference\u002Ftpsys-format","docs\u002F8.reference\u002F4.tpsys-format",{"title":187,"path":188,"stem":189},"Jet Printing","\u002Fdocs\u002Freference\u002Fjet-printing","docs\u002F8.reference\u002F5.jet-printing",{"title":191,"path":192,"stem":193,"children":194,"page":68},"Development","\u002Fdocs\u002Fdevelopment","docs\u002F9.development",[195,199,203,207,211,215,219,223,227],{"title":196,"path":197,"stem":198},"Development Setup","\u002Fdocs\u002Fdevelopment\u002Fsetup","docs\u002F9.development\u002F1.setup",{"title":200,"path":201,"stem":202},"Architecture","\u002Fdocs\u002Fdevelopment\u002Farchitecture","docs\u002F9.development\u002F2.architecture",{"title":204,"path":205,"stem":206},"CAD Libraries","\u002Fdocs\u002Fdevelopment\u002Fcad-libraries","docs\u002F9.development\u002F3.cad-libraries",{"title":208,"path":209,"stem":210},"Release Process","\u002Fdocs\u002Fdevelopment\u002Frelease-process","docs\u002F9.development\u002F4.release-process",{"title":212,"path":213,"stem":214},"Error Monitoring","\u002Fdocs\u002Fdevelopment\u002Ferror-monitoring","docs\u002F9.development\u002F5.error-monitoring",{"title":216,"path":217,"stem":218},"Contributing","\u002Fdocs\u002Fdevelopment\u002Fcontributing","docs\u002F9.development\u002F6.contributing",{"title":220,"path":221,"stem":222},"Commit Conventions","\u002Fdocs\u002Fdevelopment\u002Fcommit-conventions","docs\u002F9.development\u002F7.commit-conventions",{"title":224,"path":225,"stem":226},"Sidebar Design","\u002Fdocs\u002Fdevelopment\u002Fsidebar-design","docs\u002F9.development\u002F8.sidebar-design",{"title":228,"path":229,"stem":230},"Operational Runbooks","\u002Fdocs\u002Fdevelopment\u002Frunbooks","docs\u002F9.development\u002F9.runbooks",{"id":232,"title":220,"body":233,"description":597,"extension":598,"links":599,"meta":600,"navigation":601,"path":221,"seo":602,"stem":222,"__hash__":603},"docs\u002Fdocs\u002F9.development\u002F7.commit-conventions.md",{"type":234,"value":235,"toc":582},"minimark",[236,240,244,249,252,351,355,388,392,414,418,421,430,444,447,457,461,468,475,480,482,488,492,495,515,520,543,547,554,557,563,567],[237,238,220],"h1",{"id":239},"commit-conventions",[241,242,243],"p",{},"All commits in the Gerbtrace repository follow a consistent format. This page documents the conventions for commit messages, release notes, and hotfixes.",[245,246,248],"h2",{"id":247},"commit-types","Commit types",[241,250,251],{},"Every commit subject starts with one of these prefixes:",[253,254,255,271],"table",{},[256,257,258],"thead",{},[259,260,261,265,268],"tr",{},[262,263,264],"th",{},"Prefix",[262,266,267],{},"When to use",[262,269,270],{},"Example",[272,273,274,291,306,321,336],"tbody",{},[259,275,276,283,286],{},[277,278,279],"td",{},[280,281,282],"code",{},"Release vX.Y.Z",[277,284,285],{},"Version bump and tag commit",[277,287,288],{},[280,289,290],{},"Release v1.2.0",[259,292,293,298,301],{},[277,294,295],{},[280,296,297],{},"hotfix:",[277,299,300],{},"Bug fix or patch pushed between releases",[277,302,303],{},[280,304,305],{},"hotfix: fix BOM pricing for EUR currency",[259,307,308,313,316],{},[277,309,310],{},[280,311,312],{},"feat:",[277,314,315],{},"New feature or significant enhancement",[277,317,318],{},[280,319,320],{},"feat: add DXF export for panel outlines",[259,322,323,328,331],{},[277,324,325],{},[280,326,327],{},"chore:",[277,329,330],{},"Housekeeping (dependencies, config, CI)",[277,332,333],{},[280,334,335],{},"chore: sync package-lock.json",[259,337,338,343,346],{},[277,339,340],{},[280,341,342],{},"ci:",[277,344,345],{},"CI\u002FCD workflow changes",[277,347,348],{},[280,349,350],{},"ci: add manual deploy trigger",[245,352,354],{"id":353},"subject-line-rules","Subject line rules",[356,357,358,362,365,376,379],"ul",{},[359,360,361],"li",{},"Maximum 72 characters.",[359,363,364],{},"Use imperative mood: \"fix crash\" not \"fixed crash\" or \"fixes crash\".",[359,366,367,368,371,372,375],{},"Lowercase after the prefix colon: ",[280,369,370],{},"hotfix: fix BOM crash",", not ",[280,373,374],{},"hotfix: Fix BOM crash",".",[359,377,378],{},"No trailing period.",[359,380,381,382,371,385,375],{},"Be specific: ",[280,383,384],{},"hotfix: fix Elexess API crash on empty response",[280,386,387],{},"hotfix: fix crash",[245,389,391],{"id":390},"body","Body",[356,393,394,397,400,403],{},[359,395,396],{},"Separate from the subject with a blank line.",[359,398,399],{},"Optional for hotfixes and chores. Recommended for features and releases.",[359,401,402],{},"Wrap at 72 characters.",[359,404,405,406,371,410,413],{},"Explain ",[407,408,409],"strong",{},"why",[407,411,412],{},"what"," (the diff shows what).",[245,415,417],{"id":416},"release-commits","Release commits",[241,419,420],{},"A release commit is created when bumping the version and tagging a new release.",[241,422,423,426,427,429],{},[407,424,425],{},"Subject:"," ",[280,428,282],{}," (no extra text after the version number).",[241,431,432,435,436,443],{},[407,433,434],{},"Body:"," The release notes content — the same flat bullet list that appears on the ",[437,438,442],"a",{"href":439,"rel":440},"https:\u002F\u002Fgithub.com\u002Fnewmatik\u002Fgerbtrace-releases\u002Freleases",[441],"nofollow","GitHub Releases"," page and in the desktop app's \"What's New\" dialog.",[241,445,446],{},"Example:",[448,449,454],"pre",{"className":450,"code":452,"language":453},[451],"language-text","Release v1.1.0\n\n- New modular viewer workflow with dedicated Files, PCB, Panel, Components, BOM, and Docs tabs\n- BOM editing with focused details panel, inline field highlighting, and pricing visibility\n- Team projects now support assignee selection with enforced access rules\n","text",[280,455,452],{"__ignoreMap":456},"",[245,458,460],{"id":459},"hotfix-commits","Hotfix commits",[241,462,463,464,467],{},"A hotfix is any bug fix, patch, or correction pushed between releases. Hotfixes land directly on the release branch or on ",[280,465,466],{},"main"," after a release.",[241,469,470,426,472],{},[407,471,425],{},[280,473,474],{},"hotfix: \u003Cconcise description of the fix>",[241,476,477,479],{},[407,478,434],{}," Optional. Include a 1-2 sentence explanation when the subject alone isn't self-explanatory.",[241,481,446],{},[448,483,486],{"className":484,"code":485,"language":453},[451],"hotfix: fix magic link redirect in Tauri desktop app\n\nSwitch Supabase client to implicit auth flow to prevent PKCE code-verifier\nmismatches when magic links open in a different browser context.\n",[280,487,485],{"__ignoreMap":456},[245,489,491],{"id":490},"release-notes","Release notes",[241,493,494],{},"Release notes are written at the time the version tag is pushed. They appear in three places:",[496,497,498,505,512],"ol",{},[359,499,500,501,504],{},"The ",[437,502,442],{"href":439,"rel":503},[441]," page.",[359,506,507,508,511],{},"The Tauri desktop updater (",[280,509,510],{},"latest.json"," body field).",[359,513,514],{},"The in-app \"What's New\" dialog shown after a desktop auto-update.",[516,517,519],"h3",{"id":518},"format","Format",[356,521,522,525,528,531,534,537,540],{},[359,523,524],{},"Use a flat bullet list. No headings, no categories, no sub-lists.",[359,526,527],{},"Each bullet is a single concise sentence describing one user-facing change.",[359,529,530],{},"Focus on features and bug fixes that affect users. Omit internal refactors, CI changes, and dependency bumps unless they fix a visible problem.",[359,532,533],{},"No emojis.",[359,535,536],{},"No \"What's Changed\" heading or auto-generated contributor lists.",[359,538,539],{},"For the initial release, start with \"Initial release.\" before the bullets.",[359,541,542],{},"Keep the text short enough to read comfortably in a small modal dialog.",[516,544,546],{"id":545},"title","Title",[241,548,549,550,553],{},"Use the bare version number: ",[280,551,552],{},"v1.2.0",". Do not prefix with the product name.",[516,555,270],{"id":556},"example",[448,558,561],{"className":559,"code":560,"language":453},[451],"v1.1.1\n\n- Complete in-app documentation hub with guides and references\n- New Summary panel and file table preview for faster board review\n- Improved PCB, BOM, and Pick and Place workflows\n- Paste settings and project file import preferences now saved consistently\n- Fix PCB field and viewer UI issues\n",[280,562,560],{"__ignoreMap":456},[245,564,566],{"id":565},"attribution","Attribution",[356,568,569,576,579],{},[359,570,571,572,575],{},"Never include ",[280,573,574],{},"Co-authored-by"," trailers for AI tools (Cursor, CodeRabbit, Codex, or any other AI agent).",[359,577,578],{},"Never reference AI tools in commit messages, PR descriptions, or release notes.",[359,580,581],{},"Human co-author trailers are allowed when explicitly provided.",{"title":456,"searchDepth":583,"depth":584,"links":585},3,2,[586,587,588,589,590,591,596],{"id":247,"depth":584,"text":248},{"id":353,"depth":584,"text":354},{"id":390,"depth":584,"text":391},{"id":416,"depth":584,"text":417},{"id":459,"depth":584,"text":460},{"id":490,"depth":584,"text":491,"children":592},[593,594,595],{"id":518,"depth":583,"text":519},{"id":545,"depth":583,"text":546},{"id":556,"depth":583,"text":270},{"id":565,"depth":584,"text":566},"Commit message format, release notes, and hotfix conventions for the Gerbtrace repository.","md",null,{},true,{"title":220,"description":597},"_NNIZsN5TExLyfOeeVZjDEcuBaujo_hcSoZYZkYAtpM",[605,607],{"title":216,"path":217,"stem":218,"description":606,"children":-1},"Coding conventions, design system guidelines, and how to contribute to Gerbtrace.",{"title":224,"path":225,"stem":226,"description":608,"children":-1},"Reusable sidebar UX pattern used in the panel editor and other screens.",1790998746612]