[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DNDWD60C3P459R5QJ2DARV":3,"skill-same:01M6DNDWD60C3P459R5QJ2DARV":115},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M6DNDWD60C3P459R5QJ2DARV","aac-domain-modeling",null,"Actively build and sharpen the project domain model. Use when the user wants to pin down domain terminology, harden a fuzzy word, name a new module, or record an architectural decision. Challenges terms against scenarios, sharpens the glossary, and writes ADRs as decisions land.","msayedshokry\u002FAgileAgentCanvasExt","msayedshokry","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35009459?v=4","01M6DN5RZZ297CGWTNJ6ERZQ8W","Mohamed Sayed","01M6DN5S4XS7SVCSXZRW2XR0XF",3,"MIT","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Fskills\u002Faac-domain-modeling\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"aac domain modeling","modeling","domain","domain modeling","terminology","name","as","module","project","domain model","record","build","use","decisions","decision","glossary","model","pin","Word","sharpen","2026-11-10 10:12:30",false,"---\nname: aac-domain-modeling\ndescription: 'Actively build and sharpen the project domain model. Use when the user wants to pin down domain terminology, harden a fuzzy word, name a new module, or record an architectural decision. Challenges terms against scenarios, sharpens the glossary, and writes ADRs as decisions land.'\n---\n\n# Domain Modeling\n\nThe active discipline of keeping the project's domain model current as work happens. Reading `project-context.md` for vocabulary is not this skill — that is a one-line habit any skill can do. This skill is for when the model is *changing*, not just being consumed.\n\n## File layout\n\n```\n{project-root}\u002F\n├── project-context.md        # the ubiquitous-language glossary (terms + decisions in plain prose)\n├── docs\u002F\n│   └── adr\u002F                  # one ADR per architectural decision (numbered, dated)\n└── ...\n```\n\nIf `CONTEXT-MAP.md` exists at the root, the repo has multiple bounded contexts. The map points to where each one lives. Resolve the active context first, then operate inside it.\n\n## When this skill fires\n\nA boundary is being crossed: a fuzzy term surfaces, a new module needs naming, a design decision is being made. The skill runs inline alongside whatever work is happening, not as a separate phase.\n\n**Trigger phrases**: \"name this module\", \"what should we call this\", \"let's pin down what X means\", \"should this be an ADR\", \"update the context for X\", \"this term is overloaded\", \"add a term for Y\".\n\n## The discipline\n\n### 1. Term, not synonym\n\nWhen a new concept surfaces, write it as a **term** (one canonical name, one definition, one example). Reject synonyms in the same glossary — pick one, retire the rest. If a synonym is still in use elsewhere in the codebase, the term is not yet won; record the migration as a TODO under the term.\n\n### 2. Sharpen, don't sprawl\n\nWhen an existing term feels fuzzy, **sharpen** it: rewrite the definition tighter, add a non-example, name what it is *not*. A glossary that grows is a glossary that is being read less. Aim for fewer terms, each load-bearing.\n\n### 3. Stress-test against scenarios\n\nFor any term under review, run one or two edge-case scenarios through it. The test: would a fresh agent reading the term alone (no other context) make the right call? If not, the definition is still fuzzy — name the case the term cannot decide, and either add a rule or admit the term is overloaded and split it.\n\n### 4. Decisions become ADRs\n\nA *decision* is not a *term*. A decision is a choice between alternatives with a reason; it lives in `docs\u002Fadr\u002FNNNN-\u003Cslug>.md`. The format:\n\n```markdown\n# NNNN. \u003CTitle>\n\n**Status**: proposed | accepted | superseded\n**Date**: YYYY-MM-DD\n**Context**: which terms, modules, or forces drove the decision\n**Decision**: what we chose\n**Consequences**: what this commits us to; what it forecloses\n**Alternatives considered**: the ones we rejected, with reasons\n```\n\nNumber sequentially. Never overwrite — supersede with a new ADR that points to the old one. The point of an ADR is to stop future-you (or a future agent) from re-litigating the same choice.\n\n### 5. Inline updates\n\nUpdate `project-context.md` and `docs\u002Fadr\u002F` the moment a decision crystallizes. Not at the end of the session. Not \"I'll do it later.\" Inline updates are the whole point — they keep the model honest. If the agent defers the update, the model has rotted by the next session.\n\n## Anti-patterns\n\n- **Synonym glossaries** — a glossary that lists \"User \u002F Customer \u002F Account\" as three flavors of the same idea is a glossary that has not decided. Pick one. Mark the others as deprecated.\n- **Narrative prose** — `project-context.md` is for terms and definitions, not a project narrative. If you find yourself writing \"we use X because the team prefers…\", that's a decision and belongs in an ADR, not the glossary.\n- **Decision drift** — a code change that contradicts an ADR without superseding it. The change is wrong, or the ADR is. Either fix the change or write the supersede ADR; do not leave the contradiction standing.\n- **Sprawl of terms** — when a glossary grows past ~30 terms, the model is being read less. Either prune ruthlessly or split contexts.\n","# Domain Modeling\n\nThe active discipline of keeping the project's domain model current as work happens. Reading `project-context.md` for vocabulary is not this skill — that is a one-line habit any skill can do. This skill is for when the model is *changing*, not just being consumed.\n\n## File layout\n\n```\n{project-root}\u002F\n├── project-context.md        # the ubiquitous-language glossary (terms + decisions in plain prose)\n├── docs\u002F\n│   └── adr\u002F                  # one ADR per architectural decision (numbered, dated)\n└── ...\n```\n\nIf `CONTEXT-MAP.md` exists at the root, the repo has multiple bounded contexts. The map points to where each one lives. Resolve the active context first, then operate inside it.\n\n## When this skill fires\n\nA boundary is being crossed: a fuzzy term surfaces, a new module needs naming, a design decision is being made. The skill runs inline alongside whatever work is happening, not as a separate phase.\n\n**Trigger phrases**: \"name this module\", \"what should we call this\", \"let's pin down what X means\", \"should this be an ADR\", \"update the context for X\", \"this term is overloaded\", \"add a term for Y\".\n\n## The discipline\n\n### 1. Term, not synonym\n\nWhen a new concept surfaces, write it as a **term** (one canonical name, one definition, one example). Reject synonyms in the same glossary — pick one, retire the rest. If a synonym is still in use elsewhere in the codebase, the term is not yet won; record the migration as a TODO under the term.\n\n### 2. Sharpen, don't sprawl\n\nWhen an existing term feels fuzzy, **sharpen** it: rewrite the definition tighter, add a non-example, name what it is *not*. A glossary that grows is a glossary that is being read less. Aim for fewer terms, each load-bearing.\n\n### 3. Stress-test against scenarios\n\nFor any term under review, run one or two edge-case scenarios through it. The test: would a fresh agent reading the term alone (no other context) make the right call? If not, the definition is still fuzzy — name the case the term cannot decide, and either add a rule or admit the term is overloaded and split it.\n\n### 4. Decisions become ADRs\n\nA *decision* is not a *term*. A decision is a choice between alternatives with a reason; it lives in `docs\u002Fadr\u002FNNNN-\u003Cslug>.md`. The format:\n\n```markdown\n# NNNN. \u003CTitle>\n\n**Status**: proposed | accepted | superseded\n**Date**: YYYY-MM-DD\n**Context**: which terms, modules, or forces drove the decision\n**Decision**: what we chose\n**Consequences**: what this commits us to; what it forecloses\n**Alternatives considered**: the ones we rejected, with reasons\n```\n\nNumber sequentially. Never overwrite — supersede with a new ADR that points to the old one. The point of an ADR is to stop future-you (or a future agent) from re-litigating the same choice.\n\n### 5. Inline updates\n\nUpdate `project-context.md` and `docs\u002Fadr\u002F` the moment a decision crystallizes. Not at the end of the session. Not \"I'll do it later.\" Inline updates are the whole point — they keep the model honest. If the agent defers the update, the model has rotted by the next session.\n\n## Anti-patterns\n\n- **Synonym glossaries** — a glossary that lists \"User \u002F Customer \u002F Account\" as three flavors of the same idea is a glossary that has not decided. Pick one. Mark the others as deprecated.\n- **Narrative prose** — `project-context.md` is for terms and definitions, not a project narrative. If you find yourself writing \"we use X because the team prefers…\", that's a decision and belongs in an ADR, not the glossary.\n- **Decision drift** — a code change that contradicts an ADR without superseding it. The change is wrong, or the ADR is. Either fix the change or write the supersede ADR; do not leave the contradiction standing.\n- **Sprawl of terms** — when a glossary grows past ~30 terms, the model is being read less. Either prune ruthlessly or split contexts.\n",{"name":5,"description":7},"main","473351382920a74eb8f353f979a06f6f05bb5f59","resources\u002F_aac\u002Fskills\u002Faac-domain-modeling",0,"https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt","https:\u002F\u002Fgithub.com\u002Fmsayedshokry","2026-08-29 02:00:07",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add msayedshokry\u002FAgileAgentCanvasExt --skill aac-domain-modeling",{"tool":57,"command":58},"bunx","bunx skills add msayedshokry\u002FAgileAgentCanvasExt --skill aac-domain-modeling",{"tool":60,"command":61},"pnpm","pnpm dlx skills add msayedshokry\u002FAgileAgentCanvasExt --skill aac-domain-modeling","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Fskills\u002Faac-domain-modeling\u002FSKILL.md",true,[65,71,75,79,83,87,91,95,99,103,107,111],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"AGENTS.md","REFERENCE","参考文档",22627,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002FAGENTS.md",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"README.md",2140,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002FREADME.md",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"rules\u002F_sections.md",829,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002F_sections.md",{"path":80,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":81,"sourceHtmlUrl":82},"rules\u002F_template.md",329,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002F_template.md",{"path":84,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":85,"sourceHtmlUrl":86},"rules\u002Farchitecture-avoid-boolean-props.md",2267,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Farchitecture-avoid-boolean-props.md",{"path":88,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":89,"sourceHtmlUrl":90},"rules\u002Farchitecture-compound-components.md",2600,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Farchitecture-compound-components.md",{"path":92,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":93,"sourceHtmlUrl":94},"rules\u002Fpatterns-children-over-render-props.md",1886,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Fpatterns-children-over-render-props.md",{"path":96,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":97,"sourceHtmlUrl":98},"rules\u002Fpatterns-explicit-variants.md",2395,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Fpatterns-explicit-variants.md",{"path":100,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":101,"sourceHtmlUrl":102},"rules\u002Freact19-no-forwardref.md",953,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Freact19-no-forwardref.md",{"path":104,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":105,"sourceHtmlUrl":106},"rules\u002Fstate-context-interface.md",4974,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Fstate-context-interface.md",{"path":108,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":109,"sourceHtmlUrl":110},"rules\u002Fstate-decouple-implementation.md",2699,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Fstate-decouple-implementation.md",{"path":112,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":113,"sourceHtmlUrl":114},"rules\u002Fstate-lift-state.md",3224,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Fcomposition-patterns\u002Frules\u002Fstate-lift-state.md",[116,145,163,176,199,215],{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":132,"publishedAt":39},"01M6DNRTHE3M1XG3KDJTEF6BG6","bmad-teach-me-testing","Teach testing progressively through structured sessions. Use when user says \"lets learn testing\" or \"I want to study test practices\"","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Ftea\u002Fworkflows\u002Ftestarch\u002Fbmad-teach-me-testing\u002FSKILL.md",[122,127],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":128,"categoryName":129,"taxonomyType":130,"taxonomyTypeDesc":131},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[133,134,135,136,137,138,139,140,141,142,31,143,144],"bmad","me","bmad teach me testing","teach me","teach","testing","test","sessions","learn","user","study","structured",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":39},"01M6DNRG27V77JEGMPMJVRY0Q5","aac-testarch-trace","Generate traceability matrix and quality gate decision. Use when the user says \"lets create traceability matrix\" or \"I want to analyze test coverage\"","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Ftea\u002Fworkflows\u002Ftestarch\u002Faac-testarch-trace\u002FSKILL.md",[151],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},[153,154,139,155,156,157,158,159,33,142,160,31,161,162],"aac testarch trace","trace","quality gate","create","generate","analyze","quality","coverage","test coverage","gate",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":170,"publishedAt":39},"01M6DNR70G1S0DGDSHRWT1S1DD","aac-testarch-test-review","Review test quality using best practices validation. Use when user says \"lets review tests\" or \"I want to evaluate test quality\"","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Ftea\u002Fworkflows\u002Ftestarch\u002Faac-testarch-test-review\u002FSKILL.md",[169],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},[171,172,139,173,174,159,142,31,175],"review","aac testarch test review","best practices","validation","tests",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":189,"publishedAt":39},"01M6DNQXV8F40EE78ZMWGWRPJM","aac-testarch-test-design","Create system-level or epic-level test plans. Use when the user says \"lets design test plan\" or \"I want to create test strategy\"","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Ftea\u002Fworkflows\u002Ftestarch\u002Faac-testarch-test-design\u002FSKILL.md",[182,183,186],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},{"categoryNo":184,"categoryName":185,"taxonomyType":125,"taxonomyTypeDesc":126},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":187,"categoryName":188,"taxonomyType":130,"taxonomyTypeDesc":131},"01JBSEEDCAT000000000000032","设计师",[190,191,139,192,142,156,193,194,195,196,31,197,198],"aac testarch test design","test design","design","test plan","plan","system","strategy","test strategy","plans",{"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":205,"publishedAt":39},"01M6DNQNG0T7Q5DKV3C03RY35D","aac-testarch-nfr","Audit NFR evidence for performance, security, reliability, and scalability. Use when implementation evidence exists and the user says \"audit NFR evidence\", \"audit NFRs\", or \"evaluate non-functional requirements\"","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Ftea\u002Fworkflows\u002Ftestarch\u002Faac-testarch-nfr\u002FSKILL.md",[],[206,207,208,209,210,211,142,212,213,31,214],"aac testarch nfr","reliability","evidence","implementation","scalability","requirements","audit","performance","security",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":222,"publishedAt":39},"01M6DNQDPTGB49D8AAJV4GN2H8","aac-testarch-framework","Initialize test framework with Playwright or Cypress. Use when the user says \"lets setup test framework\" or \"I want to initialize testing framework\"","https:\u002F\u002Fgithub.com\u002Fmsayedshokry\u002FAgileAgentCanvasExt\u002Fblob\u002Fmain\u002Fresources\u002F_aac\u002Ftea\u002Fworkflows\u002Ftestarch\u002Faac-testarch-framework\u002FSKILL.md",[221],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},[223,224,225,142,31,226,227,228,139,229,138,230],"aac testarch framework","framework","initialize","testing framework","setup","test framework","playwright","cypress"]