[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EQKPR8NH476ASW7897RAC6":3,"skill-same:01M6EQKPR8NH476ASW7897RAC6":73},{"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":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6EQKPR8NH476ASW7897RAC6","engineering-fundamentals",null,"Auto-invoke for general code quality review. Enforces naming conventions, function size, DRY principles, SOLID principles, and code organization.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdanielpodolsky\u002Fengineering-fundamentals\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"engineering","engineering fundamentals","review","solid","code quality","code","solid principles","quality","auto","general","organization","quality review","conventions","dry","principles","2026-11-10 10:12:30",false,"---\nname: engineering-fundamentals\ndescription: Auto-invoke for general code quality review. Enforces naming conventions, function size, DRY principles, SOLID principles, and code organization.\n---\n\n# Engineering Fundamentals Review\n\n> \"Code is read more than it is written. Write for the reader, not the machine.\"\n\n## When to Apply\n\nActivate this skill when reviewing:\n- Any code changes\n- Function and variable naming\n- Code organization and structure\n- General refactoring decisions\n\n---\n\n## Review Checklist\n\n### Naming\n\n- [ ] **Descriptive**: Can you understand the variable without context?\n- [ ] **No abbreviations**: Are names spelled out? (`user` not `usr`)\n- [ ] **No generic names**: No `data`, `temp`, `info`, `stuff`?\n- [ ] **Boolean prefix**: Do booleans start with `is`, `has`, `can`, `should`?\n- [ ] **Function verbs**: Do functions start with action verbs?\n\n### Function Design\n\n- [ ] **Single responsibility**: Does each function do ONE thing?\n- [ ] **Size limit**: Are functions under 20-30 lines?\n- [ ] **Parameter count**: Are there fewer than 4 parameters?\n- [ ] **No side effects**: Are pure functions actually pure?\n- [ ] **Early returns**: Are guard clauses used instead of deep nesting?\n\n### Code Organization\n\n- [ ] **DRY**: Is duplicated code extracted into functions?\n- [ ] **But not too DRY**: Are abstractions justified (rule of three)?\n- [ ] **Cohesion**: Are related things grouped together?\n- [ ] **Separation**: Are unrelated things separated?\n\n### Comments & Documentation\n\n- [ ] **Why, not what**: Do comments explain reasoning, not obvious code?\n- [ ] **No commented-out code**: Is dead code deleted, not commented?\n- [ ] **JSDoc on public APIs**: Are exported functions documented?\n\n---\n\n## Common Mistakes (Anti-Patterns)\n\n### 1. Magic Numbers\n```\n❌ if (status === 2) { ... }\n   setTimeout(callback, 86400000);\n\n✅ const STATUS = { ACTIVE: 2, INACTIVE: 1 };\n   if (status === STATUS.ACTIVE) { ... }\n\n   const ONE_DAY_MS = 24 * 60 * 60 * 1000;\n   setTimeout(callback, ONE_DAY_MS);\n```\n\n### 2. Unclear Naming\n```\n❌ const d = new Date();\n   const temp = getUser();\n   const flag = true;\n\n✅ const createdAt = new Date();\n   const currentUser = getUser();\n   const isAuthenticated = true;\n```\n\n### 3. God Functions\n```\n❌ function processOrder(order) {\n     \u002F\u002F 200 lines: validate, calculate, save, email, log...\n   }\n\n✅ function processOrder(order) {\n     validateOrder(order);\n     const total = calculateTotal(order);\n     await saveOrder(order, total);\n     await sendConfirmationEmail(order);\n     logOrderProcessed(order);\n   }\n```\n\n### 4. Deep Nesting\n```\n❌ function check(user) {\n     if (user) {\n       if (user.active) {\n         if (user.role === 'admin') {\n           return true;\n         }\n       }\n     }\n     return false;\n   }\n\n✅ function check(user) {\n     if (!user) return false;\n     if (!user.active) return false;\n     if (user.role !== 'admin') return false;\n     return true;\n   }\n```\n\n### 5. Premature Abstraction\n```\n❌ \u002F\u002F Used once, but has 10 configuration options\n   createFlexibleReusableButton({ ... });\n\n✅ \u002F\u002F Just make the button\n   \u003Cbutton className=\"primary\">Submit\u003C\u002Fbutton>\n\n   \u002F\u002F Abstract when you need it 3+ times\n```\n\n---\n\n## SOLID Principles Quick Check\n\n| Principle | Question | Red Flag |\n|-----------|----------|----------|\n| **S**ingle Responsibility | \"Does this class\u002Ffunction do one thing?\" | Class with 10+ methods |\n| **O**pen\u002FClosed | \"Can I extend without modifying?\" | Switch statements for types |\n| **L**iskov Substitution | \"Can I swap implementations?\" | Overriding methods that break contracts |\n| **I**nterface Segregation | \"Are interfaces focused?\" | Clients forced to depend on unused methods |\n| **D**ependency Inversion | \"Do high-level modules depend on abstractions?\" | Direct instantiation of dependencies |\n\n---\n\n## Socratic Questions\n\nAsk the junior these questions instead of giving answers:\n\n1. **Naming**: \"Would a new developer understand this name without context?\"\n2. **Function Size**: \"Can you describe what this function does in one sentence?\"\n3. **Duplication**: \"I see this pattern in three places. What happens if it needs to change?\"\n4. **Abstraction**: \"How many times is this abstraction actually used?\"\n5. **Readability**: \"If you came back to this code in 6 months, would you understand it?\"\n\n---\n\n## Naming Conventions\n\n| Type | Convention | Example |\n|------|------------|---------|\n| Variables | camelCase | `userName`, `isActive` |\n| Constants | UPPER_SNAKE_CASE | `MAX_RETRIES`, `API_URL` |\n| Functions | camelCase + verb | `getUser()`, `handleSubmit()` |\n| Classes | PascalCase | `UserService`, `AuthProvider` |\n| Files (components) | PascalCase | `UserProfile.tsx` |\n| Files (utilities) | camelCase | `formatDate.ts` |\n\n---\n\n## Standards Reference\n\nSee detailed patterns in:\n- `\u002Fstandards\u002Fglobal\u002Fnaming-conventions.md`\n\n---\n\n## Red Flags to Call Out\n\n| Flag | Question to Ask |\n|------|-----------------|\n| Single letter variables | \"What does `d` represent?\" |\n| Functions > 30 lines | \"Can we break this into smaller functions?\" |\n| > 3 levels of nesting | \"Can we use early returns?\" |\n| Copy-pasted code | \"If this logic changes, how many places need updating?\" |\n| Commented-out code | \"Is this needed? Can we delete it?\" |\n| TODO without tracking | \"Is there a ticket for this?\" |\n| Magic strings\u002Fnumbers | \"Should this be a named constant?\" |\n","# Engineering Fundamentals Review\n\n> \"Code is read more than it is written. Write for the reader, not the machine.\"\n\n## When to Apply\n\nActivate this skill when reviewing:\n- Any code changes\n- Function and variable naming\n- Code organization and structure\n- General refactoring decisions\n\n---\n\n## Review Checklist\n\n### Naming\n\n- [ ] **Descriptive**: Can you understand the variable without context?\n- [ ] **No abbreviations**: Are names spelled out? (`user` not `usr`)\n- [ ] **No generic names**: No `data`, `temp`, `info`, `stuff`?\n- [ ] **Boolean prefix**: Do booleans start with `is`, `has`, `can`, `should`?\n- [ ] **Function verbs**: Do functions start with action verbs?\n\n### Function Design\n\n- [ ] **Single responsibility**: Does each function do ONE thing?\n- [ ] **Size limit**: Are functions under 20-30 lines?\n- [ ] **Parameter count**: Are there fewer than 4 parameters?\n- [ ] **No side effects**: Are pure functions actually pure?\n- [ ] **Early returns**: Are guard clauses used instead of deep nesting?\n\n### Code Organization\n\n- [ ] **DRY**: Is duplicated code extracted into functions?\n- [ ] **But not too DRY**: Are abstractions justified (rule of three)?\n- [ ] **Cohesion**: Are related things grouped together?\n- [ ] **Separation**: Are unrelated things separated?\n\n### Comments & Documentation\n\n- [ ] **Why, not what**: Do comments explain reasoning, not obvious code?\n- [ ] **No commented-out code**: Is dead code deleted, not commented?\n- [ ] **JSDoc on public APIs**: Are exported functions documented?\n\n---\n\n## Common Mistakes (Anti-Patterns)\n\n### 1. Magic Numbers\n```\n❌ if (status === 2) { ... }\n   setTimeout(callback, 86400000);\n\n✅ const STATUS = { ACTIVE: 2, INACTIVE: 1 };\n   if (status === STATUS.ACTIVE) { ... }\n\n   const ONE_DAY_MS = 24 * 60 * 60 * 1000;\n   setTimeout(callback, ONE_DAY_MS);\n```\n\n### 2. Unclear Naming\n```\n❌ const d = new Date();\n   const temp = getUser();\n   const flag = true;\n\n✅ const createdAt = new Date();\n   const currentUser = getUser();\n   const isAuthenticated = true;\n```\n\n### 3. God Functions\n```\n❌ function processOrder(order) {\n     \u002F\u002F 200 lines: validate, calculate, save, email, log...\n   }\n\n✅ function processOrder(order) {\n     validateOrder(order);\n     const total = calculateTotal(order);\n     await saveOrder(order, total);\n     await sendConfirmationEmail(order);\n     logOrderProcessed(order);\n   }\n```\n\n### 4. Deep Nesting\n```\n❌ function check(user) {\n     if (user) {\n       if (user.active) {\n         if (user.role === 'admin') {\n           return true;\n         }\n       }\n     }\n     return false;\n   }\n\n✅ function check(user) {\n     if (!user) return false;\n     if (!user.active) return false;\n     if (user.role !== 'admin') return false;\n     return true;\n   }\n```\n\n### 5. Premature Abstraction\n```\n❌ \u002F\u002F Used once, but has 10 configuration options\n   createFlexibleReusableButton({ ... });\n\n✅ \u002F\u002F Just make the button\n   \u003Cbutton className=\"primary\">Submit\u003C\u002Fbutton>\n\n   \u002F\u002F Abstract when you need it 3+ times\n```\n\n---\n\n## SOLID Principles Quick Check\n\n| Principle | Question | Red Flag |\n|-----------|----------|----------|\n| **S**ingle Responsibility | \"Does this class\u002Ffunction do one thing?\" | Class with 10+ methods |\n| **O**pen\u002FClosed | \"Can I extend without modifying?\" | Switch statements for types |\n| **L**iskov Substitution | \"Can I swap implementations?\" | Overriding methods that break contracts |\n| **I**nterface Segregation | \"Are interfaces focused?\" | Clients forced to depend on unused methods |\n| **D**ependency Inversion | \"Do high-level modules depend on abstractions?\" | Direct instantiation of dependencies |\n\n---\n\n## Socratic Questions\n\nAsk the junior these questions instead of giving answers:\n\n1. **Naming**: \"Would a new developer understand this name without context?\"\n2. **Function Size**: \"Can you describe what this function does in one sentence?\"\n3. **Duplication**: \"I see this pattern in three places. What happens if it needs to change?\"\n4. **Abstraction**: \"How many times is this abstraction actually used?\"\n5. **Readability**: \"If you came back to this code in 6 months, would you understand it?\"\n\n---\n\n## Naming Conventions\n\n| Type | Convention | Example |\n|------|------------|---------|\n| Variables | camelCase | `userName`, `isActive` |\n| Constants | UPPER_SNAKE_CASE | `MAX_RETRIES`, `API_URL` |\n| Functions | camelCase + verb | `getUser()`, `handleSubmit()` |\n| Classes | PascalCase | `UserService`, `AuthProvider` |\n| Files (components) | PascalCase | `UserProfile.tsx` |\n| Files (utilities) | camelCase | `formatDate.ts` |\n\n---\n\n## Standards Reference\n\nSee detailed patterns in:\n- `\u002Fstandards\u002Fglobal\u002Fnaming-conventions.md`\n\n---\n\n## Red Flags to Call Out\n\n| Flag | Question to Ask |\n|------|-----------------|\n| Single letter variables | \"What does `d` represent?\" |\n| Functions > 30 lines | \"Can we break this into smaller functions?\" |\n| > 3 levels of nesting | \"Can we use early returns?\" |\n| Copy-pasted code | \"If this logic changes, how many places need updating?\" |\n| Commented-out code | \"Is this needed? Can we delete it?\" |\n| TODO without tracking | \"Is there a ticket for this?\" |\n| Magic strings\u002Fnumbers | \"Should this be a named constant?\" |\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fdanielpodolsky\u002Fengineering-fundamentals",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill engineering-fundamentals",{"tool":59,"command":60},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill engineering-fundamentals",{"tool":62,"command":63},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill engineering-fundamentals","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdanielpodolsky\u002Fengineering-fundamentals\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"skill-report.json","REFERENCE","参考文档",11949,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdanielpodolsky\u002Fengineering-fundamentals\u002Fskill-report.json",[74,88,98,107,113,120],{"skillNo":75,"name":76,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":39},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[85,86,87],"model","model hierarchy","model hierarchy skill",{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":39},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[93],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[95,96,97],"MCP","zoom","zoom mcp",{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":39},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[104,105,106,96],"sdk","zoom apps sdk","apps",{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":39},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[109],{"skillNo":114,"name":115,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":119,"publishedAt":39},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[118],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[115],{"skillNo":121,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":39},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[122]]