[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C4MRABES7Z9QMAZAXWKPMQ":3,"skill-same:01M6C4MRABES7Z9QMAZAXWKPMQ":198},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6C4MRABES7Z9QMAZAXWKPMQ","principle-subtract-before-you-add",null,"WHEN about to add a mechanism, owner, queue, validator or abstraction; NOT deletion by appearance or a hard-to-trace path with no addition planned; removes proven redundancy first and judges the whole system.","mintuz\u002Fskills","mintuz","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F447031?v=4","01M6BVWJYSVR4XQC9AQCEMWQRG","Adam Bulmer","01M6C4DCXKNYZB281YB3PZDJJG",35,"MIT","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fprinciple\u002Fskills\u002Fprinciple-subtract-before-you-add\u002FSKILL.md",[],[19,20,21,22,23],"principle subtract before you add","first","system","trace","queue","2026-11-10 10:12:30",false,"---\nname: principle-subtract-before-you-add\ndescription: \"WHEN about to add a mechanism, owner, queue, validator or abstraction; NOT deletion by appearance or a hard-to-trace path with no addition planned; removes proven redundancy first and judges the whole system.\"\n---\n\n# Subtract Before You Add\n\nBefore adding a mechanism, owner or layer, remove proven redundancy and judge the whole system.\n\n1. Identify the behaviour and guarantees the change must preserve. Before adding another owner, queue, validator or abstraction, check whether deletion, a direct change or an existing mechanism meets the requirement (`principle-reuse-before-building`).\n2. Remove demonstrated dead paths, duplicated rules and content-free references within scope; repair their maintained callers and links. Sequence independent safe subtraction before construction. Keep removal coupled to replacement when separating them would break the contract. Avoid unrelated cleanup.\n3. Two similar guards may protect different boundaries or mutations. Prove redundancy before deleting either; preserve failure behaviour and its tests. Prefer observed requirements over speculative layers and scaffolding.\n4. Choose the smallest coherent change that meets the contract. More lines can be less work than a short patch that drops cancellation, errors or compatibility. Judge the complete system, including shifted complexity, rather than celebrating fewer local lines.\n5. Verify the affected public behaviour and references after each coherent change. Stop when the accepted outcome is met on the simpler base.\n\nDistinct from: `principle-reuse-before-building` (about to write a helper, owner, script or component: search for an existing option), `principle-minimize-reader-load` (an existing path is hard to trace, with no addition planned), `principle-foundational-thinking` (adding infrastructure or abstraction \"for later\").\n\nDone: the addition is still needed after removal, and no complexity has merely moved.\n","# Subtract Before You Add\n\nBefore adding a mechanism, owner or layer, remove proven redundancy and judge the whole system.\n\n1. Identify the behaviour and guarantees the change must preserve. Before adding another owner, queue, validator or abstraction, check whether deletion, a direct change or an existing mechanism meets the requirement (`principle-reuse-before-building`).\n2. Remove demonstrated dead paths, duplicated rules and content-free references within scope; repair their maintained callers and links. Sequence independent safe subtraction before construction. Keep removal coupled to replacement when separating them would break the contract. Avoid unrelated cleanup.\n3. Two similar guards may protect different boundaries or mutations. Prove redundancy before deleting either; preserve failure behaviour and its tests. Prefer observed requirements over speculative layers and scaffolding.\n4. Choose the smallest coherent change that meets the contract. More lines can be less work than a short patch that drops cancellation, errors or compatibility. Judge the complete system, including shifted complexity, rather than celebrating fewer local lines.\n5. Verify the affected public behaviour and references after each coherent change. Stop when the accepted outcome is met on the simpler base.\n\nDistinct from: `principle-reuse-before-building` (about to write a helper, owner, script or component: search for an existing option), `principle-minimize-reader-load` (an existing path is hard to trace, with no addition planned), `principle-foundational-thinking` (adding infrastructure or abstraction \"for later\").\n\nDone: the addition is still needed after removal, and no complexity has merely moved.\n",{"name":5,"description":7},"main","4e0a12b5048eac78a3ace4feee657873cdd530ef","src\u002Fprinciple\u002Fskills\u002Fprinciple-subtract-before-you-add",7,"https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills","https:\u002F\u002Fgithub.com\u002Fmintuz","http:\u002F\u002Fwww.mintuz.com","Working at @monzo, Previously worked at Moonpig, @booking and @bbc","2026-11-13 19:21:11",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add mintuz\u002Fskills --skill principle-subtract-before-you-add",{"tool":44,"command":45},"bunx","bunx skills add mintuz\u002Fskills --skill principle-subtract-before-you-add",{"tool":47,"command":48},"pnpm","pnpm dlx skills add mintuz\u002Fskills --skill principle-subtract-before-you-add","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fprinciple\u002Fskills\u002Fprinciple-subtract-before-you-add\u002FSKILL.md",true,[52,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"AGENTS.md","REFERENCE","参考文档",46763,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002FAGENTS.md",{"path":59,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":60,"sourceHtmlUrl":61},"metadata.json",818,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Fmetadata.json",{"path":63,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":64,"sourceHtmlUrl":65},"README.md",3324,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002FREADME.md",{"path":67,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":68,"sourceHtmlUrl":69},"rules\u002F_contributing.md",4147,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002F_contributing.md",{"path":71,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":72,"sourceHtmlUrl":73},"rules\u002F_sections.md",1682,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002F_sections.md",{"path":75,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":76,"sourceHtmlUrl":77},"rules\u002F_template.md",1040,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002F_template.md",{"path":79,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":80,"sourceHtmlUrl":81},"rules\u002Fadvanced-full-text-search.md",1468,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fadvanced-full-text-search.md",{"path":83,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":84,"sourceHtmlUrl":85},"rules\u002Fadvanced-jsonb-indexing.md",1458,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fadvanced-jsonb-indexing.md",{"path":87,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":88,"sourceHtmlUrl":89},"rules\u002Fconn-idle-timeout.md",1282,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fconn-idle-timeout.md",{"path":91,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":92,"sourceHtmlUrl":93},"rules\u002Fconn-limits.md",1448,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fconn-limits.md",{"path":95,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":96,"sourceHtmlUrl":97},"rules\u002Fconn-pooling.md",1382,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fconn-pooling.md",{"path":99,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":100,"sourceHtmlUrl":101},"rules\u002Fconn-prepared-statements.md",1615,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fconn-prepared-statements.md",{"path":103,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":104,"sourceHtmlUrl":105},"rules\u002Fdata-batch-inserts.md",1287,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fdata-batch-inserts.md",{"path":107,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":108,"sourceHtmlUrl":109},"rules\u002Fdata-n-plus-one.md",1361,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fdata-n-plus-one.md",{"path":111,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":112,"sourceHtmlUrl":113},"rules\u002Fdata-pagination.md",1443,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fdata-pagination.md",{"path":115,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":116,"sourceHtmlUrl":117},"rules\u002Fdata-upsert.md",1390,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fdata-upsert.md",{"path":119,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":120,"sourceHtmlUrl":121},"rules\u002Flock-advisory.md",1531,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Flock-advisory.md",{"path":123,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":124,"sourceHtmlUrl":125},"rules\u002Flock-deadlock-prevention.md",1898,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Flock-deadlock-prevention.md",{"path":127,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":128,"sourceHtmlUrl":129},"rules\u002Flock-short-transactions.md",1433,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Flock-short-transactions.md",{"path":131,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":132,"sourceHtmlUrl":133},"rules\u002Flock-skip-locked.md",1353,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Flock-skip-locked.md",{"path":135,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":136,"sourceHtmlUrl":137},"rules\u002Fmonitor-explain-analyze.md",1493,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fmonitor-explain-analyze.md",{"path":139,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":140,"sourceHtmlUrl":141},"rules\u002Fmonitor-pg-stat-statements.md",1418,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fmonitor-pg-stat-statements.md",{"path":143,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":144,"sourceHtmlUrl":145},"rules\u002Fmonitor-vacuum-analyze.md",1506,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fmonitor-vacuum-analyze.md",{"path":147,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":148,"sourceHtmlUrl":149},"rules\u002Fquery-composite-indexes.md",1451,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fquery-composite-indexes.md",{"path":151,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":152,"sourceHtmlUrl":153},"rules\u002Fquery-covering-indexes.md",1314,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fquery-covering-indexes.md",{"path":155,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":156,"sourceHtmlUrl":157},"rules\u002Fquery-index-types.md",1385,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fquery-index-types.md",{"path":159,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":160,"sourceHtmlUrl":161},"rules\u002Fquery-missing-indexes.md",1217,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fquery-missing-indexes.md",{"path":163,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":164,"sourceHtmlUrl":165},"rules\u002Fquery-partial-indexes.md",1347,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fquery-partial-indexes.md",{"path":167,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":168,"sourceHtmlUrl":169},"rules\u002Fschema-data-types.md",1453,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fschema-data-types.md",{"path":171,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":172,"sourceHtmlUrl":173},"rules\u002Fschema-foreign-key-indexes.md",1679,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fschema-foreign-key-indexes.md",{"path":175,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":176,"sourceHtmlUrl":177},"rules\u002Fschema-lowercase-identifiers.md",1728,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fschema-lowercase-identifiers.md",{"path":179,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":180,"sourceHtmlUrl":181},"rules\u002Fschema-partitioning.md",1585,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fschema-partitioning.md",{"path":183,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":184,"sourceHtmlUrl":185},"rules\u002Fschema-primary-keys.md",1860,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fschema-primary-keys.md",{"path":187,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":188,"sourceHtmlUrl":189},"rules\u002Fsecurity-privileges.md",1614,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fsecurity-privileges.md",{"path":191,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":192,"sourceHtmlUrl":193},"rules\u002Fsecurity-rls-basics.md",1795,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fsecurity-rls-basics.md",{"path":195,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":196,"sourceHtmlUrl":197},"rules\u002Fsecurity-rls-performance.md",1786,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-postgres-best-practices\u002Frules\u002Fsecurity-rls-performance.md",[199,222,245,258,279,296],{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":203,"categories":204,"keywords":213,"publishedAt":24},"01M6C4PDGB6ZZWBS35N3DF7PZZ","xstate","WHEN React state changes in response to an external answer — async submit, in-flight or loading flags, retries, cancellation, polling, optimistic updates, stale responses — or to an interaction with an interruptible middle, such as a drag or a gesture; or WHEN building, reviewing, testing, or visualising XState 5 actors and @xstate\u002Freact integrations; NOT for a value one event sets completely, such as a text draft, a focus flag, or a plain open and closed toggle; models typed lifecycles and renders legal Mermaid stateDiagram-v2 charts.","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fweb\u002Fskills\u002Fxstate\u002FSKILL.md",[205,210],{"categoryNo":206,"categoryName":207,"taxonomyType":208,"taxonomyTypeDesc":209},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":211,"categoryName":212,"taxonomyType":208,"taxonomyTypeDesc":209},"01JBSEEDCAT000000000000009","前端开发",[201,214,215,216,217,218,219,220,221],"react","text","state","integrations","Charts","mermaid","testing","open",{"skillNo":223,"name":224,"nameZh":6,"description":225,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":226,"categories":227,"keywords":236,"publishedAt":24},"01M6C4PB6VVC2X19B63B7YNH0T","web-design","WHEN refining UI layout, typography, color, or polish; NOT code implementation; provides concise principles for intentional, legible design.","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fweb\u002Fskills\u002Fweb-design\u002FSKILL.md",[228,233],{"categoryNo":229,"categoryName":230,"taxonomyType":231,"taxonomyTypeDesc":232},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":234,"categoryName":235,"taxonomyType":208,"taxonomyTypeDesc":209},"01JBSEEDCAT000000000000015","视觉设计",[237,238,239,240,241,242,243,244],"web","design","web design","code implementation","polish","ui","typography","code",{"skillNo":246,"name":247,"nameZh":6,"description":248,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":249,"categories":250,"keywords":252,"publishedAt":24},"01M6C4P8D92GJDA49V7X1CZXEV","tailwind","USE WHEN writing, fixing or reviewing styling in a project that uses Tailwind CSS, even a one-class change or a request that does not name Tailwind: colours, focus rings, spacing, class names chosen by a prop, map or CVA variants, theme tokens and dark mode in the Tailwind stylesheet or tailwind.config, setup or upgrades (if unsure whether the project uses Tailwind, check package.json or the main stylesheet first); NOT WHEN writing plain CSS or Sass in a project without Tailwind; produces class names Tailwind can find, syntax for the installed major version, visible focus indicators, and no unrequested dependency or invented brand value.","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fweb\u002Fskills\u002Ftailwind\u002FSKILL.md",[251],{"categoryNo":234,"categoryName":235,"taxonomyType":208,"taxonomyTypeDesc":209},[253,254,255,256,238,257],"Tailwind","libraries","component","css","design systems",{"skillNo":259,"name":260,"nameZh":6,"description":261,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":262,"categories":263,"keywords":267,"publishedAt":24},"01M6C4P5VWQ69Q32DA0634GDJY","refactoring","WHEN you need a plan to refactor, restructure, or clean up working code and the test result is known, either green or a recorded failing set; NOT for new feature delivery or any behavior change; reversible-baseline safety with prioritized improvements.","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fweb\u002Fskills\u002Frefactoring\u002FSKILL.md",[264],{"categoryNo":265,"categoryName":266,"taxonomyType":208,"taxonomyTypeDesc":209},"01JBSEEDCAT000000000000007","代码审查",[260,268,269,270,271,272,273,274,275,276,244,277,278],"Safety","baseline","refactor","behavior","change","plan","new feature","SET","up","feature delivery","test",{"skillNo":280,"name":214,"nameZh":6,"description":281,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":282,"categories":283,"keywords":286,"publishedAt":24},"01M6C4P345APEFEX00J8T7QMXQ","USE WHEN changing the logic, data, props, state, Effects or rendered text of a React component, hook or page, even a one-line change; NOT WHEN the request is styling only (class names, Tailwind, CSS, dark mode, spacing, shadows) or tests only, or when it models submit, in-flight, loading, retry or failure states, even for a named React form (xstate covers that, including its React wiring); applies React 19 composition, state, Effect, structure, API and performance rules with only the project's installed libraries.","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fweb\u002Fskills\u002Freact\u002FSKILL.md",[284,285],{"categoryNo":206,"categoryName":207,"taxonomyType":208,"taxonomyTypeDesc":209},{"categoryNo":211,"categoryName":212,"taxonomyType":208,"taxonomyTypeDesc":209},[214,244,256,253,287,220,288,289,290,291,292,216,278,293,294,295],"performance","hooks","components","architecture","api","react components","state management","styling","management",{"skillNo":297,"name":298,"nameZh":6,"description":299,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":300,"categories":301,"keywords":304,"publishedAt":24},"01M6C4P0DK385QBG3B3S86TQV2","react-testing","USE WHEN writing, fixing or reviewing a React Testing Library test for a component, hook or context provider, even one small test, or when asked for an end-to-end journey inside a Vitest or React Testing Library suite; NOT WHEN changing the component itself (react), testing XState actors or @xstate\u002Freact (xstate), or writing a Playwright or Cypress test; covers renderHook, providers, async results, forms and false-pass anti-patterns, and declines end-to-end journeys with the testable slices.","https:\u002F\u002Fgithub.com\u002Fmintuz\u002Fskills\u002Fblob\u002Fmain\u002Fsrc\u002Fweb\u002Fskills\u002Freact-testing\u002FSKILL.md",[302,303],{"categoryNo":206,"categoryName":207,"taxonomyType":208,"taxonomyTypeDesc":209},{"categoryNo":211,"categoryName":212,"taxonomyType":208,"taxonomyTypeDesc":209},[305,220,214,306,288,307,308,309,289,310,311,292],"react testing","anti-patterns","e2e","library","testing library","Providers","context"]