{
  "name": "NgAutoPilot",
  "description": "Agnostic micro-skills for Angular, TypeScript and JavaScript development.",
  "version": "0.5.2",
  "skills": [
    {
      "id": "angular.ai.angular-v22-agent-skills-integration",
      "name": "Angular v22 Agent Skills Integration",
      "path": "skills/angular/ai/angular-v22-agent-skills-integration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ai",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Agent Skills",
        "agent skills",
        "progressive disclosure",
        "Angular v22 Agent Skills Integration",
        "AI / MCP / WebMCP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.ai.angular-v22-ai-tutor-safe-usage",
      "name": "Angular v22 AI Tutor Safe Usage",
      "path": "skills/angular/ai/angular-v22-ai-tutor-safe-usage/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ai",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ai_tutor",
        "education",
        "safe usage",
        "Angular v22 AI Tutor Safe Usage",
        "AI / MCP / WebMCP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.ai.angular-v22-angular-mcp-agent-workflow",
      "name": "Angular v22 Angular MCP Agent Workflow",
      "path": "skills/angular/ai/angular-v22-angular-mcp-agent-workflow/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ai",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular MCP",
        "agent workflow",
        "devserver",
        "Angular v22 Angular MCP Agent Workflow",
        "AI / MCP / WebMCP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.ai.angular-v22-devserver-self-healing-loop",
      "name": "Angular v22 Devserver Self Healing Loop",
      "path": "skills/angular/ai/angular-v22-devserver-self-healing-loop/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ai",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "devserver.wait_for_build",
        "self-healing loop",
        "build logs",
        "Angular v22 Devserver Self Healing Loop",
        "AI / MCP / WebMCP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.ai.angular-v22-webmcp-tool-exposure",
      "name": "Angular v22 WebMCP Tool Exposure",
      "path": "skills/angular/ai/angular-v22-webmcp-tool-exposure/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ai",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "WebMCP tool",
        "browser tool",
        "agent exposure",
        "Angular v22 WebMCP Tool Exposure",
        "AI / MCP / WebMCP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.architecture.angular-enterprise-onboarding-plan",
      "name": "Angular Enterprise Onboarding Plan",
      "path": "skills/angular/architecture/angular-enterprise-onboarding-plan/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS",
        "Nx"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular onboarding plan",
        "enterprise onboarding",
        "angular team onboarding",
        "ramp up plan",
        "new developer onboarding",
        "angular onboarding path",
        "project conventions",
        "enterprise ramp up",
        "angular introduction plan"
      ]
    },
    {
      "id": "angular.architecture.angular-enterprise-primitives",
      "name": "Angular Enterprise Primitives",
      "path": "skills/angular/architecture/angular-enterprise-primitives/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS",
        "Testing"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular enterprise primitives",
        "forms signals testing",
        "training primitives",
        "angular learning primitives",
        "enterprise angular primitives",
        "capability adoption path",
        "angular adoption matrix",
        "version aware primitives"
      ]
    },
    {
      "id": "angular.architecture.angular-enterprise-training-assessment",
      "name": "Angular Enterprise Training Assessment",
      "path": "skills/angular/architecture/angular-enterprise-training-assessment/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS",
        "Nx"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular training assessment",
        "angular enterprise assessment",
        "team capability assessment",
        "training readiness",
        "angular skill gaps",
        "angular baseline knowledge",
        "onboarding assessment",
        "enterprise training assessment",
        "version awareness assessment"
      ]
    },
    {
      "id": "angular.architecture.angular-enterprise-training-blueprint",
      "name": "Angular Enterprise Training Blueprint",
      "path": "skills/angular/architecture/angular-enterprise-training-blueprint/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS",
        "Nx"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular enterprise training",
        "angular training roadmap",
        "angular onboarding plan",
        "angular architecture workshop",
        "training blueprint",
        "enterprise angular learning path",
        "angular capability matrix",
        "angular learning path",
        "angular team onboarding",
        "version aware angular training"
      ]
    },
    {
      "id": "angular.architecture.angular-patterns-senior",
      "name": "Angular Senior Architecture Patterns",
      "path": "skills/angular/architecture/angular-patterns-senior/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular architecture review",
        "senior Angular patterns",
        "scalable Angular structure",
        "refactor Angular component",
        "split Angular responsibilities",
        "facade pattern"
      ]
    },
    {
      "id": "angular.architecture.angular-version-aware-training-matrix",
      "name": "Angular Version-Aware Training Matrix",
      "path": "skills/angular/architecture/angular-version-aware-training-matrix/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS",
        "Nx"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular version aware training",
        "version aware matrix",
        "training matrix",
        "angular feature matrix",
        "angular version matrix",
        "capability matrix",
        "angular compatibility training",
        "version based training",
        "angular roadmap matrix"
      ]
    },
    {
      "id": "angular.architecture.control-flow-adoption",
      "name": "Control Flow Adoption",
      "path": "skills/angular/architecture/control-flow-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "control flow",
        "\"@if\"",
        "\"@for\"",
        "\"@switch\"",
        "structural directives modernization"
      ]
    },
    {
      "id": "angular.architecture.defer-lazy-loading-modernization",
      "name": "Defer Lazy Loading Modernization",
      "path": "skills/angular/architecture/defer-lazy-loading-modernization/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "defer blocks",
        "lazy loading modernization",
        "route splitting",
        "loading behavior modernization"
      ]
    },
    {
      "id": "angular.architecture.design-system-for-micro-frontends",
      "name": "Design System for Micro-frontends",
      "path": "skills/angular/architecture/design-system-for-micro-frontends/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Design System"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "design system for micro frontends",
        "design system for micro-frontends",
        "shared design system",
        "design tokens",
        "component library",
        "ui kit for remotes",
        "shell and remote design",
        "shared visual language",
        "micro frontends design system"
      ]
    },
    {
      "id": "angular.architecture.directive-composition-api",
      "name": "Directive Composition API",
      "path": "skills/angular/architecture/directive-composition-api/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "directive composition",
        "composition API",
        "inheritance reduction"
      ]
    },
    {
      "id": "angular.architecture.facade-pattern",
      "name": "Angular Facade Pattern",
      "path": "skills/angular/architecture/facade-pattern/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "facade pattern",
        "Angular facade",
        "feature facade",
        "component injects many services",
        "simplify Angular tests",
        "feature API"
      ]
    },
    {
      "id": "angular.architecture.host-directives-adoption",
      "name": "Host Directives Adoption",
      "path": "skills/angular/architecture/host-directives-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "host directives",
        "hostDirectives",
        "wrapper reduction",
        "inheritance reduction"
      ]
    },
    {
      "id": "angular.architecture.layered-architecture-boundaries",
      "name": "Layered Architecture Boundaries",
      "path": "skills/angular/architecture/layered-architecture-boundaries/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "layered architecture",
        "architecture boundaries",
        "angular architecture audit",
        "responsibility leaks",
        "smart shared components",
        "feature boundaries",
        "standalone first organization",
        "module first organization",
        "data access boundaries",
        "dto leakage"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-architecture",
      "name": "Micro-frontends Architecture",
      "path": "skills/angular/architecture/micro-frontends-architecture/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro frontends",
        "micro-frontends",
        "microfrontend",
        "micro frontend architecture",
        "module federation",
        "native federation",
        "shell app",
        "remote app",
        "shell and remotes",
        "bounded context architecture",
        "distributed frontend",
        "runtime composition",
        "nx monorepo architecture",
        "angular micro frontends"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-communication-patterns",
      "name": "Micro-frontends Communication Patterns",
      "path": "skills/angular/architecture/micro-frontends-communication-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro frontends communication",
        "micro-frontends communication",
        "communication patterns",
        "shell to remote events",
        "remote to remote communication",
        "event bus",
        "custom events",
        "shared state between remotes",
        "cross micro frontend events",
        "micro frontends events"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-dependency-sharing-policy",
      "name": "Micro-frontends Dependency Sharing Policy",
      "path": "skills/angular/architecture/micro-frontends-dependency-sharing-policy/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro fronts dependency sharing",
        "micro-frontends dependency sharing",
        "dependency sharing policy",
        "shared singleton policy",
        "bundle duplication risk",
        "shared dependency alignment",
        "shared library boundaries",
        "module federation shared dependencies",
        "micro frontends dependencies"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-fallback-and-rollback",
      "name": "Micro-frontends Fallback and Rollback",
      "path": "skills/angular/architecture/micro-frontends-fallback-and-rollback/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro fronts fallback",
        "micro-frontends fallback",
        "rollback policy",
        "remote failure",
        "fallback strategy",
        "safe degradation",
        "retry flow",
        "graceful fallback",
        "micro frontends rollback"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-observability-contract",
      "name": "Micro-frontends Observability Contract",
      "path": "skills/angular/architecture/micro-frontends-observability-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro fronts observability",
        "micro-frontends observability",
        "observability contract",
        "logging metrics tracing",
        "runtime failure visibility",
        "error boundaries",
        "micro frontends logs",
        "shell telemetry",
        "remote telemetry"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-ownership-and-rbac-contract",
      "name": "Micro-frontends Ownership and RBAC Contract",
      "path": "skills/angular/architecture/micro-frontends-ownership-and-rbac-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro frontends ownership",
        "micro-frontends ownership",
        "rbac contract",
        "route access control",
        "remote ownership",
        "team ownership",
        "least privilege",
        "permissions policy",
        "micro frontends access control"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-release-governance",
      "name": "Micro-frontends Release Governance",
      "path": "skills/angular/architecture/micro-frontends-release-governance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro frontends release governance",
        "micro-frontends release governance",
        "release governance",
        "versioning policy",
        "rollout policy",
        "deployment independence",
        "release train",
        "compatibility checks",
        "micro frontends release"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-shell-container-contract",
      "name": "Micro-frontends Shell Container Contract",
      "path": "skills/angular/architecture/micro-frontends-shell-container-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "shell container",
        "container app",
        "micro frontends shell",
        "shell app contract",
        "host app",
        "host shell",
        "shell routing",
        "shell composition",
        "remote loading",
        "container boundary",
        "shell fallback"
      ]
    },
    {
      "id": "angular.architecture.micro-frontends-version-compatibility-gate",
      "name": "Micro-frontends Version Compatibility Gate",
      "path": "skills/angular/architecture/micro-frontends-version-compatibility-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro fronts version compatibility",
        "micro-frontends version compatibility",
        "compatibility gate",
        "version compatibility gate",
        "shell remote version",
        "remote version drift",
        "upgrade safety",
        "module federation versioning",
        "micro frontends compatibility"
      ]
    },
    {
      "id": "angular.architecture.module-federation-runtime-contract",
      "name": "Module Federation Runtime Contract",
      "path": "skills/angular/architecture/module-federation-runtime-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "module federation runtime",
        "federation contract",
        "remote exposure",
        "remote entry",
        "remote module",
        "native federation runtime",
        "shared singleton dependencies",
        "webpack federation",
        "remote fallback",
        "runtime composition contract",
        "federated module contract"
      ]
    },
    {
      "id": "angular.architecture.nx-bounded-context-contract",
      "name": "Nx Bounded Context Contract",
      "path": "skills/angular/architecture/nx-bounded-context-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "nx bounded context",
        "bounded context contract",
        "nx tags",
        "nx dependency constraints",
        "module boundaries",
        "bounded context tags",
        "nx enforce module boundaries",
        "shared ui shared domain shared data access",
        "architecture governance",
        "monorepo governance"
      ]
    },
    {
      "id": "angular.architecture.shared-data-access-library-contract",
      "name": "Shared Data-Access Library Contract",
      "path": "skills/angular/architecture/shared-data-access-library-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "RxJS"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "shared data access",
        "shared data-access",
        "shared/data-access",
        "shared data access contract",
        "data access library",
        "data-access library",
        "repository contract",
        "api client library",
        "persistence contract",
        "transport layer",
        "angular data access",
        "nx module boundaries",
        "bounded context data access",
        "shared domain"
      ]
    },
    {
      "id": "angular.architecture.shared-domain-library-contract",
      "name": "Shared Domain Library Contract",
      "path": "skills/angular/architecture/shared-domain-library-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "shared domain",
        "shared-domain",
        "shared domain contract",
        "domain library",
        "domain model library",
        "business rules library",
        "entity library",
        "policy library",
        "bounded context",
        "bounded context domain",
        "nx module boundaries"
      ]
    },
    {
      "id": "angular.architecture.signals-adoption",
      "name": "Signals Adoption",
      "path": "skills/angular/architecture/signals-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals",
        "signal state",
        "reactive state modernization",
        "computed effect adoption"
      ]
    },
    {
      "id": "angular.architecture.standalone-components-adoption",
      "name": "Standalone Components Adoption",
      "path": "skills/angular/architecture/standalone-components-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "standalone components",
        "standalone adoption",
        "NgModule reduction"
      ]
    },
    {
      "id": "angular.build.angular-v22-build-system-migration",
      "name": "Angular v22 Build System Migration",
      "path": "skills/angular/build/angular-v22-build-system-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "build system",
        "\"@angular/build\"",
        "webpack builders",
        "architect",
        "ng serve"
      ]
    },
    {
      "id": "angular.components.angular-v22-component-contracts",
      "name": "Angular v22 Component Contracts",
      "path": "skills/angular/components/angular-v22-component-contracts/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ComponentFactoryResolver",
        "ComponentFactory",
        "selector collision",
        "createComponent",
        "change detection"
      ]
    },
    {
      "id": "angular.components.container-presentational",
      "name": "Angular Container Presentational Components",
      "path": "skills/angular/components/container-presentational/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "container presentational",
        "smart dumb components",
        "split Angular component",
        "presentational component fetching data",
        "component too large",
        "reusable Angular component"
      ]
    },
    {
      "id": "angular.components.shared-ui-library-contract",
      "name": "Shared UI Library Contract",
      "path": "skills/angular/components/shared-ui-library-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "shared ui library",
        "shared/ui",
        "shared ui",
        "shared ui contract",
        "reusable angular component library",
        "shared component contract",
        "shared ui audit",
        "ui kit",
        "ui-kit",
        "design system",
        "design-system",
        "component library",
        "nx module boundaries",
        "content projection slots",
        "design system component",
        "component library reuse",
        "shared component",
        "reusable ui component",
        "library contract",
        "reusable contract",
        "bounded context ui",
        "shared domain"
      ]
    },
    {
      "id": "angular.dependency-injection",
      "name": "Angular Dependency Injection",
      "path": "skills/angular/dependency-injection/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "dependency-injection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dependency injection",
        "Angular DI",
        "provider scope",
        "InjectionToken",
        "inject()",
        "NullInjectorError",
        "circular dependency",
        "service provider",
        "TestBed provider override"
      ]
    },
    {
      "id": "angular.design.angular-component-library-contracts",
      "name": "Angular Component Library Contracts",
      "path": "skills/angular/design/angular-component-library-contracts/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "SCSS",
        "Storybook",
        "Design Systems"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular component library",
        "Angular design system",
        "reusable Angular components",
        "component contract"
      ]
    },
    {
      "id": "angular.design.angular-headless-accessible-components",
      "name": "Angular Headless Accessible Components",
      "path": "skills/angular/design/angular-headless-accessible-components/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Accessibility",
        "Angular Aria",
        "Angular CDK"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Aria",
        "headless Angular component",
        "accessible Angular design system",
        "custom Angular control"
      ]
    },
    {
      "id": "angular.docs.angular-adr-for-architecture-decisions",
      "name": "Angular ADR for Architecture Decisions",
      "path": "skills/angular/docs/angular-adr-for-architecture-decisions/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "docs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "adr",
        "architecture decision",
        "decision record"
      ]
    },
    {
      "id": "angular.docs.angular-review-packet",
      "name": "Angular Review Packet",
      "path": "skills/angular/docs/angular-review-packet/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "docs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "review packet",
        "PR summary",
        "agent review"
      ]
    },
    {
      "id": "angular.docs.angular-upgrade-report-template",
      "name": "Angular Upgrade Report Template",
      "path": "skills/angular/docs/angular-upgrade-report-template/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "docs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "upgrade report",
        "migration report",
        "hop summary"
      ]
    },
    {
      "id": "angular.education.angular-v22-business-impact-explainer",
      "name": "Angular v22 Business Impact Explainer",
      "path": "skills/angular/education/angular-v22-business-impact-explainer/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "education",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "business impact",
        "executive explanation",
        "upgrade value",
        "Angular v22 Business Impact Explainer",
        "Education",
        "Angular 22"
      ]
    },
    {
      "id": "angular.education.angular-v22-non-dev-concepts-map",
      "name": "Angular v22 Non Dev Concepts Map",
      "path": "skills/angular/education/angular-v22-non-dev-concepts-map/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "education",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "non-developer",
        "concept map",
        "Angular 22 explanation",
        "Angular v22 Non Dev Concepts Map",
        "Education",
        "Angular 22"
      ]
    },
    {
      "id": "angular.education.angular-v22-signals-forms-router-analogy",
      "name": "Angular v22 Signals Forms Router Analogy",
      "path": "skills/angular/education/angular-v22-signals-forms-router-analogy/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "education",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "analogy",
        "signals",
        "forms router SSR",
        "Angular v22 Signals Forms Router Analogy",
        "Education",
        "Angular 22"
      ]
    },
    {
      "id": "angular.education.angular-v22-upgrade-risk-plain-language",
      "name": "Angular v22 Upgrade Risk Plain Language",
      "path": "skills/angular/education/angular-v22-upgrade-risk-plain-language/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "education",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "plain language",
        "upgrade risk",
        "non technical",
        "Angular v22 Upgrade Risk Plain Language",
        "Education",
        "Angular 22"
      ]
    },
    {
      "id": "angular.forms.angular-cva-patterns",
      "name": "Angular CVA Patterns",
      "path": "skills/angular/forms/angular-cva-patterns/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "cva",
        "control value accessor",
        "forms"
      ]
    },
    {
      "id": "angular.forms.angular-number-input-min-max-validation-v12",
      "name": "Angular Number Input Min Max Validation v12",
      "path": "skills/angular/forms/angular-number-input-min-max-validation-v12/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "number input min max",
        "form validity"
      ]
    },
    {
      "id": "angular.forms.angular-signal-forms-readiness",
      "name": "Angular Signal Forms Readiness",
      "path": "skills/angular/forms/angular-signal-forms-readiness/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signal forms",
        "forms readiness",
        "typed forms"
      ]
    },
    {
      "id": "angular.forms.angular-typed-forms-governance",
      "name": "Angular Typed Forms Governance",
      "path": "skills/angular/forms/angular-typed-forms-governance/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "typed forms",
        "forms governance",
        "null safety"
      ]
    },
    {
      "id": "angular.forms.angular-typed-forms-migration",
      "name": "Angular Typed Forms Migration",
      "path": "skills/angular/forms/angular-typed-forms-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "typed forms",
        "FormControl",
        "FormGroup",
        "FormArray"
      ]
    },
    {
      "id": "angular.forms.angular-untyped-forms-bridge",
      "name": "Angular Untyped Forms Bridge",
      "path": "skills/angular/forms/angular-untyped-forms-bridge/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "UntypedFormGroup",
        "UntypedFormControl",
        "typed forms bridge"
      ]
    },
    {
      "id": "angular.forms.angular-v22-signal-forms",
      "name": "Angular v22 Signal Forms",
      "path": "skills/angular/forms/angular-v22-signal-forms/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Signal Forms",
        "reactive forms",
        "template type checking",
        "validation"
      ]
    },
    {
      "id": "angular.forms.form-validation-contracts",
      "name": "Angular Form Validation Contracts",
      "path": "skills/angular/forms/form-validation-contracts/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "form validation",
        "angular validation",
        "async validators",
        "cross field validation",
        "validation contract",
        "error presentation",
        "custom validator",
        "form errors"
      ]
    },
    {
      "id": "angular.forms.reactive-forms-patterns",
      "name": "Angular Reactive Forms Patterns",
      "path": "skills/angular/forms/reactive-forms-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "reactive forms",
        "angular forms",
        "form group patterns",
        "form builder",
        "typed forms",
        "form workflow",
        "form architecture",
        "enterprise forms"
      ]
    },
    {
      "id": "angular.forms.reactive-forms-patterns-v14",
      "name": "Angular Reactive Forms Patterns v14+",
      "path": "skills/angular/forms/reactive-forms-patterns-v14/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "reactive forms v14",
        "typed forms v14",
        "angular 14 forms",
        "typed reactive forms",
        "forms migration 14"
      ]
    },
    {
      "id": "angular.governance.angular-change-type-classifier",
      "name": "Angular Change Type Classifier",
      "path": "skills/angular/governance/angular-change-type-classifier/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "governance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "change type",
        "classify change",
        "risk level"
      ]
    },
    {
      "id": "angular.governance.angular-compatibility-evidence",
      "name": "Angular Compatibility Evidence",
      "path": "skills/angular/governance/angular-compatibility-evidence/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "governance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "compatibility evidence",
        "version proof",
        "matrix evidence"
      ]
    },
    {
      "id": "angular.governance.angular-migration-vs-modernization-boundary",
      "name": "Angular Migration Vs Modernization Boundary",
      "path": "skills/angular/governance/angular-migration-vs-modernization-boundary/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "governance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "migration vs modernization",
        "upgrade boundary",
        "separate concerns"
      ]
    },
    {
      "id": "angular.governance.angular-project-classifier",
      "name": "Angular Project Classifier",
      "path": "skills/angular/governance/angular-project-classifier/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "governance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "project classifier",
        "app type",
        "repo shape"
      ]
    },
    {
      "id": "angular.governance.angular-validation-contract",
      "name": "Angular Validation Contract",
      "path": "skills/angular/governance/angular-validation-contract/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "governance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "validation contract",
        "build test lint",
        "gate"
      ]
    },
    {
      "id": "angular.i18n.angular-localize-v9-migration",
      "name": "Angular Localize v9 Migration",
      "path": "skills/angular/i18n/angular-localize-v9-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "i18n",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "\"@angular/localize\"",
        "$localize",
        "Angular i18n"
      ]
    },
    {
      "id": "angular.ivy.angular-ivy-only-v13-gate",
      "name": "Angular Ivy Only v13 Gate",
      "path": "skills/angular/ivy/angular-ivy-only-v13-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ivy",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Ivy only",
        "View Engine",
        "ngcc"
      ]
    },
    {
      "id": "angular.libraries.angular-view-engine-library-audit-v13",
      "name": "Angular View Engine Library Audit v13",
      "path": "skills/angular/libraries/angular-view-engine-library-audit-v13/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "libraries",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "View Engine libraries",
        "ngcc audit",
        "Angular library compatibility"
      ]
    },
    {
      "id": "angular.material.angular-aria-headless-patterns",
      "name": "Angular Aria Headless Patterns",
      "path": "skills/angular/material/angular-aria-headless-patterns/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "aria",
        "headless",
        "accessibility patterns"
      ]
    },
    {
      "id": "angular.material.angular-cdk-a11y-patterns",
      "name": "Angular CDK A11y Patterns",
      "path": "skills/angular/material/angular-cdk-a11y-patterns/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "cdk a11y",
        "accessibility",
        "keyboard navigation"
      ]
    },
    {
      "id": "angular.material.angular-material-theming-system",
      "name": "Angular Material Theming System",
      "path": "skills/angular/material/angular-material-theming-system/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "material theming",
        "theme system",
        "density typography"
      ]
    },
    {
      "id": "angular.microfrontends.micro-frontends-architecture",
      "name": "Micro-frontends Architecture",
      "path": "skills/angular/microfrontends/micro-frontends-architecture/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro frontends",
        "micro-frontends",
        "microfrontend architecture",
        "microfrontend",
        "micro frontend architecture",
        "module federation",
        "native federation",
        "shell app",
        "remote app",
        "shell and remotes",
        "bounded context architecture",
        "distributed frontend",
        "runtime composition",
        "nx monorepo architecture",
        "angular micro frontends"
      ]
    },
    {
      "id": "angular.microfrontends.micro-frontends-dependency-sharing-policy",
      "name": "Micro-frontends Dependency Sharing Policy",
      "path": "skills/angular/microfrontends/micro-frontends-dependency-sharing-policy/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dependency sharing",
        "shared libraries",
        "domain leakage",
        "micro fronts dependency sharing",
        "micro-frontends dependency sharing",
        "dependency sharing policy",
        "shared singleton policy",
        "bundle duplication risk",
        "shared dependency alignment",
        "shared library boundaries",
        "module federation shared dependencies",
        "micro frontends dependencies"
      ]
    },
    {
      "id": "angular.microfrontends.micro-frontends-fallback-and-rollback",
      "name": "Micro-frontends Fallback and Rollback",
      "path": "skills/angular/microfrontends/micro-frontends-fallback-and-rollback/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "fallback",
        "rollback",
        "remote failure",
        "micro fronts fallback",
        "micro-frontends fallback",
        "rollback policy",
        "fallback strategy",
        "safe degradation",
        "retry flow",
        "graceful fallback",
        "micro frontends rollback"
      ]
    },
    {
      "id": "angular.microfrontends.micro-frontends-shell-container-contract",
      "name": "Micro-frontends Shell Container Contract",
      "path": "skills/angular/microfrontends/micro-frontends-shell-container-contract/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "shell container",
        "host app",
        "remote loading",
        "container app",
        "micro frontends shell",
        "shell app contract",
        "host shell",
        "shell routing",
        "shell composition",
        "container boundary",
        "shell fallback"
      ]
    },
    {
      "id": "angular.microfrontends.micro-frontends-version-compatibility-gate",
      "name": "Micro-frontends Version Compatibility Gate",
      "path": "skills/angular/microfrontends/micro-frontends-version-compatibility-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Module Federation"
      ],
      "category": "architecture",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "compatibility gate",
        "version compatibility",
        "remote version drift",
        "micro fronts version compatibility",
        "micro-frontends version compatibility",
        "version compatibility gate",
        "shell remote version",
        "upgrade safety",
        "module federation versioning",
        "micro frontends compatibility"
      ]
    },
    {
      "id": "angular.migration.angularjs-decommission",
      "name": "AngularJS Decommission",
      "path": "skills/angular/migration/angularjs-decommission/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angularjs decommission",
        "legacy cleanup",
        "decommission"
      ]
    },
    {
      "id": "angular.migration.angularjs-hybrid-ngupgrade",
      "name": "AngularJS Hybrid ngUpgrade",
      "path": "skills/angular/migration/angularjs-hybrid-ngupgrade/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ngupgrade",
        "hybrid angularjs",
        "hybrid migration"
      ]
    },
    {
      "id": "angular.migration.angularjs-legacy-inventory",
      "name": "AngularJS Legacy Inventory",
      "path": "skills/angular/migration/angularjs-legacy-inventory/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "legacy inventory",
        "angularjs inventory",
        "debt inventory"
      ]
    },
    {
      "id": "angular.migration.angularjs-routing-migration",
      "name": "AngularJS Routing Migration",
      "path": "skills/angular/migration/angularjs-routing-migration/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "routing migration",
        "angularjs routes",
        "router migration"
      ]
    },
    {
      "id": "angular.migration.angularjs-service-migration",
      "name": "AngularJS Service Migration",
      "path": "skills/angular/migration/angularjs-service-migration/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "service migration",
        "angularjs services",
        "migration plan"
      ]
    },
    {
      "id": "angular.migration.angularjs-strategy-selector",
      "name": "AngularJS Strategy Selector",
      "path": "skills/angular/migration/angularjs-strategy-selector/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "strategy selector",
        "migration strategy",
        "legacy migration"
      ]
    },
    {
      "id": "angular.migration.angularjs-template-syntax-migration",
      "name": "AngularJS Template Syntax Migration",
      "path": "skills/angular/migration/angularjs-template-syntax-migration/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "template syntax migration",
        "angularjs templates",
        "migration path"
      ]
    },
    {
      "id": "angular.migration.angularjs-to-angular-modernization-orchestrator",
      "name": "AngularJS to Angular Modernization Orchestrator",
      "path": "skills/angular/migration/angularjs-to-angular-modernization-orchestrator/SKILL.md",
      "stack": [
        "AngularJS",
        "Angular",
        "TypeScript"
      ],
      "category": "migration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS migration",
        "AngularJS modernization",
        "ngUpgrade",
        "hybrid AngularJS Angular",
        "legacy modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-control-flow-v17-migration",
      "name": "Angular Control Flow v17 Migration",
      "path": "skills/angular/modernization/angular-control-flow-v17-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "control flow migration",
        "\"@if\"",
        "\"@for\"",
        "\"@switch\"",
        "structural directives modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-control-flow-v18-migration",
      "name": "Angular Control Flow v18 Migration",
      "path": "skills/angular/modernization/angular-control-flow-v18-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "control flow migration",
        "\"@if\"",
        "\"@for\"",
        "\"@switch\"",
        "structural directives modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-control-flow-v19-migration",
      "name": "Angular Control Flow v19 Migration",
      "path": "skills/angular/modernization/angular-control-flow-v19-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "control flow migration",
        "\"@if\"",
        "\"@for\"",
        "\"@switch\"",
        "structural directives modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-control-flow-v20-migration",
      "name": "Angular Control Flow v20 Migration",
      "path": "skills/angular/modernization/angular-control-flow-v20-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "control flow migration",
        "\"@if\"",
        "\"@for\"",
        "\"@switch\"",
        "structural directives modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-control-flow-v21-migration",
      "name": "Angular Control Flow v21 Migration",
      "path": "skills/angular/modernization/angular-control-flow-v21-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "control flow migration",
        "\"@if\"",
        "\"@for\"",
        "\"@switch\"",
        "structural directives modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-defer-views-v17-adoption",
      "name": "Angular Defer Views v17 Adoption",
      "path": "skills/angular/modernization/angular-defer-views-v17-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "defer views",
        "\"@defer\"",
        "deferrable views",
        "lazy rendering modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-defer-views-v18-adoption",
      "name": "Angular Defer Views v18 Adoption",
      "path": "skills/angular/modernization/angular-defer-views-v18-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "defer views",
        "\"@defer\"",
        "deferrable views",
        "lazy rendering modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-defer-views-v19-adoption",
      "name": "Angular Defer Views v19 Adoption",
      "path": "skills/angular/modernization/angular-defer-views-v19-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "defer views",
        "\"@defer\"",
        "deferrable views",
        "lazy rendering modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-defer-views-v20-adoption",
      "name": "Angular Defer Views v20 Adoption",
      "path": "skills/angular/modernization/angular-defer-views-v20-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "defer views",
        "\"@defer\"",
        "deferrable views",
        "lazy rendering modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-defer-views-v21-adoption",
      "name": "Angular Defer Views v21 Adoption",
      "path": "skills/angular/modernization/angular-defer-views-v21-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "defer views",
        "\"@defer\"",
        "deferrable views",
        "lazy rendering modernization"
      ]
    },
    {
      "id": "angular.modernization.angular-standalone-first-adoption",
      "name": "Angular Standalone First Adoption",
      "path": "skills/angular/modernization/angular-standalone-first-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "standalone adoption",
        "standalone components",
        "bootstrapApplication",
        "NgModule reduction"
      ]
    },
    {
      "id": "angular.modernization.angular-standalone-first-adoption-v19",
      "name": "Angular Standalone First Adoption v19",
      "path": "skills/angular/modernization/angular-standalone-first-adoption-v19/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "standalone adoption",
        "standalone components",
        "bootstrapApplication",
        "NgModule reduction"
      ]
    },
    {
      "id": "angular.modernization.angular-standalone-first-adoption-v20",
      "name": "Angular Standalone First Adoption v20",
      "path": "skills/angular/modernization/angular-standalone-first-adoption-v20/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "standalone adoption",
        "standalone components",
        "bootstrapApplication",
        "NgModule reduction"
      ]
    },
    {
      "id": "angular.modernization.angular-standalone-first-adoption-v21",
      "name": "Angular Standalone First Adoption v21",
      "path": "skills/angular/modernization/angular-standalone-first-adoption-v21/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "standalone adoption",
        "standalone components",
        "bootstrapApplication",
        "NgModule reduction"
      ]
    },
    {
      "id": "angular.modernization.angular-v22-modernization-baseline",
      "name": "Angular v22 Modernization Baseline",
      "path": "skills/angular/modernization/angular-v22-modernization-baseline/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 22 modernization",
        "Signal Forms",
        "Angular Aria",
        "resource",
        "httpResource",
        "zoneless readiness"
      ]
    },
    {
      "id": "angular.modernization.angular-zoneless-readiness-v17",
      "name": "Angular Zoneless Readiness v17",
      "path": "skills/angular/modernization/angular-zoneless-readiness-v17/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless readiness",
        "Zone.js reduction",
        "zoneless modernization",
        "change detection assumptions"
      ]
    },
    {
      "id": "angular.modernization.angular-zoneless-readiness-v18",
      "name": "Angular Zoneless Readiness v18",
      "path": "skills/angular/modernization/angular-zoneless-readiness-v18/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless readiness",
        "Zone.js reduction",
        "zoneless modernization",
        "change detection assumptions"
      ]
    },
    {
      "id": "angular.modernization.angular-zoneless-readiness-v19",
      "name": "Angular Zoneless Readiness v19",
      "path": "skills/angular/modernization/angular-zoneless-readiness-v19/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless readiness",
        "Zone.js reduction",
        "zoneless modernization",
        "change detection assumptions"
      ]
    },
    {
      "id": "angular.modernization.angular-zoneless-readiness-v20",
      "name": "Angular Zoneless Readiness v20",
      "path": "skills/angular/modernization/angular-zoneless-readiness-v20/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless readiness",
        "Zone.js reduction",
        "zoneless modernization",
        "change detection assumptions"
      ]
    },
    {
      "id": "angular.modernization.angular-zoneless-readiness-v21",
      "name": "Angular Zoneless Readiness v21",
      "path": "skills/angular/modernization/angular-zoneless-readiness-v21/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modernization",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless readiness",
        "Zone.js reduction",
        "zoneless modernization",
        "change detection assumptions"
      ]
    },
    {
      "id": "angular.modules.angular-v22-dynamic-module-creation",
      "name": "Angular v22 Dynamic Module Creation",
      "path": "skills/angular/modules/angular-v22-dynamic-module-creation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modules",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "createNgModuleRef",
        "createNgModule",
        "dynamic module",
        "NgModule"
      ]
    },
    {
      "id": "angular.performance.angular-bundle-budget-governance",
      "name": "Angular Bundle Budget Governance",
      "path": "skills/angular/performance/angular-bundle-budget-governance/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "bundle budget",
        "performance budget",
        "bundle size"
      ]
    },
    {
      "id": "angular.performance.angular-core-web-vitals-audit",
      "name": "Angular Core Web Vitals Audit",
      "path": "skills/angular/performance/angular-core-web-vitals-audit/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "core web vitals",
        "web vitals audit",
        "performance audit"
      ]
    },
    {
      "id": "angular.performance.angular-v22-performance-baseline",
      "name": "Angular v22 Performance Baseline",
      "path": "skills/angular/performance/angular-v22-performance-baseline/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "performance",
        "OnPush",
        "zoneless",
        "template hot path",
        "rendering"
      ]
    },
    {
      "id": "angular.performance.angular-zoneless-performance-readiness",
      "name": "Angular Zoneless Performance Readiness",
      "path": "skills/angular/performance/angular-zoneless-performance-readiness/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless readiness",
        "zonejs performance",
        "change detection"
      ]
    },
    {
      "id": "angular.performance.avoid-template-functions",
      "name": "Avoid Template Functions",
      "path": "skills/angular/performance/avoid-template-functions/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "template function",
        "method call in template",
        "change detection cost",
        "computed signals",
        "pure pipe"
      ]
    },
    {
      "id": "angular.performance.change-detection-optimization",
      "name": "Angular Change Detection Optimization",
      "path": "skills/angular/performance/change-detection-optimization/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "change detection optimization",
        "OnPush",
        "markForCheck",
        "detectChanges",
        "signals rendering"
      ]
    },
    {
      "id": "angular.performance.lazy-loading-strategy",
      "name": "Angular Lazy Loading Strategy",
      "path": "skills/angular/performance/lazy-loading-strategy/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "lazy loading",
        "initial bundle",
        "loadChildren",
        "loadComponent",
        "\"@defer\"",
        "route splitting"
      ]
    },
    {
      "id": "angular.performance.list-rendering-optimization",
      "name": "Angular List Rendering Optimization",
      "path": "skills/angular/performance/list-rendering-optimization/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "list rendering",
        "trackBy",
        "\"@for track\"",
        "large list",
        "DOM recreation",
        "virtual scroll"
      ]
    },
    {
      "id": "angular.performance.measure-before-optimizing",
      "name": "Angular Measure Before Optimizing",
      "path": "skills/angular/performance/measure-before-optimizing/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "measure before optimizing",
        "performance evidence",
        "Angular DevTools",
        "Lighthouse",
        "Web Vitals",
        "performance profiling"
      ]
    },
    {
      "id": "angular.performance.ng-optimized-image-adoption",
      "name": "NgOptimizedImage Adoption",
      "path": "skills/angular/performance/ng-optimized-image-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "NgOptimizedImage",
        "image performance",
        "LCP optimization"
      ]
    },
    {
      "id": "angular.performance.onpush-change-detection",
      "name": "OnPush Change Detection",
      "path": "skills/angular/performance/onpush-change-detection/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "OnPush",
        "ChangeDetectionStrategy",
        "change detection",
        "Angular performance",
        "slow rendering"
      ]
    },
    {
      "id": "angular.performance.performance-audit",
      "name": "Angular Performance Audit",
      "path": "skills/angular/performance/performance-audit/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular performance audit",
        "performance checklist",
        "slow component",
        "slow dashboard",
        "performance review"
      ]
    },
    {
      "id": "angular.performance.performance-orchestrator",
      "name": "Angular Performance Orchestrator",
      "path": "skills/angular/performance/performance-orchestrator/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular performance",
        "performance diagnosis",
        "slow Angular app",
        "performance skill selection",
        "rendering issue"
      ]
    },
    {
      "id": "angular.performance.pipes-and-memoization",
      "name": "Angular Pipes and Memoization Optimization",
      "path": "skills/angular/performance/pipes-and-memoization/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "pure pipe",
        "impure pipe",
        "memoization",
        "computed values",
        "repeated transformation",
        "view model mapping"
      ]
    },
    {
      "id": "angular.performance.rxjs-performance",
      "name": "Angular RxJS Performance",
      "path": "skills/angular/performance/rxjs-performance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "RxJS performance",
        "duplicated HTTP requests",
        "nested subscriptions",
        "takeUntilDestroyed",
        "shareReplay",
        "debounceTime"
      ]
    },
    {
      "id": "angular.performance.template-logic-optimization",
      "name": "Angular Template Logic Optimization",
      "path": "skills/angular/performance/template-logic-optimization/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "heavy template logic",
        "compute in template",
        "template method call",
        "template expression",
        "computed signal"
      ]
    },
    {
      "id": "angular.performance.trackby-for-lists",
      "name": "TrackBy for Lists",
      "path": "skills/angular/performance/trackby-for-lists/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ngFor",
        "\"@for\"",
        "trackBy",
        "track expression",
        "large list",
        "DOM recreation"
      ]
    },
    {
      "id": "angular.resources.angular-v22-resource-apis",
      "name": "Angular v22 Resource APIs",
      "path": "skills/angular/resources/angular-v22-resource-apis/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "resource",
        "httpResource",
        "async state",
        "loading state"
      ]
    },
    {
      "id": "angular.router.angular-functional-guards-resolvers",
      "name": "Angular Functional Guards Resolvers",
      "path": "skills/angular/router/angular-functional-guards-resolvers/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "functional guards",
        "resolvers",
        "router guards"
      ]
    },
    {
      "id": "angular.router.angular-lazy-loading-routes",
      "name": "Angular Lazy Loading Routes",
      "path": "skills/angular/router/angular-lazy-loading-routes/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "lazy loading routes",
        "route splitting",
        "router lazy load"
      ]
    },
    {
      "id": "angular.router.angular-route-configuration-patterns",
      "name": "Angular Route Configuration Patterns",
      "path": "skills/angular/router/angular-route-configuration-patterns/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "route configuration",
        "router config",
        "route contract"
      ]
    },
    {
      "id": "angular.router.angular-router-testing-patterns",
      "name": "Angular Router Testing Patterns",
      "path": "skills/angular/router/angular-router-testing-patterns/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "router testing",
        "route tests",
        "router harness"
      ]
    },
    {
      "id": "angular.router.angular-v22-router-upgrade-contracts",
      "name": "Angular v22 Router Upgrade Contracts",
      "path": "skills/angular/router/angular-v22-router-upgrade-contracts/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "router",
        "provideRouter",
        "CanMatch",
        "paramsInheritanceStrategy",
        "route cleanup"
      ]
    },
    {
      "id": "angular.rxjs.avoid-nested-subscriptions",
      "name": "Avoid Nested Subscriptions",
      "path": "skills/angular/rxjs/avoid-nested-subscriptions/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "rxjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "nested subscribe",
        "subscription inside subscription",
        "switchMap",
        "combineLatest",
        "takeUntilDestroyed",
        "RxJS lifecycle"
      ]
    },
    {
      "id": "angular.rxjs.observable-contracts",
      "name": "Angular Observable Contracts",
      "path": "skills/angular/rxjs/observable-contracts/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "rxjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Observable as contract",
        "expose streams",
        "public BehaviorSubject",
        "readonly Observable",
        "mutable state exposure",
        "Angular state service"
      ]
    },
    {
      "id": "angular.security.angular-dependency-vulnerability-triage",
      "name": "Angular Dependency Vulnerability Triage",
      "path": "skills/angular/security/angular-dependency-vulnerability-triage/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dependency vulnerability",
        "security triage",
        "package audit"
      ]
    },
    {
      "id": "angular.security.angular-domsanitizer-governance",
      "name": "Angular DomSanitizer Governance",
      "path": "skills/angular/security/angular-domsanitizer-governance/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "domsanitizer",
        "sanitization",
        "security governance"
      ]
    },
    {
      "id": "angular.security.angular-ssr-security-risk-gate",
      "name": "Angular SSR Security Risk Gate",
      "path": "skills/angular/security/angular-ssr-security-risk-gate/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ssr security",
        "security risk gate",
        "server rendering security"
      ]
    },
    {
      "id": "angular.security.angular-token-storage-policy",
      "name": "Angular Token Storage Policy",
      "path": "skills/angular/security/angular-token-storage-policy/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "token storage",
        "auth token policy",
        "security policy"
      ]
    },
    {
      "id": "angular.security.angular-v22-security-and-server-boundaries",
      "name": "Angular v22 Security and Server Boundaries",
      "path": "skills/angular/security/angular-v22-security-and-server-boundaries/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "security",
        "data-*",
        "SSR security",
        "server transport",
        "redirect safety"
      ]
    },
    {
      "id": "angular.security.angular-xss-template-safety",
      "name": "Angular XSS Template Safety",
      "path": "skills/angular/security/angular-xss-template-safety/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "xss safety",
        "template safety",
        "sanitization"
      ]
    },
    {
      "id": "angular.service-worker.angular-swupdate-v13-migration",
      "name": "Angular SwUpdate v13 Migration",
      "path": "skills/angular/service-worker/angular-swupdate-v13-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "service-worker",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "SwUpdate",
        "service worker updates",
        "versionUpdates"
      ]
    },
    {
      "id": "angular.services.single-responsibility-services",
      "name": "Angular Single Responsibility Services",
      "path": "skills/angular/services/single-responsibility-services/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "services",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "god service",
        "single responsibility service",
        "Angular service refactor",
        "CommonService",
        "UtilsService",
        "ManagerService"
      ]
    },
    {
      "id": "angular.signals.angular-rxjs-signals-interop",
      "name": "Angular RxJS Signals Interop",
      "path": "skills/angular/signals/angular-rxjs-signals-interop/SKILL.md",
      "stack": [
        "Angular",
        "RxJS"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "rxjs signals interop",
        "signals bridge",
        "interop"
      ]
    },
    {
      "id": "angular.signals.angular-signal-state-pattern",
      "name": "Angular Signal State Pattern",
      "path": "skills/angular/signals/angular-signal-state-pattern/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signal state",
        "state pattern",
        "signals state"
      ]
    },
    {
      "id": "angular.signals.angular-signals-fundamentals",
      "name": "Angular Signals Fundamentals",
      "path": "skills/angular/signals/angular-signals-fundamentals/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals fundamentals",
        "computed effect",
        "signal basics"
      ]
    },
    {
      "id": "angular.signals.angular-v22-signals-state-and-forms",
      "name": "Angular v22 Signals State and Forms",
      "path": "skills/angular/signals/angular-v22-signals-state-and-forms/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals",
        "computed",
        "effect",
        "signal forms",
        "resource",
        "httpResource"
      ]
    },
    {
      "id": "angular.signals.signal-computed-linked-effect-boundaries",
      "name": "Angular Signals Responsibility Boundaries",
      "path": "skills/angular/signals/signal-computed-linked-effect-boundaries/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular signals boundaries",
        "signal computed linkedSignal effect",
        "effect state propagation",
        "linkedSignal derived state",
        "angular reactive context",
        "signals architecture",
        "signal responsibility model"
      ]
    },
    {
      "id": "angular.signals.signals-rxjs-interop",
      "name": "Angular Signals RxJS Interop",
      "path": "skills/angular/signals/signals-rxjs-interop/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals rxjs interop",
        "toSignal",
        "toObservable",
        "interop boundary",
        "angular signals rxjs",
        "observable to signal",
        "signal to observable",
        "reactive boundary"
      ]
    },
    {
      "id": "angular.signals.signals-state-patterns",
      "name": "Angular Signals State Patterns",
      "path": "skills/angular/signals/signals-state-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals state",
        "signal patterns",
        "computed effect",
        "local reactive state",
        "angular signals",
        "signal store",
        "derived state",
        "signals architecture"
      ]
    },
    {
      "id": "angular.signals.signals-state-patterns-v16",
      "name": "Angular Signals State Patterns v16+",
      "path": "skills/angular/signals/signals-state-patterns-v16/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals v16",
        "angular 16 signals",
        "signals state patterns 16",
        "local state signals",
        "computed effect v16"
      ]
    },
    {
      "id": "angular.ssr.angular-hydration-risk-gate",
      "name": "Angular Hydration Risk Gate",
      "path": "skills/angular/ssr/angular-hydration-risk-gate/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "hydration risk",
        "hydration gate",
        "ssr hydration"
      ]
    },
    {
      "id": "angular.ssr.angular-render-module-v13-migration",
      "name": "Angular Render Module v13 Migration",
      "path": "skills/angular/ssr/angular-render-module-v13-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "renderModuleFactory",
        "renderModule",
        "SSR migration"
      ]
    },
    {
      "id": "angular.ssr.angular-ssr-browser-api-safety",
      "name": "Angular SSR Browser API Safety",
      "path": "skills/angular/ssr/angular-ssr-browser-api-safety/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "browser api safety",
        "ssr browser safety",
        "window document"
      ]
    },
    {
      "id": "angular.ssr.angular-ssr-readiness-audit",
      "name": "Angular SSR Readiness Audit",
      "path": "skills/angular/ssr/angular-ssr-readiness-audit/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ssr readiness",
        "ssr audit",
        "server rendering readiness"
      ]
    },
    {
      "id": "angular.ssr.angular-v22-ssr-hydration-baseline",
      "name": "Angular v22 SSR Hydration Baseline",
      "path": "skills/angular/ssr/angular-v22-ssr-hydration-baseline/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "SSR",
        "hydration",
        "CommonEngine",
        "platform-server",
        "incremental hydration"
      ]
    },
    {
      "id": "angular.state.signals-vs-rxjs",
      "name": "Angular Signals vs RxJS State Decision",
      "path": "skills/angular/state/signals-vs-rxjs/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "state",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Signals vs RxJS",
        "should this use signals",
        "should this use observables",
        "Angular state decision",
        "toSignal",
        "toObservable"
      ]
    },
    {
      "id": "angular.styles.host-css-custom-properties",
      "name": "Angular Host CSS Custom Properties",
      "path": "skills/angular/styles/host-css-custom-properties/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "styles",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "host css custom properties",
        "css variables",
        "style-only state"
      ]
    },
    {
      "id": "angular.templates.angular-extended-diagnostics-governance",
      "name": "Angular Extended Diagnostics Governance",
      "path": "skills/angular/templates/angular-extended-diagnostics-governance/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "extended diagnostics",
        "template diagnostics",
        "ng810x"
      ]
    },
    {
      "id": "angular.templates.angular-strict-templates-gate",
      "name": "Angular Strict Templates Gate",
      "path": "skills/angular/templates/angular-strict-templates-gate/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "strict templates",
        "template gate",
        "template validation"
      ]
    },
    {
      "id": "angular.templates.angular-v22-template-strictness",
      "name": "Angular v22 Template Strictness",
      "path": "skills/angular/templates/angular-v22-template-strictness/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "templates",
        "strictTemplates",
        "fullTemplateTypeCheck",
        "\"@switch\"",
        "optional chaining"
      ]
    },
    {
      "id": "angular.templates.extended-diagnostics-governance",
      "name": "Angular Extended Diagnostics Governance",
      "path": "skills/angular/templates/extended-diagnostics-governance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "extended diagnostics governance",
        "angular extended diagnostics",
        "strict templates",
        "diagnostics warning error suppress",
        "template diagnostics policy",
        "extended diagnostics",
        "template diagnostics",
        "ng810x"
      ]
    },
    {
      "id": "angular.templates.extended-diagnostics-remediation",
      "name": "Angular Extended Diagnostics Remediation",
      "path": "skills/angular/templates/extended-diagnostics-remediation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "extended diagnostics remediation",
        "angular diagnostic fix",
        "NG8101",
        "NG8113",
        "template warning fix"
      ]
    },
    {
      "id": "angular.templates.strict-templates-adoption",
      "name": "Angular Strict Templates Adoption",
      "path": "skills/angular/templates/strict-templates-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "strictTemplates adoption",
        "strict templates adoption",
        "template type checking",
        "angular template strictness",
        "strict template rollout"
      ]
    },
    {
      "id": "angular.templates.template-diagnostics-matrix",
      "name": "Angular Template Diagnostics Matrix",
      "path": "skills/angular/templates/template-diagnostics-matrix/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "template diagnostics matrix",
        "ng81xx matrix",
        "diagnostic grouping",
        "template problem types",
        "angular diagnostics triage"
      ]
    },
    {
      "id": "angular.testing.angular-component-testing-patterns",
      "name": "Angular Component Testing Patterns",
      "path": "skills/angular/testing/angular-component-testing-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular component testing",
        "component test patterns",
        "inputs and outputs testing",
        "host component testing",
        "template interaction test",
        "harness testing",
        "angular template test"
      ]
    },
    {
      "id": "angular.testing.angular-component-testing-patterns-v17",
      "name": "Angular Component Testing Patterns v17+",
      "path": "skills/angular/testing/angular-component-testing-patterns-v17/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "component testing v17",
        "angular 17 component tests",
        "modern component testing",
        "template interaction tests",
        "component contract testing"
      ]
    },
    {
      "id": "angular.testing.angular-test-strategy-router",
      "name": "Angular Test Strategy Router",
      "path": "skills/angular/testing/angular-test-strategy-router/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "test strategy",
        "vitest jest karma",
        "testing router"
      ]
    },
    {
      "id": "angular.testing.angular-testbed-inject-v9-migration",
      "name": "Angular TestBed Inject v9 Migration",
      "path": "skills/angular/testing/angular-testbed-inject-v9-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TestBed.get",
        "TestBed.inject",
        "test modernization"
      ]
    },
    {
      "id": "angular.testing.angular-v22-testing-stability",
      "name": "Angular v22 Testing Stability",
      "path": "skills/angular/testing/angular-v22-testing-stability/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "testing",
        "fixture.detectChanges",
        "router tests",
        "async behavior",
        "hydration tests"
      ]
    },
    {
      "id": "angular.testing.angular-visual-accessibility-e2e-validation",
      "name": "Angular Visual Accessibility E2E Validation",
      "path": "skills/angular/testing/angular-visual-accessibility-e2e-validation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Testing"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular E2E",
        "visual regression",
        "accessibility testing",
        "Playwright",
        "keyboard flow"
      ]
    },
    {
      "id": "angular.testing.jest-angular-unit-testing",
      "name": "Angular Jest Unit Testing",
      "path": "skills/angular/testing/jest-angular-unit-testing/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Jest"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "jest angular testing",
        "angular jest unit testing",
        "unit testing",
        "TestBed",
        "jest testbed",
        "angular component test",
        "angular service test",
        "mocking strategy"
      ]
    },
    {
      "id": "angular.testing.micro-frontends-e2e-validation",
      "name": "Micro-frontends E2E Validation",
      "path": "skills/angular/testing/micro-frontends-e2e-validation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "Nx",
        "Testing"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "micro frontends e2e",
        "micro-frontends e2e",
        "e2e validation",
        "shell smoke test",
        "remote smoke test",
        "fallback test",
        "federated integration test",
        "micro frontends testing",
        "end to end federation"
      ]
    },
    {
      "id": "angular.upgrade.angular-major-hop-executor",
      "name": "Angular Major Hop Executor",
      "path": "skills/angular/upgrades/angular-major-hop-executor/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "major hop executor",
        "single Angular hop",
        "Angular version step",
        "upgrade execution"
      ]
    },
    {
      "id": "angular.upgrade.angular-upgrade-orchestrator",
      "name": "Angular Upgrade Orchestrator",
      "path": "skills/angular/upgrades/angular-upgrade-orchestrator/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular upgrade",
        "major version hop",
        "next Angular version",
        "upgrade route planner",
        "Angular version chain"
      ]
    },
    {
      "id": "angular.upgrade.angular-upgrade-route-planner",
      "name": "Angular Upgrade Route Planner",
      "path": "skills/angular/upgrades/angular-upgrade-route-planner/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular upgrade route",
        "major-by-major plan",
        "next hop selection",
        "upgrade chain"
      ]
    },
    {
      "id": "angular.upgrade.angular-upgrade-validation-gate",
      "name": "Angular Upgrade Validation Gate",
      "path": "skills/angular/upgrades/angular-upgrade-validation-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "upgrade validation",
        "validation gate",
        "build test lint",
        "hop approval"
      ]
    },
    {
      "id": "angular.upgrade.angular-version-detector",
      "name": "Angular Version Detector",
      "path": "skills/angular/upgrades/angular-version-detector/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular version detection",
        "package version scan",
        "compatibility check",
        "source version evidence"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-controller-to-component-migration",
      "name": "AngularJS Controller to Component Migration",
      "path": "skills/angular/upgrades/angularjs/angularjs-controller-to-component-migration/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS controller migration",
        "controller to component",
        "legacy controller"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-decommission-gate",
      "name": "AngularJS Decommission Gate",
      "path": "skills/angular/upgrades/angularjs/angularjs-decommission-gate/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS decommission",
        "hybrid removal gate",
        "remove AngularJS"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-directive-to-component-migration",
      "name": "AngularJS Directive to Component Migration",
      "path": "skills/angular/upgrades/angularjs/angularjs-directive-to-component-migration/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS directive migration",
        "directive to component",
        "legacy directive"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-downgrade-upgrade-api-bridge",
      "name": "AngularJS Downgrade and Upgrade API Bridge",
      "path": "skills/angular/upgrades/angularjs/angularjs-downgrade-upgrade-api-bridge/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "downgradeComponent",
        "downgradeInjectable",
        "UpgradeComponent",
        "ngUpgrade bridge APIs"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-filter-to-pipe-migration",
      "name": "AngularJS Filter to Pipe Migration",
      "path": "skills/angular/upgrades/angularjs/angularjs-filter-to-pipe-migration/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS filter migration",
        "filter to pipe",
        "legacy filter"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-ngupgrade-hybrid-bootstrap",
      "name": "AngularJS ngUpgrade Hybrid Bootstrap",
      "path": "skills/angular/upgrades/angularjs/angularjs-ngupgrade-hybrid-bootstrap/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ngUpgrade bootstrap",
        "hybrid AngularJS and Angular",
        "UpgradeModule",
        "downgradeComponent"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-routing-hybrid-migration",
      "name": "AngularJS Routing Hybrid Migration",
      "path": "skills/angular/upgrades/angularjs/angularjs-routing-hybrid-migration/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS routing migration",
        "hybrid routing",
        "ui-router bridge",
        "Angular Router coexistence"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-service-to-injectable-migration",
      "name": "AngularJS Service to Injectable Migration",
      "path": "skills/angular/upgrades/angularjs/angularjs-service-to-injectable-migration/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS service migration",
        "service to injectable",
        "legacy service"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-template-syntax-migration",
      "name": "AngularJS Template Syntax Migration",
      "path": "skills/angular/upgrades/angularjs/angularjs-template-syntax-migration/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS template syntax",
        "ng-repeat",
        "ng-if",
        "ng-click",
        "ng-model"
      ]
    },
    {
      "id": "angular.upgrade.angularjs.angularjs-upgrade-inventory",
      "name": "AngularJS Upgrade Inventory",
      "path": "skills/angular/upgrades/angularjs/angularjs-upgrade-inventory/SKILL.md",
      "stack": [
        "Angular",
        "AngularJS"
      ],
      "category": "angularjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AngularJS inventory",
        "ngUpgrade inventory",
        "legacy AngularJS app",
        "hybrid migration planning"
      ]
    },
    {
      "id": "angular.upgrade.browser-support.angular-ie11-deprecation-removal-governance",
      "name": "Angular IE11 Deprecation and Removal Governance",
      "path": "skills/angular/upgrades/browser-support/angular-ie11-deprecation-removal-governance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "browser-support",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "IE11 support",
        "browser policy",
        "Angular 12 IE11 deprecation",
        "Angular 13 IE11 removal",
        "legacy browser governance"
      ]
    },
    {
      "id": "angular.upgrade.build.angular-v20-module-resolution-bundler",
      "name": "Angular v20 Module Resolution Bundler",
      "path": "skills/angular/upgrades/build/angular-v20-module-resolution-bundler/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "moduleResolution bundler",
        "secondary entry points",
        "custom builders",
        "tsconfig inheritance"
      ]
    },
    {
      "id": "angular.upgrade.change-detection.angular-onpush-host-bindings-v18",
      "name": "Angular OnPush Host Bindings v18",
      "path": "skills/angular/upgrades/change-detection/angular-onpush-host-bindings-v18/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "change-detection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "OnPush",
        "host bindings",
        "markForCheck",
        "detectChanges"
      ]
    },
    {
      "id": "angular.upgrade.changelog.angular-major-changelog-risk-review",
      "name": "Angular Major Changelog Risk Review",
      "path": "skills/angular/upgrades/changelog/angular-major-changelog-risk-review/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "changelog",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular changelog review",
        "patch baseline review",
        "minor baseline review",
        "Angular 16 to 17 risk review"
      ]
    },
    {
      "id": "angular.upgrade.components.angular-create-component-projectable-nodes-v19",
      "name": "Angular Create Component Projectable Nodes v19",
      "path": "skills/angular/upgrades/components/angular-create-component-projectable-nodes-v19/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "createComponent",
        "projectable nodes",
        "content projection",
        "ng-content fallback"
      ]
    },
    {
      "id": "angular.upgrade.components.angular-dynamic-component-docheck-v17",
      "name": "Angular Dynamic Component ngDoCheck v17",
      "path": "skills/angular/upgrades/components/angular-dynamic-component-docheck-v17/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dynamic components",
        "ngDoCheck",
        "change detection",
        "ViewContainerRef.createComponent"
      ]
    },
    {
      "id": "angular.upgrade.components.angular-v21-custom-elements-signal-inputs",
      "name": "Angular v21 Custom Elements Signal Inputs",
      "path": "skills/angular/upgrades/components/angular-v21-custom-elements-signal-inputs/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "custom elements",
        "signal inputs",
        "createCustomElement",
        "customElements.define"
      ]
    },
    {
      "id": "angular.upgrade.debug.angular-v20-ng-reflect-cleanup",
      "name": "Angular v20 ng-reflect Cleanup",
      "path": "skills/angular/upgrades/debug/angular-v20-ng-reflect-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "debug",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ng-reflect cleanup",
        "debug attributes",
        "e2e selectors",
        "DOM contracts"
      ]
    },
    {
      "id": "angular.upgrade.deprecations.angular-v15-deprecation-cleanup",
      "name": "Angular v15 Deprecation Cleanup",
      "path": "skills/angular/upgrades/deprecations/angular-v15-deprecation-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "deprecations",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "deprecation cleanup",
        "routerlinkwithhref",
        "date pipe timezone"
      ]
    },
    {
      "id": "angular.upgrade.di.angular-di-constructor-hardening-v15",
      "name": "Angular DI Constructor Hardening v15",
      "path": "skills/angular/upgrades/di/angular-di-constructor-hardening-v15/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "di",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "constructor DI",
        "inheritance",
        "decorators",
        "Angular DI hardening"
      ]
    },
    {
      "id": "angular.upgrade.di.angular-v20-injector-injectflags-cleanup",
      "name": "Angular v20 Injector InjectFlags Cleanup",
      "path": "skills/angular/upgrades/di/angular-v20-injector-injectflags-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "di",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "InjectFlags",
        "TestBed.get",
        "Injector.get",
        "DI cleanup"
      ]
    },
    {
      "id": "angular.upgrade.forms.angular-cva-set-disabled-state-v15",
      "name": "Angular CVA setDisabledState v15",
      "path": "skills/angular/upgrades/forms/angular-cva-set-disabled-state-v15/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ControlValueAccessor",
        "setDisabledState",
        "NG_VALUE_ACCESSOR"
      ]
    },
    {
      "id": "angular.upgrade.forms.angular-ngmodel-template-write-cleanup-v18",
      "name": "Angular ngModel Template Write Cleanup v18",
      "path": "skills/angular/upgrades/forms/angular-ngmodel-template-write-cleanup-v18/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ngModel cleanup",
        "template write expressions",
        "template-driven forms"
      ]
    },
    {
      "id": "angular.upgrade.forms.angular-typed-forms-migration",
      "name": "Angular Typed Forms Migration",
      "path": "skills/angular/upgrades/forms/angular-typed-forms-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "typed forms",
        "untyped forms bridge",
        "reactive forms typing",
        "FormControl generic"
      ]
    },
    {
      "id": "angular.upgrade.forms.angular-untyped-forms-bridge",
      "name": "Angular Untyped Forms Bridge",
      "path": "skills/angular/upgrades/forms/angular-untyped-forms-bridge/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "UntypedFormGroup",
        "UntypedFormControl",
        "typed forms bridge"
      ]
    },
    {
      "id": "angular.upgrade.forms.angular-v21-formarray-directive-conflict",
      "name": "Angular v21 FormArray Directive Conflict",
      "path": "skills/angular/upgrades/forms/angular-v21-formarray-directive-conflict/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "FormArray conflict",
        "formArray directive",
        "reactive forms naming"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-10-to-11",
      "name": "Angular 10 to Angular 11 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-10-to-11/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 10 to 11",
        "major hop upgrade",
        "router behavior",
        "validation gate"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-11-to-12",
      "name": "Angular 11 to Angular 12 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-11-to-12/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 11 to 12",
        "major hop upgrade",
        "validation gate",
        "production build"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-12-to-13",
      "name": "Angular 12 to Angular 13 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-12-to-13/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 12 to 13",
        "major hop upgrade",
        "IE11 removal",
        "View Engine removal"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-13-to-14",
      "name": "Angular 13 to Angular 14 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-13-to-14/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 13 to 14",
        "major hop upgrade",
        "typed forms",
        "validation gate"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-14-to-15",
      "name": "Angular 14 to Angular 15 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-14-to-15/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 14 to 15",
        "major hop upgrade",
        "validation gate",
        "Material MDC"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-15-to-16",
      "name": "Angular 15 to Angular 16 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-15-to-16/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 15 to 16",
        "Angular 16 upgrade",
        "ngcc removal",
        "View Engine libraries"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-16-to-17",
      "name": "Angular 16 to Angular 17 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-16-to-17/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 16 to 17",
        "Angular 17 upgrade",
        "Angular 16 changelog review",
        "Zone.js imports"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-17-to-18",
      "name": "Angular 17 to Angular 18 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-17-to-18/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 17 to 18",
        "Angular 18 upgrade",
        "test stability",
        "SSR platform-server"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-18-to-19",
      "name": "Angular 18 to Angular 19 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-18-to-19/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 18 to 19",
        "Angular 19 upgrade",
        "standalone default",
        "effects timing"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-19-to-20",
      "name": "Angular 19 to Angular 20 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-19-to-20/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 19 to 20",
        "Angular 20 upgrade",
        "moduleResolution bundler",
        "Resource API migration"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-2-to-4",
      "name": "Angular 2 to Angular 4 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-2-to-4/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 2 to 4",
        "major hop upgrade",
        "Angular version hop",
        "Angular 4 migration"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-20-to-21",
      "name": "Angular 20 to Angular 21 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-20-to-21/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 20 to 21",
        "Angular 21 upgrade",
        "SSR allowedHosts",
        "UpgradeAdapter removal"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-4-to-5",
      "name": "Angular 4 to Angular 5.2 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-4-to-5/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 4 to 5",
        "Angular 5.2 upgrade",
        "major hop upgrade",
        "Angular version hop"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-5-to-6",
      "name": "Angular 5 to Angular 6.1 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-5-to-6/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 5 to 6",
        "Angular 6.1 upgrade",
        "major hop upgrade",
        "angular.json migration"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-6-to-7",
      "name": "Angular 6 to Angular 7.2 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-6-to-7/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 6 to 7",
        "Angular 7.2 upgrade",
        "major hop upgrade",
        "validation gate"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-7-to-8",
      "name": "Angular 7 to Angular 8.2 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-7-to-8/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 7 to 8",
        "Angular 8.2 upgrade",
        "major hop upgrade",
        "validation gate"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-8-to-9",
      "name": "Angular 8 to Angular 9.1 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-8-to-9/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 8 to 9",
        "Angular 9.1 upgrade",
        "Ivy migration",
        "major hop upgrade"
      ]
    },
    {
      "id": "angular.upgrade.hops.angular-9-to-10",
      "name": "Angular 9 to Angular 10.2 Upgrade",
      "path": "skills/angular/upgrades/hops/angular-9-to-10/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "upgrades",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 9 to 10",
        "Angular 10.2 upgrade",
        "major hop upgrade",
        "validation gate"
      ]
    },
    {
      "id": "angular.upgrade.http.angular-http-transfer-cache-v18",
      "name": "Angular HTTP Transfer Cache v18",
      "path": "skills/angular/upgrades/http/angular-http-transfer-cache-v18/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "http",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "HTTP transfer cache",
        "authenticated HTTP requests",
        "SSR transfer cache",
        "withHttpTransferCache"
      ]
    },
    {
      "id": "angular.upgrade.http.angular-httpclient-migration-v6",
      "name": "Angular HttpClient Migration v6",
      "path": "skills/angular/upgrades/http/angular-httpclient-migration-v6/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "http",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "HttpClient migration",
        "HttpModule",
        "legacy Http"
      ]
    },
    {
      "id": "angular.upgrade.hybrid.angular-v21-upgrade-adapter-removal",
      "name": "Angular v21 Upgrade Adapter Removal",
      "path": "skills/angular/upgrades/hybrid/angular-v21-upgrade-adapter-removal/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "hybrid",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "UpgradeAdapter",
        "AngularJS hybrid",
        "upgrade/static",
        "hybrid cleanup"
      ]
    },
    {
      "id": "angular.upgrade.hydration.angular-hydration-v17-risk-gate",
      "name": "Angular Hydration v17 Risk Gate",
      "path": "skills/angular/upgrades/hydration/angular-hydration-v17-risk-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "hydration",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "hydration risk gate",
        "SSR hydration",
        "provideClientHydration",
        "ngSkipHydration"
      ]
    },
    {
      "id": "angular.upgrade.i18n.angular-localize-v9-migration",
      "name": "Angular Localize v9 Migration",
      "path": "skills/angular/upgrades/i18n/angular-localize-v9-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "i18n",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular localize",
        "$localize",
        "i18n migration"
      ]
    },
    {
      "id": "angular.upgrade.ivy.angular-ivy-default-v9-compatibility",
      "name": "Angular Ivy Default v9 Compatibility",
      "path": "skills/angular/upgrades/ivy/angular-ivy-default-v9-compatibility/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ivy",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Ivy default",
        "entryComponents",
        "View Engine compatibility"
      ]
    },
    {
      "id": "angular.upgrade.ivy.angular-ivy-only-v13-gate",
      "name": "Angular Ivy Only v13 Gate",
      "path": "skills/angular/upgrades/ivy/angular-ivy-only-v13-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ivy",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Ivy only gate",
        "View Engine dependency",
        "Angular 13 gate"
      ]
    },
    {
      "id": "angular.upgrade.libraries.angular-ngcc-view-engine-removal-v16",
      "name": "Angular ngcc View Engine Removal v16",
      "path": "skills/angular/upgrades/libraries/angular-ngcc-view-engine-removal-v16/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "libraries",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ngcc audit",
        "View Engine libraries",
        "Angular 16 library compatibility",
        "ngcc removal"
      ]
    },
    {
      "id": "angular.upgrade.libraries.angular-view-engine-library-audit-v13",
      "name": "Angular View Engine Library Audit v13",
      "path": "skills/angular/upgrades/libraries/angular-view-engine-library-audit-v13/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "libraries",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "View Engine library audit",
        "ngcc audit",
        "Angular library compatibility"
      ]
    },
    {
      "id": "angular.upgrade.localize.angular-localize-builder-v19",
      "name": "Angular Localize Builder v19",
      "path": "skills/angular/upgrades/localize/angular-localize-builder-v19/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "localize",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "localize builder",
        "\"@angular/localize\"",
        "translation build",
        "builder project option"
      ]
    },
    {
      "id": "angular.upgrade.modules.angular-v21-ngmodulefactory-removal",
      "name": "Angular v21 NgModuleFactory Removal",
      "path": "skills/angular/upgrades/modules/angular-v21-ngmodulefactory-removal/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "modules",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "NgModuleFactory",
        "dynamic module loading",
        "legacy loaders",
        "plugin systems"
      ]
    },
    {
      "id": "angular.upgrade.resources.angular-v20-resource-rxresource-migration",
      "name": "Angular v20 Resource RxResource Migration",
      "path": "skills/angular/upgrades/resources/angular-v20-resource-rxresource-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "resource API",
        "rxResource",
        "ResourceStatus",
        "params and stream"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-dynamic-import-lazy-routes",
      "name": "Angular Dynamic Import Lazy Routes",
      "path": "skills/angular/upgrades/router/angular-dynamic-import-lazy-routes/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "lazy routes",
        "loadChildren string",
        "dynamic import routes"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-router-error-handler-v19",
      "name": "Angular Router Error Handler v19",
      "path": "skills/angular/upgrades/router/angular-router-error-handler-v19/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Router.errorHandler",
        "navigation error handling",
        "RedirectCommand",
        "routing failures"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-router-redirect-command-v18",
      "name": "Angular Router Redirect Command v18",
      "path": "skills/angular/upgrades/router/angular-router-redirect-command-v18/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "RedirectCommand",
        "router redirects",
        "guards and resolvers",
        "Route.redirectTo"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-router-v15-behavior",
      "name": "Angular Router v15 Behavior",
      "path": "skills/angular/upgrades/router/angular-router-v15-behavior/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "router behavior",
        "route timing",
        "navigation assumptions",
        "relativeLinkResolution"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-router-v17-public-api-migration",
      "name": "Angular Router v17 Public API Migration",
      "path": "skills/angular/upgrades/router/angular-router-v17-public-api-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "router public API migration",
        "malformedUriErrorHandler",
        "absolute redirects",
        "loadComponent inheritance"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-v13-router-lazy-route-cleanup",
      "name": "Angular v13 Router Lazy Route Cleanup",
      "path": "skills/angular/upgrades/router/angular-v13-router-lazy-route-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 13 router",
        "lazy route cleanup",
        "loadChildren strings"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-v14-router-resolver-first-emission",
      "name": "Angular v14 Router Resolver First Emission",
      "path": "skills/angular/upgrades/router/angular-v14-router-resolver-first-emission/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "resolver first emission",
        "router resolver",
        "navigation completion"
      ]
    },
    {
      "id": "angular.upgrade.router.angular-v20-guards-redirects-route-validation",
      "name": "Angular v20 Guards Redirects Route Validation",
      "path": "skills/angular/upgrades/router/angular-v20-guards-redirects-route-validation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "router guards",
        "redirects",
        "route validation",
        "RedirectFn"
      ]
    },
    {
      "id": "angular.upgrade.rxjs.angular-rxjs-5-to-6-bridge",
      "name": "Angular RxJS 5 to 6 Bridge",
      "path": "skills/angular/upgrades/rxjs/angular-rxjs-5-to-6-bridge/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "rxjs",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "RxJS 5 to 6",
        "rxjs-compat",
        "lettable operators"
      ]
    },
    {
      "id": "angular.upgrade.security.angular-iframe-binding-hardening",
      "name": "Angular Iframe Binding Hardening",
      "path": "skills/angular/upgrades/security/angular-iframe-binding-hardening/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "iframe binding",
        "iframe security",
        "sandbox",
        "allow attribute"
      ]
    },
    {
      "id": "angular.upgrade.service-worker.angular-swupdate-v13-migration",
      "name": "Angular SwUpdate v13 Migration",
      "path": "skills/angular/upgrades/service-worker/angular-swupdate-v13-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "service-worker",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "SwUpdate migration",
        "service worker update flow",
        "Angular service worker"
      ]
    },
    {
      "id": "angular.upgrade.signals.angular-signals-mutate-to-update-v17",
      "name": "Angular Signals Mutate to Update v17",
      "path": "skills/angular/upgrades/signals/angular-signals-mutate-to-update-v17/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "signals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "signals mutate",
        "signals update",
        "reactive state modernization"
      ]
    },
    {
      "id": "angular.upgrade.ssr.angular-platform-server-v18-migration",
      "name": "Angular Platform Server v18 Migration",
      "path": "skills/angular/upgrades/ssr/angular-platform-server-v18-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "platform-server migration",
        "SSR migration",
        "TransferState",
        "prerender"
      ]
    },
    {
      "id": "angular.upgrade.ssr.angular-render-module-v13-migration",
      "name": "Angular renderModule v13 Migration",
      "path": "skills/angular/upgrades/ssr/angular-render-module-v13-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "renderModuleFactory",
        "SSR migration",
        "platform-server"
      ]
    },
    {
      "id": "angular.upgrade.ssr.angular-ssr-allowed-hosts-v21-security",
      "name": "Angular SSR Allowed Hosts v21 Security",
      "path": "skills/angular/upgrades/ssr/angular-ssr-allowed-hosts-v21-security/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "allowedHosts",
        "SSR security",
        "CommonEngine",
        "trusted proxy headers"
      ]
    },
    {
      "id": "angular.upgrade.standalone.angular-standalone-default-v19-ngmodule-compat",
      "name": "Angular Standalone Default v19 NgModule Compatibility",
      "path": "skills/angular/upgrades/standalone/angular-standalone-default-v19-ngmodule-compat/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "standalone",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "standalone default",
        "standalone false",
        "NgModule compatibility",
        "module-heavy architecture"
      ]
    },
    {
      "id": "angular.upgrade.styles.angular-keyframes-scope-v15",
      "name": "Angular Keyframes Scope v15",
      "path": "skills/angular/upgrades/styles/angular-keyframes-scope-v15/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "styles",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "keyframes scope",
        "animation-name",
        "component styles",
        "animation regression"
      ]
    },
    {
      "id": "angular.upgrade.styles.angular-remove-styles-on-destroy-v17",
      "name": "Angular Remove Styles on Destroy v17",
      "path": "skills/angular/upgrades/styles/angular-remove-styles-on-destroy-v17/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "styles",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "remove styles on destroy",
        "component style cleanup",
        "leaked component styles"
      ]
    },
    {
      "id": "angular.upgrade.templates.angular-v20-template-operator-compat",
      "name": "Angular v20 Template Operator Compatibility",
      "path": "skills/angular/upgrades/templates/angular-v20-template-operator-compat/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "template operator compatibility",
        "in operator",
        "void operator",
        "parenthesized expressions"
      ]
    },
    {
      "id": "angular.upgrade.templates.angular-v21-host-binding-typecheck",
      "name": "Angular v21 Host Binding Typecheck",
      "path": "skills/angular/upgrades/templates/angular-v21-host-binding-typecheck/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "host binding typecheck",
        "HostBinding",
        "host metadata",
        "inherited host bindings"
      ]
    },
    {
      "id": "angular.upgrade.testing.angular-testbed-aot-summaries-cleanup-v14",
      "name": "Angular TestBed AOT Summaries Cleanup v14",
      "path": "skills/angular/upgrades/testing/angular-testbed-aot-summaries-cleanup-v14/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TestBed AOT summaries",
        "aotSummaries",
        "testing cleanup"
      ]
    },
    {
      "id": "angular.upgrade.testing.angular-testbed-inject-v9-migration",
      "name": "Angular TestBed.inject v9 Migration",
      "path": "skills/angular/upgrades/testing/angular-testbed-inject-v9-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TestBed.get",
        "TestBed.inject",
        "testing migration"
      ]
    },
    {
      "id": "angular.upgrade.testing.angular-v18-test-stability-change-detection",
      "name": "Angular v18 Test Stability Change Detection",
      "path": "skills/angular/upgrades/testing/angular-v18-test-stability-change-detection/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "test stability",
        "change detection timing",
        "whenStable",
        "autoDetectChanges"
      ]
    },
    {
      "id": "angular.upgrade.testing.angular-v19-effects-and-fakeasync-scheduler",
      "name": "Angular v19 Effects and fakeAsync Scheduler",
      "path": "skills/angular/upgrades/testing/angular-v19-effects-and-fakeasync-scheduler/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "effects timing",
        "fakeAsync scheduler",
        "whenStable",
        "ApplicationRef.tick"
      ]
    },
    {
      "id": "angular.upgrade.testing.angular-v20-testing-errors-effects-animations",
      "name": "Angular v20 Testing Errors Effects Animations",
      "path": "skills/angular/upgrades/testing/angular-v20-testing-errors-effects-animations/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "effects timing",
        "fakeAsync",
        "animations",
        "AsyncPipe errors"
      ]
    },
    {
      "id": "angular.upgrade.testing.angular-v21-router-zone-platformlocation-tests",
      "name": "Angular v21 Router Zone PlatformLocation Tests",
      "path": "skills/angular/upgrades/testing/angular-v21-router-zone-platformlocation-tests/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "router tests",
        "Zone.js timing",
        "PlatformLocation",
        "navigation assertions"
      ]
    },
    {
      "id": "angular.upgrade.workspace.angular-cli-workspace-migration-v6",
      "name": "Angular CLI Workspace Migration v6",
      "path": "skills/angular/upgrades/workspace/angular-cli-workspace-migration-v6/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "workspace",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular.json migration",
        "angular-cli workspace",
        ".angular-cli.json"
      ]
    },
    {
      "id": "angular.upgrade.zone.angular-v21-zone-change-detection-root-provider",
      "name": "Angular v21 Zone Change Detection Root Provider",
      "path": "skills/angular/upgrades/zone/angular-v21-zone-change-detection-root-provider/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "zone",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "provideZoneChangeDetection",
        "Zone.js",
        "scheduler behavior",
        "root provider"
      ]
    },
    {
      "id": "angular.upgrade.zone.angular-zonejs-imports-v17-migration",
      "name": "Angular Zone.js Imports v17 Migration",
      "path": "skills/angular/upgrades/zone/angular-zonejs-imports-v17-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "zone",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Zone.js imports",
        "zone.js/testing",
        "zone.js deep imports"
      ]
    },
    {
      "id": "angular.upgrade.zoneless.angular-v20-zoneless-api-rename",
      "name": "Angular v20 Zoneless API Rename",
      "path": "skills/angular/upgrades/zoneless/angular-v20-zoneless-api-rename/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "zoneless",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless API rename",
        "provideExperimentalZonelessChangeDetection",
        "provideExperimentalCheckNoChangesForDebug"
      ]
    },
    {
      "id": "angular.upgrades.21-to-22.angular-21-to-22-breaking-changes-gate",
      "name": "Angular 21 to 22 Breaking Changes Gate",
      "path": "skills/angular/upgrades/21-to-22/angular-21-to-22-breaking-changes-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 22 breaking changes",
        "v22 gate",
        "breaking changes gate",
        "Angular 21 to 22 Breaking Changes Gate",
        "Hop 21 to 22",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.21-to-22.angular-21-to-22-post-upgrade-validation-gate",
      "name": "Angular 21 to 22 Post Upgrade Validation Gate",
      "path": "skills/angular/upgrades/21-to-22/angular-21-to-22-post-upgrade-validation-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "post upgrade validation",
        "Angular 22 validation",
        "v22 validation gate",
        "Angular 21 to 22 Post Upgrade Validation Gate",
        "Hop 21 to 22",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.21-to-22.angular-21-to-22-preflight-inventory",
      "name": "Angular 21 to 22 Preflight Inventory",
      "path": "skills/angular/upgrades/21-to-22/angular-21-to-22-preflight-inventory/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "v22 preflight",
        "Angular 21 inventory",
        "upgrade inventory",
        "Angular 21 to 22 Preflight Inventory",
        "Hop 21 to 22",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.21-to-22.angular-21-to-22-upgrade-orchestrator",
      "name": "Angular 21 to 22 Upgrade Orchestrator",
      "path": "skills/angular/upgrades/21-to-22/angular-21-to-22-upgrade-orchestrator/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "upgrade",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 21 to 22",
        "Angular 22 upgrade",
        "21-to-22 hop",
        "v22 orchestrator",
        "Angular 21 to 22 Upgrade Orchestrator",
        "Hop 21 to 22",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.accessibility.angular-v22-angular-aria-production-patterns",
      "name": "Angular v22 Angular Aria Production Patterns",
      "path": "skills/angular/upgrades/accessibility/angular-v22-angular-aria-production-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "accessibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Aria",
        "accessible primitives",
        "headless components",
        "Angular v22 Angular Aria Production Patterns",
        "Accessibility / Angular Aria",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.accessibility.angular-v22-angular-aria-test-harnesses",
      "name": "Angular v22 Angular Aria Test Harnesses",
      "path": "skills/angular/upgrades/accessibility/angular-v22-angular-aria-test-harnesses/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "accessibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Aria harness",
        "a11y testing",
        "keyboard",
        "Angular v22 Angular Aria Test Harnesses",
        "Accessibility / Angular Aria",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.accessibility.angular-v22-headless-component-a11y-governance",
      "name": "Angular v22 Headless Component A11y Governance",
      "path": "skills/angular/upgrades/accessibility/angular-v22-headless-component-a11y-governance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "accessibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "headless component",
        "a11y governance",
        "design system",
        "Angular v22 Headless Component A11y Governance",
        "Accessibility / Angular Aria",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.build.angular-v22-application-builder-validation",
      "name": "Angular v22 Application Builder Validation",
      "path": "skills/angular/upgrades/build/angular-v22-application-builder-validation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "application builder",
        "esbuild",
        "Vite",
        "Angular v22 Application Builder Validation",
        "Build / Tooling",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.build.angular-v22-node-compatibility-gate",
      "name": "Angular v22 Node Compatibility Gate",
      "path": "skills/angular/upgrades/build/angular-v22-node-compatibility-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Node compatibility",
        "node version",
        "Angular 22",
        "Angular v22 Node Compatibility Gate",
        "Build / Tooling",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.build.angular-v22-tsgo-readiness-watch",
      "name": "Angular v22 TSGo Readiness Watch",
      "path": "skills/angular/upgrades/build/angular-v22-tsgo-readiness-watch/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TSGo",
        "compiler",
        "readiness",
        "Angular v22 TSGo Readiness Watch",
        "Build / Tooling",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.build.angular-v22-typescript-6-compatibility-gate",
      "name": "Angular v22 TypeScript 6 Compatibility Gate",
      "path": "skills/angular/upgrades/build/angular-v22-typescript-6-compatibility-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TypeScript 6",
        "TS 6",
        "compatibility",
        "Angular v22 TypeScript 6 Compatibility Gate",
        "Build / Tooling",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.build.angular-v22-webpack-builder-deprecation-gate",
      "name": "Angular v22 Webpack Builder Deprecation Gate",
      "path": "skills/angular/upgrades/build/angular-v22-webpack-builder-deprecation-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "build",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "webpack builder",
        "devkit builder",
        "builder deprecation",
        "Angular v22 Webpack Builder Deprecation Gate",
        "Build / Tooling",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.change-detection.angular-v22-change-detection-risk-audit",
      "name": "Angular v22 Change Detection Risk Audit",
      "path": "skills/angular/upgrades/change-detection/angular-v22-change-detection-risk-audit/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "change-detection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "change detection audit",
        "mutation",
        "async side effects",
        "Angular v22 Change Detection Risk Audit",
        "Change Detection / Zoneless",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.change-detection.angular-v22-onpush-default-eager-migration",
      "name": "Angular v22 OnPush Default Eager Migration",
      "path": "skills/angular/upgrades/change-detection/angular-v22-onpush-default-eager-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "change-detection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "OnPush default",
        "Eager",
        "ChangeDetectionStrategy.Default",
        "Angular v22 OnPush Default Eager Migration",
        "Change Detection / Zoneless",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.components.angular-v22-componentfactory-removal-gate",
      "name": "Angular v22 ComponentFactory Removal Gate",
      "path": "skills/angular/upgrades/components/angular-v22-componentfactory-removal-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ComponentFactoryResolver",
        "ComponentFactory",
        "dynamic component",
        "Angular v22 ComponentFactory Removal Gate",
        "Components / Host Directives",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.components.angular-v22-createcomponent-modern-api",
      "name": "Angular v22 CreateComponent Modern API",
      "path": "skills/angular/upgrades/components/angular-v22-createcomponent-modern-api/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "createComponent",
        "ViewContainerRef",
        "dynamic component API",
        "Angular v22 CreateComponent Modern API",
        "Components / Host Directives",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.components.angular-v22-host-directive-conflicting-alias-gate",
      "name": "Angular v22 Host Directive Conflicting Alias Gate",
      "path": "skills/angular/upgrades/components/angular-v22-host-directive-conflicting-alias-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "host directive aliases",
        "input alias",
        "output alias",
        "Angular v22 Host Directive Conflicting Alias Gate",
        "Components / Host Directives",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.components.angular-v22-host-directives-deduplication",
      "name": "Angular v22 Host Directives Deduplication",
      "path": "skills/angular/upgrades/components/angular-v22-host-directives-deduplication/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "hostDirectives",
        "deduplication",
        "template match wins",
        "Angular v22 Host Directives Deduplication",
        "Components / Host Directives",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.components.angular-v22-shadow-root-bootstrap-gate",
      "name": "Angular v22 Shadow Root Bootstrap Gate",
      "path": "skills/angular/upgrades/components/angular-v22-shadow-root-bootstrap-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Shadow Root",
        "bootstrap",
        "web components",
        "Angular v22 Shadow Root Bootstrap Gate",
        "Components / Host Directives",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.di.angular-v22-injectasync-lazy-service-loading",
      "name": "Angular v22 InjectAsync Lazy Service Loading",
      "path": "skills/angular/upgrades/di/angular-v22-injectasync-lazy-service-loading/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "dependency-injection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "injectAsync",
        "lazy service",
        "code splitting",
        "Angular v22 InjectAsync Lazy Service Loading",
        "Dependency Injection",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.di.angular-v22-injectasync-prefetch-patterns",
      "name": "Angular v22 InjectAsync Prefetch Patterns",
      "path": "skills/angular/upgrades/di/angular-v22-injectasync-prefetch-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "dependency-injection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "injectAsync prefetch",
        "onIdle",
        "lazy DI",
        "Angular v22 InjectAsync Prefetch Patterns",
        "Dependency Injection",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.di.angular-v22-root-provider-lazy-boundary-gate",
      "name": "Angular v22 Root Provider Lazy Boundary Gate",
      "path": "skills/angular/upgrades/di/angular-v22-root-provider-lazy-boundary-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "dependency-injection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "root provider",
        "lazy boundary",
        "auto-provided service",
        "Angular v22 Root Provider Lazy Boundary Gate",
        "Dependency Injection",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.di.angular-v22-service-decorator-adoption",
      "name": "Angular v22 Service Decorator Adoption",
      "path": "skills/angular/upgrades/di/angular-v22-service-decorator-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "dependency-injection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "\"@Service\"",
        "\"@Injectable\"",
        "providedIn root",
        "Angular v22 Service Decorator Adoption",
        "Dependency Injection",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.forms.angular-v22-min-max-number-validation-gate",
      "name": "Angular v22 Min Max Number Validation Gate",
      "path": "skills/angular/upgrades/forms/angular-v22-min-max-number-validation-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "min",
        "max",
        "number validation",
        "Angular v22 Min Max Number Validation Gate",
        "Forms / Signal Forms",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.forms.angular-v22-signal-forms-async-validation",
      "name": "Angular v22 Signal Forms Async Validation",
      "path": "skills/angular/upgrades/forms/angular-v22-signal-forms-async-validation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "validateAsync",
        "async validation",
        "reloadValidation",
        "Angular v22 Signal Forms Async Validation",
        "Forms / Signal Forms",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.forms.angular-v22-signal-forms-cva-interop",
      "name": "Angular v22 Signal Forms CVA Interop",
      "path": "skills/angular/upgrades/forms/angular-v22-signal-forms-cva-interop/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "CVA",
        "ControlValueAccessor",
        "Signal Forms interop",
        "Angular v22 Signal Forms CVA Interop",
        "Forms / Signal Forms",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.forms.angular-v22-signal-forms-dynamic-arrays",
      "name": "Angular v22 Signal Forms Dynamic Arrays",
      "path": "skills/angular/upgrades/forms/angular-v22-signal-forms-dynamic-arrays/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dynamic arrays",
        "FormArray",
        "Signal Forms",
        "Angular v22 Signal Forms Dynamic Arrays",
        "Forms / Signal Forms",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.forms.angular-v22-signal-forms-file-upload",
      "name": "Angular v22 Signal Forms File Upload",
      "path": "skills/angular/upgrades/forms/angular-v22-signal-forms-file-upload/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "file upload",
        "FormData",
        "Signal Forms",
        "Angular v22 Signal Forms File Upload",
        "Forms / Signal Forms",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.forms.angular-v22-signal-forms-production-patterns",
      "name": "Angular v22 Signal Forms Production Patterns",
      "path": "skills/angular/upgrades/forms/angular-v22-signal-forms-production-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "forms",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Signal Forms",
        "form()",
        "FieldTree",
        "Angular v22 Signal Forms Production Patterns",
        "Forms / Signal Forms",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.http.angular-v22-fetch-backend-default-gate",
      "name": "Angular v22 Fetch Backend Default Gate",
      "path": "skills/angular/upgrades/http/angular-v22-fetch-backend-default-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "FetchBackend",
        "fetch",
        "HTTP backend",
        "Angular v22 Fetch Backend Default Gate",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.http.angular-v22-http-progress-migration",
      "name": "Angular v22 HTTP Progress Migration",
      "path": "skills/angular/upgrades/http/angular-v22-http-progress-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "reportProgress",
        "upload progress",
        "download progress",
        "Angular v22 HTTP Progress Migration",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.http.angular-v22-jsonp-deprecation-cleanup",
      "name": "Angular v22 JSONP Deprecation Cleanup",
      "path": "skills/angular/upgrades/http/angular-v22-jsonp-deprecation-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "JSONP",
        "HttpClientJsonpModule",
        "jsonp deprecation",
        "Angular v22 JSONP Deprecation Cleanup",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-chips-slider",
      "name": "Angular Material MDC v15 Chips Slider",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-chips-slider/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material chips migration",
        "Material slider migration",
        "MDC chips",
        "MDC slider"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-data-display",
      "name": "Angular Material MDC v15 Data Display",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-data-display/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material table",
        "Material list",
        "Material card",
        "Material paginator"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-form-controls",
      "name": "Angular Material MDC v15 Form Controls",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-form-controls/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material form controls",
        "form-field migration",
        "checkbox migration",
        "radio migration"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-inventory",
      "name": "Angular Material MDC v15 Inventory",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-inventory/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Material inventory",
        "MDC inventory",
        "legacy Material imports",
        "Material CSS overrides"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-migration",
      "name": "Angular Material MDC v15 Migration",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Material v15",
        "MDC migration",
        "Material visual regression",
        "harness migration"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-orchestrator",
      "name": "Angular Material MDC v15 Orchestrator",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-orchestrator/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular Material v15",
        "MDC migration",
        "Material orchestrator",
        "visual regression gate"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-overlays-navigation",
      "name": "Angular Material MDC v15 Overlays Navigation",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-overlays-navigation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material dialogs",
        "Material menus",
        "Material snack-bars",
        "Material tooltips",
        "Material tabs"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-testing-harnesses",
      "name": "Angular Material MDC v15 Testing Harnesses",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-testing-harnesses/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material harnesses",
        "DOM-based Material tests",
        "screenshot tests",
        "MDC tests"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-theming-density-typography",
      "name": "Angular Material MDC v15 Theming Density Typography",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-theming-density-typography/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material theming",
        "Material density",
        "Material typography",
        "MDC classes"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-mdc-v15-visual-regression-gate",
      "name": "Angular Material MDC v15 Visual Regression Gate",
      "path": "skills/angular/upgrades/material/angular-material-mdc-v15-visual-regression-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material visual regression",
        "screenshot review",
        "MDC final gate"
      ]
    },
    {
      "id": "angular.upgrades.material.angular-material-v14-stepper-selectionlist-chips-cleanup",
      "name": "Angular Material v14 Stepper SelectionList Chips Cleanup",
      "path": "skills/angular/upgrades/material/angular-material-v14-stepper-selectionlist-chips-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "material",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Material v14",
        "stepper cleanup",
        "selection list cleanup",
        "chips cleanup"
      ]
    },
    {
      "id": "angular.upgrades.resources.angular-v22-httpresource-production-patterns",
      "name": "Angular v22 HttpResource Production Patterns",
      "path": "skills/angular/upgrades/resources/angular-v22-httpresource-production-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "httpResource",
        "HTTP resource",
        "declarative fetching",
        "Angular v22 HttpResource Production Patterns",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.resources.angular-v22-resource-production-patterns",
      "name": "Angular v22 Resource Production Patterns",
      "path": "skills/angular/upgrades/resources/angular-v22-resource-production-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "resource",
        "async reactivity",
        "loader",
        "Angular v22 Resource Production Patterns",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.resources.angular-v22-resource-ssr-cache-gate",
      "name": "Angular v22 Resource SSR Cache Gate",
      "path": "skills/angular/upgrades/resources/angular-v22-resource-ssr-cache-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "resource SSR",
        "transfer cache",
        "cache gate",
        "Angular v22 Resource SSR Cache Gate",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.resources.angular-v22-rxresource-interop-patterns",
      "name": "Angular v22 RxResource Interop Patterns",
      "path": "skills/angular/upgrades/resources/angular-v22-rxresource-interop-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "resources",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "rxResource",
        "RxJS interop",
        "resource",
        "Angular v22 RxResource Interop Patterns",
        "Resources / HTTP",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-canmatch-current-snapshot-migration",
      "name": "Angular v22 CanMatch Current Snapshot Migration",
      "path": "skills/angular/upgrades/router/angular-v22-canmatch-current-snapshot-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "CanMatchFn",
        "currentSnapshot",
        "guard migration",
        "Angular v22 CanMatch Current Snapshot Migration",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-component-input-binding-options",
      "name": "Angular v22 Component Input Binding Options",
      "path": "skills/angular/upgrades/router/angular-v22-component-input-binding-options/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "component input binding",
        "router inputs",
        "withComponentInputBinding",
        "Angular v22 Component Input Binding Options",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-detached-route-handle-destroy",
      "name": "Angular v22 Detached Route Handle Destroy",
      "path": "skills/angular/upgrades/router/angular-v22-detached-route-handle-destroy/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "destroyDetachedRouteHandle",
        "RouteReuseStrategy",
        "detached route",
        "Angular v22 Detached Route Handle Destroy",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-params-inheritance-always-gate",
      "name": "Angular v22 Params Inheritance Always Gate",
      "path": "skills/angular/upgrades/router/angular-v22-params-inheritance-always-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "paramsInheritanceStrategy",
        "route params",
        "route data",
        "Angular v22 Params Inheritance Always Gate",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-platform-navigation-api-adoption",
      "name": "Angular v22 Platform Navigation API Adoption",
      "path": "skills/angular/upgrades/router/angular-v22-platform-navigation-api-adoption/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "withExperimentalPlatformNavigation",
        "Navigation API",
        "router",
        "Angular v22 Platform Navigation API Adoption",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-provideroutes-removal",
      "name": "Angular v22 ProvideRoutes Removal",
      "path": "skills/angular/upgrades/router/angular-v22-provideroutes-removal/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "provideRoutes",
        "provideRouter",
        "ROUTES",
        "Angular v22 ProvideRoutes Removal",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.router.angular-v22-route-injector-auto-cleanup",
      "name": "Angular v22 Route Injector Auto Cleanup",
      "path": "skills/angular/upgrades/router/angular-v22-route-injector-auto-cleanup/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "router",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "withExperimentalAutoCleanupInjectors",
        "route injector",
        "cleanup",
        "Angular v22 Route Injector Auto Cleanup",
        "Router",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.security.angular-v22-dynamic-script-host-rejection",
      "name": "Angular v22 Dynamic Script Host Rejection",
      "path": "skills/angular/upgrades/security/angular-v22-dynamic-script-host-rejection/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dynamic script",
        "script host",
        "security",
        "Angular v22 Dynamic Script Host Rejection",
        "Security",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.security.angular-v22-iframe-credentialless-security-gate",
      "name": "Angular v22 Iframe Credentialless Security Gate",
      "path": "skills/angular/upgrades/security/angular-v22-iframe-credentialless-security-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "iframe credentialless",
        "iframe",
        "security",
        "Angular v22 Iframe Credentialless Security Gate",
        "Security",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.security.angular-v22-service-worker-sensitive-header-gate",
      "name": "Angular v22 Service Worker Sensitive Header Gate",
      "path": "skills/angular/upgrades/security/angular-v22-service-worker-sensitive-header-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "service worker",
        "sensitive headers",
        "redirects",
        "Angular v22 Service Worker Sensitive Header Gate",
        "Security",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.security.angular-v22-svg-mathml-url-sanitization-gate",
      "name": "Angular v22 SVG MathML URL Sanitization Gate",
      "path": "skills/angular/upgrades/security/angular-v22-svg-mathml-url-sanitization-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "SVG",
        "MathML",
        "xlink:href",
        "Angular v22 SVG MathML URL Sanitization Gate",
        "Security",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.security.angular-v22-template-sanitization-hardening",
      "name": "Angular v22 Template Sanitization Hardening",
      "path": "skills/angular/upgrades/security/angular-v22-template-sanitization-hardening/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "sanitization",
        "DomSanitizer",
        "dynamic binding",
        "Angular v22 Template Sanitization Hardening",
        "Security",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.security.angular-v22-webmcp-security-gate",
      "name": "Angular v22 WebMCP Security Gate",
      "path": "skills/angular/upgrades/security/angular-v22-webmcp-security-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "security",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "WebMCP",
        "tool exposure",
        "agent security",
        "Angular v22 WebMCP Security Gate",
        "Security",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.ssr.angular-v22-incremental-hydration-default-gate",
      "name": "Angular v22 Incremental Hydration Default Gate",
      "path": "skills/angular/upgrades/ssr/angular-v22-incremental-hydration-default-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "incremental hydration",
        "event replay",
        "hydration",
        "Angular v22 Incremental Hydration Default Gate",
        "SSR / Hydration",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.ssr.angular-v22-origin-validation-hardening",
      "name": "Angular v22 Origin Validation Hardening",
      "path": "skills/angular/upgrades/ssr/angular-v22-origin-validation-hardening/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "origin validation",
        "host validation",
        "SSR",
        "Angular v22 Origin Validation Hardening",
        "SSR / Hydration",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.ssr.angular-v22-platform-server-fetch-migration",
      "name": "Angular v22 Platform Server Fetch Migration",
      "path": "skills/angular/upgrades/ssr/angular-v22-platform-server-fetch-migration/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "platform-server",
        "fetch",
        "XHR deprecated",
        "Angular v22 Platform Server Fetch Migration",
        "SSR / Hydration",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.ssr.angular-v22-ssr-resource-cache-validation",
      "name": "Angular v22 SSR Resource Cache Validation",
      "path": "skills/angular/upgrades/ssr/angular-v22-ssr-resource-cache-validation/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "SSR resource cache",
        "httpResource",
        "credentialed requests",
        "Angular v22 SSR Resource Cache Validation",
        "SSR / Hydration",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.ssr.angular-v22-transferstate-security-hardening",
      "name": "Angular v22 TransferState Security Hardening",
      "path": "skills/angular/upgrades/ssr/angular-v22-transferstate-security-hardening/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "ssr",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TransferState",
        "SSR security",
        "DOM clobbering",
        "Angular v22 TransferState Security Hardening",
        "SSR / Hydration",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-extended-diagnostics-upgrade-gate",
      "name": "Angular Extended Diagnostics Upgrade Gate",
      "path": "skills/angular/upgrades/templates/angular-extended-diagnostics-upgrade-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "extended diagnostics upgrade gate",
        "angular upgrade diagnostics",
        "template upgrade blocker",
        "diagnostics after upgrade"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-data-attribute-binding-gate",
      "name": "Angular v22 Data Attribute Binding Gate",
      "path": "skills/angular/upgrades/templates/angular-v22-data-attribute-binding-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "data-*",
        "attribute binding",
        "inputs outputs",
        "Angular v22 Data Attribute Binding Gate",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-duplicate-input-output-model-gate",
      "name": "Angular v22 Duplicate Input Output Model Gate",
      "path": "skills/angular/upgrades/templates/angular-v22-duplicate-input-output-model-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "duplicate input",
        "duplicate output",
        "model binding",
        "Angular v22 Duplicate Input Output Model Gate",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-duplicate-selector-diagnostic-gate",
      "name": "Angular v22 Duplicate Selector Diagnostic Gate",
      "path": "skills/angular/upgrades/templates/angular-v22-duplicate-selector-diagnostic-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "duplicate selector",
        "selector diagnostic",
        "template compiler",
        "Angular v22 Duplicate Selector Diagnostic Gate",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-invalid-in-expression-gate",
      "name": "Angular v22 Invalid In Expression Gate",
      "path": "skills/angular/upgrades/templates/angular-v22-invalid-in-expression-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "in expression",
        "template diagnostics",
        "compiler",
        "Angular v22 Invalid In Expression Gate",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-safe-navigation-nullability-gate",
      "name": "Angular v22 Safe Navigation Nullability Gate",
      "path": "skills/angular/upgrades/templates/angular-v22-safe-navigation-nullability-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "safe navigation",
        "optional chaining",
        "nullability",
        "Angular v22 Safe Navigation Nullability Gate",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-switch-multiple-case-exhaustiveness",
      "name": "Angular v22 Switch Multiple Case Exhaustiveness",
      "path": "skills/angular/upgrades/templates/angular-v22-switch-multiple-case-exhaustiveness/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "\"@switch\"",
        "\"@case\"",
        "\"@default never\"",
        "Angular v22 Switch Multiple Case Exhaustiveness",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-template-arrow-functions-governance",
      "name": "Angular v22 Template Arrow Functions Governance",
      "path": "skills/angular/upgrades/templates/angular-v22-template-arrow-functions-governance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "arrow functions",
        "template functions",
        "inline functions",
        "Angular v22 Template Arrow Functions Governance",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-template-comments-in-elements",
      "name": "Angular v22 Template Comments In Elements",
      "path": "skills/angular/upgrades/templates/angular-v22-template-comments-in-elements/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "template comments",
        "HTML comments",
        "bindings",
        "Angular v22 Template Comments In Elements",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.templates.angular-v22-template-spread-rest-syntax",
      "name": "Angular v22 Template Spread Rest Syntax",
      "path": "skills/angular/upgrades/templates/angular-v22-template-spread-rest-syntax/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "templates",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "spread syntax",
        "rest syntax",
        "template expressions",
        "Angular v22 Template Spread Rest Syntax",
        "Templates / Compiler",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.testing.angular-v22-injectasync-testing",
      "name": "Angular v22 InjectAsync Testing",
      "path": "skills/angular/upgrades/testing/angular-v22-injectasync-testing/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "injectAsync testing",
        "lazy DI test",
        "prefetch test",
        "Angular v22 InjectAsync Testing",
        "Testing",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.testing.angular-v22-onpush-zoneless-testing-gate",
      "name": "Angular v22 OnPush Zoneless Testing Gate",
      "path": "skills/angular/upgrades/testing/angular-v22-onpush-zoneless-testing-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless testing",
        "OnPush testing",
        "fakeAsync",
        "Angular v22 OnPush Zoneless Testing Gate",
        "Testing",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.testing.angular-v22-resource-httpresource-testing",
      "name": "Angular v22 Resource HttpResource Testing",
      "path": "skills/angular/upgrades/testing/angular-v22-resource-httpresource-testing/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "resource testing",
        "httpResource testing",
        "loader mocks",
        "Angular v22 Resource HttpResource Testing",
        "Testing",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.testing.angular-v22-signal-forms-testing",
      "name": "Angular v22 Signal Forms Testing",
      "path": "skills/angular/upgrades/testing/angular-v22-signal-forms-testing/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Signal Forms testing",
        "FieldTree",
        "validation tests",
        "Angular v22 Signal Forms Testing",
        "Testing",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.testing.angular-v22-template-diagnostics-testing-gate",
      "name": "Angular v22 Template Diagnostics Testing Gate",
      "path": "skills/angular/upgrades/testing/angular-v22-template-diagnostics-testing-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "template diagnostics",
        "strictTemplates",
        "compiler tests",
        "Angular v22 Template Diagnostics Testing Gate",
        "Testing",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.testing.angular-v22-testbed-getlastfixture-patterns",
      "name": "Angular v22 TestBed GetLastFixture Patterns",
      "path": "skills/angular/upgrades/testing/angular-v22-testbed-getlastfixture-patterns/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "TestBed",
        "getLastFixture",
        "fixture",
        "Angular v22 TestBed GetLastFixture Patterns",
        "Testing",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.versioning.angular-21-to-22-index",
      "name": "Angular 21 to 22 Index",
      "path": "skills/angular/upgrades/versioning/angular-21-to-22-index/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular 21 to 22 index",
        "v22 upgrade index",
        "Angular 21 to 22 Index",
        "Versioning",
        "Angular 22"
      ]
    },
    {
      "id": "angular.upgrades.zoneless.angular-v22-zoneless-default-governance",
      "name": "Angular v22 Zoneless Default Governance",
      "path": "skills/angular/upgrades/zoneless/angular-v22-zoneless-default-governance/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "change-detection",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless",
        "Zone.js",
        "change detection",
        "Angular v22 Zoneless Default Governance",
        "Change Detection / Zoneless",
        "Angular 22"
      ]
    },
    {
      "id": "angular.versioning.angular-cli-builder-compatibility",
      "name": "Angular CLI Builder Compatibility",
      "path": "skills/angular/versioning/angular-cli-builder-compatibility/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "cli builder compatibility",
        "builder compatibility",
        "application builder"
      ]
    },
    {
      "id": "angular.versioning.angular-node-typescript-rxjs-matrix",
      "name": "Angular Node TypeScript RxJS Matrix",
      "path": "skills/angular/versioning/angular-node-typescript-rxjs-matrix/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "node typescript rxjs matrix",
        "compatibility matrix",
        "version gate"
      ]
    },
    {
      "id": "angular.versioning.angular-peer-dependency-audit",
      "name": "Angular Peer Dependency Audit",
      "path": "skills/angular/versioning/angular-peer-dependency-audit/SKILL.md",
      "stack": [
        "Angular"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "peer dependency audit",
        "peer deps",
        "compatibility audit"
      ]
    },
    {
      "id": "angular.versioning.angular-v22-feature-index",
      "name": "Angular v22 Feature Index",
      "path": "skills/angular/versioning/angular-v22-feature-index/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular v22 feature index",
        "v22 features",
        "Angular v22 Feature Index",
        "Versioning",
        "Angular 22"
      ]
    },
    {
      "id": "angular.versioning.angular-v22-risk-matrix",
      "name": "Angular v22 Risk Matrix",
      "path": "skills/angular/versioning/angular-v22-risk-matrix/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular v22 risk matrix",
        "v22 risk",
        "Angular v22 Risk Matrix",
        "Versioning",
        "Angular 22"
      ]
    },
    {
      "id": "angular.versioning.angular-v22-roadmap-alignment",
      "name": "Angular v22 Roadmap Alignment",
      "path": "skills/angular/versioning/angular-v22-roadmap-alignment/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular roadmap",
        "v22 roadmap alignment",
        "Angular v22 Roadmap Alignment",
        "Versioning",
        "Angular 22"
      ]
    },
    {
      "id": "angular.versioning.angular-version-compatibility-gate",
      "name": "Angular Version Compatibility Gate",
      "path": "skills/angular/versioning/angular-version-compatibility-gate/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "angular version",
        "angular compatibility",
        "node typescript rxjs compatibility",
        "angular upgrade",
        "ng update",
        "angular hop",
        "angular cli version",
        "typescript range",
        "rxjs range"
      ]
    },
    {
      "id": "angular.versioning.angular-version-gates",
      "name": "Angular Version Gates",
      "path": "skills/angular/versioning/angular-version-gates/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular version compatibility",
        "version gates",
        "unsupported Angular API",
        "Angular 12 compatibility",
        "Angular 17 migration",
        "Angular 20 modernization"
      ]
    },
    {
      "id": "angular.versioning.angular-versioning-index",
      "name": "Angular Versioning Index",
      "path": "skills/angular/versioning/angular-versioning-index/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "RxJS"
      ],
      "category": "versioning",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Angular versioning index",
        "Angular upgrade roadmap",
        "versioning catalog",
        "hop index",
        "compatibility gate index"
      ]
    },
    {
      "id": "angular.zone.angular-v22-zone-boundaries",
      "name": "Angular v22 Zone Boundaries",
      "path": "skills/angular/zone/angular-v22-zone-boundaries/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "zone",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "Zone.js",
        "change detection",
        "Eager",
        "OnPush",
        "zone boundaries"
      ]
    },
    {
      "id": "angular.zoneless.angular-v22-zoneless-readiness",
      "name": "Angular v22 Zoneless Readiness",
      "path": "skills/angular/zoneless/angular-v22-zoneless-readiness/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript"
      ],
      "category": "zoneless",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "zoneless",
        "provideZoneless",
        "signals",
        "change detection",
        "bootstrap"
      ]
    },
    {
      "id": "core.autopilot-orchestrator",
      "name": "Autopilot Orchestrator",
      "path": "skills/_core/autopilot-orchestrator/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "core",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "autopilot workflow",
        "start task",
        "choose skill",
        "analyze before coding",
        "NgAutoPilot orchestration"
      ]
    },
    {
      "id": "core.compatibility-router",
      "name": "Compatibility Router",
      "path": "skills/_core/compatibility-router/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "core",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "compatibility router",
        "version compatibility",
        "Angular compatibility",
        "unsupported API",
        "fallback pattern",
        "version gate"
      ]
    },
    {
      "id": "core.project-intake",
      "name": "Project Intake",
      "path": "skills/_core/project-intake/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "core",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "project intake",
        "inspect repository",
        "understand project",
        "repo context",
        "before coding"
      ]
    },
    {
      "id": "core.risk-assessment",
      "name": "Risk Assessment",
      "path": "skills/_core/risk-assessment/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "core",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "assess risk",
        "change risk",
        "risky refactor",
        "architecture change",
        "migration risk",
        "safe change plan"
      ]
    },
    {
      "id": "core.skill-router",
      "name": "Skill Router",
      "path": "skills/_core/skill-router/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "core",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "route skill",
        "select skill",
        "choose micro-skill",
        "skill selection",
        "task routing"
      ]
    },
    {
      "id": "core.stack-version-detection",
      "name": "Stack Version Detection",
      "path": "skills/_core/stack-version-detection/SKILL.md",
      "stack": [
        "Angular",
        "TypeScript",
        "JavaScript"
      ],
      "category": "core",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "detect stack version",
        "Angular version",
        "TypeScript version",
        "Node version",
        "RxJS version",
        "package manager detection"
      ]
    },
    {
      "id": "css.selectors.has-content-aware-layout",
      "name": "CSS Has Content Aware Layout",
      "path": "skills/css/selectors/has-content-aware-layout/SKILL.md",
      "stack": [
        "CSS"
      ],
      "category": "selectors",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "css has",
        "content aware layout",
        "quantity query"
      ]
    },
    {
      "id": "frontend.accessibility.inclusive-ui-foundations",
      "name": "Inclusive UI Foundations",
      "path": "skills/frontend/accessibility/inclusive-ui-foundations/SKILL.md",
      "stack": [
        "HTML",
        "CSS",
        "JavaScript"
      ],
      "category": "accessibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "accessibility review",
        "keyboard navigation",
        "form errors",
        "semantic HTML",
        "screen reader"
      ]
    },
    {
      "id": "frontend.css.responsive-layout-and-motion",
      "name": "Responsive Layout and Motion",
      "path": "skills/frontend/css/responsive-layout-and-motion/SKILL.md",
      "stack": [
        "CSS",
        "HTML"
      ],
      "category": "styles",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "responsive layout",
        "container query",
        "CSS grid",
        "reduced motion",
        "overflow"
      ]
    },
    {
      "id": "frontend.design.accessibility-interaction-gate",
      "name": "Accessibility Interaction Gate",
      "path": "skills/frontend/design/accessibility-interaction-gate/SKILL.md",
      "stack": [
        "Frontend",
        "Accessibility",
        "Testing"
      ],
      "category": "accessibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "accessibility audit",
        "a11y gate",
        "keyboard testing",
        "WCAG review"
      ]
    },
    {
      "id": "frontend.design.anti-generic-ai-design-gate",
      "name": "Anti Generic AI Design Gate",
      "path": "skills/frontend/design/anti-generic-ai-design-gate/SKILL.md",
      "stack": [
        "Frontend",
        "Visual Design",
        "Design Systems"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "AI-looking design",
        "generic AI UI",
        "avoid AI aesthetic",
        "design feels generated"
      ]
    },
    {
      "id": "frontend.design.color-contrast-semantic-tokens",
      "name": "Color Contrast and Semantic Tokens",
      "path": "skills/frontend/design/color-contrast-semantic-tokens/SKILL.md",
      "stack": [
        "Frontend",
        "CSS",
        "Accessibility",
        "Design Systems"
      ],
      "category": "design-system",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "color system",
        "contrast audit",
        "semantic color tokens",
        "dark theme"
      ]
    },
    {
      "id": "frontend.design.component-api-composition",
      "name": "Component API and Composition",
      "path": "skills/frontend/design/component-api-composition/SKILL.md",
      "stack": [
        "Frontend",
        "TypeScript",
        "Design Systems"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "component API",
        "reusable component",
        "component composition",
        "boolean prop explosion"
      ]
    },
    {
      "id": "frontend.design.component-state-completeness",
      "name": "Component State Completeness",
      "path": "skills/frontend/design/component-state-completeness/SKILL.md",
      "stack": [
        "Frontend",
        "Design Systems",
        "Testing"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "component states",
        "loading empty error states",
        "component matrix",
        "design system completeness"
      ]
    },
    {
      "id": "frontend.design.design-quality-orchestrator",
      "name": "Frontend Design Quality Orchestrator",
      "path": "skills/frontend/design/design-quality-orchestrator/SKILL.md",
      "stack": [
        "Frontend",
        "HTML",
        "CSS",
        "Design Systems"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "improve frontend design",
        "design quality review",
        "make UI better",
        "frontend UX audit"
      ]
    },
    {
      "id": "frontend.design.design-quality-release-gate",
      "name": "Design Quality Release Gate",
      "path": "skills/frontend/design/design-quality-release-gate/SKILL.md",
      "stack": [
        "Frontend",
        "UX",
        "Design Systems",
        "Testing"
      ],
      "category": "quality",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "design release gate",
        "frontend quality score",
        "design QA",
        "approve UI release"
      ]
    },
    {
      "id": "frontend.design.design-system-governance",
      "name": "Design System Governance",
      "path": "skills/frontend/design/design-system-governance/SKILL.md",
      "stack": [
        "CSS",
        "Design Systems",
        "Frontend"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "design system",
        "design tokens",
        "component contract",
        "theme",
        "Material"
      ]
    },
    {
      "id": "frontend.design.design-token-system",
      "name": "Design Token System",
      "path": "skills/frontend/design/design-token-system/SKILL.md",
      "stack": [
        "Frontend",
        "CSS",
        "Design Systems"
      ],
      "category": "design-system",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "design tokens",
        "CSS variables",
        "theme architecture",
        "component tokens"
      ]
    },
    {
      "id": "frontend.design.disclosure-accordion-details",
      "name": "Disclosure and Accordion with Native Details",
      "path": "skills/frontend/design/disclosure-accordion-details/SKILL.md",
      "stack": [
        "Frontend",
        "HTML",
        "CSS",
        "Accessibility"
      ],
      "category": "components",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "details summary",
        "accordion component",
        "disclosure widget",
        "exclusive accordion"
      ]
    },
    {
      "id": "frontend.design.microcopy-feedback-system-states",
      "name": "Microcopy and Feedback System States",
      "path": "skills/frontend/design/microcopy-feedback-system-states/SKILL.md",
      "stack": [
        "Frontend",
        "Content Design",
        "UX"
      ],
      "category": "usability",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "microcopy",
        "error messages",
        "empty states",
        "loading copy",
        "user feedback"
      ]
    },
    {
      "id": "frontend.design.motion-choreography-progressive-enhancement",
      "name": "Motion Choreography and Progressive Enhancement",
      "path": "skills/frontend/design/motion-choreography-progressive-enhancement/SKILL.md",
      "stack": [
        "Frontend",
        "CSS",
        "Accessibility"
      ],
      "category": "motion",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "UI animation",
        "staggered animation",
        "motion design",
        "reduced motion",
        "view transition"
      ]
    },
    {
      "id": "frontend.design.native-first-interaction-components",
      "name": "Native First Interaction Components",
      "path": "skills/frontend/design/native-first-interaction-components/SKILL.md",
      "stack": [
        "Frontend",
        "HTML",
        "Accessibility"
      ],
      "category": "accessibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "native HTML component",
        "custom control accessibility",
        "button link semantics",
        "interactive component"
      ]
    },
    {
      "id": "frontend.design.product-design-intake",
      "name": "Product Design Intake",
      "path": "skills/frontend/design/product-design-intake/SKILL.md",
      "stack": [
        "Frontend",
        "UX",
        "Product Design"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "design intake",
        "product UX brief",
        "redesign context",
        "user task analysis"
      ]
    },
    {
      "id": "frontend.design.product-ui-discovery",
      "name": "Product UI Discovery",
      "path": "skills/frontend/design/product-ui-discovery/SKILL.md",
      "stack": [
        "Product",
        "UX",
        "Frontend"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "product intake",
        "UX flow",
        "user journey",
        "empty state",
        "microcopy"
      ]
    },
    {
      "id": "frontend.design.responsive-layout-content-density",
      "name": "Responsive Layout and Content Density",
      "path": "skills/frontend/design/responsive-layout-content-density/SKILL.md",
      "stack": [
        "Frontend",
        "CSS",
        "Responsive Design"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "responsive design",
        "mobile layout",
        "content density",
        "container queries"
      ]
    },
    {
      "id": "frontend.design.storybook-visual-regression-gate",
      "name": "Storybook and Visual Regression Gate",
      "path": "skills/frontend/design/storybook-visual-regression-gate/SKILL.md",
      "stack": [
        "Frontend",
        "Storybook",
        "Testing"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "storybook stories",
        "visual regression",
        "component screenshots",
        "design QA"
      ]
    },
    {
      "id": "frontend.design.task-flow-usability-review",
      "name": "Task Flow Usability Review",
      "path": "skills/frontend/design/task-flow-usability-review/SKILL.md",
      "stack": [
        "Frontend",
        "UX",
        "Product Design"
      ],
      "category": "usability",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "usability review",
        "task flow audit",
        "UX friction",
        "form flow review"
      ]
    },
    {
      "id": "frontend.design.typography-information-hierarchy",
      "name": "Typography and Information Hierarchy",
      "path": "skills/frontend/design/typography-information-hierarchy/SKILL.md",
      "stack": [
        "Frontend",
        "CSS",
        "Content Design"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "typography hierarchy",
        "information hierarchy",
        "UI readability",
        "content density"
      ]
    },
    {
      "id": "frontend.design.visual-direction-art-direction",
      "name": "Visual Direction and Art Direction",
      "path": "skills/frontend/design/visual-direction-art-direction/SKILL.md",
      "stack": [
        "Frontend",
        "Visual Design"
      ],
      "category": "design",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "visual direction",
        "art direction UI",
        "brand expression",
        "interface identity"
      ]
    },
    {
      "id": "frontend.performance.web-performance-evidence",
      "name": "Web Performance Evidence",
      "path": "skills/frontend/performance/web-performance-evidence/SKILL.md",
      "stack": [
        "Web Performance",
        "CSS",
        "JavaScript"
      ],
      "category": "performance",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "core web vitals",
        "performance budget",
        "render blocking",
        "image loading",
        "bundle size"
      ]
    },
    {
      "id": "frontend.testing.frontend-experience-validation",
      "name": "Frontend Experience Validation",
      "path": "skills/frontend/testing/frontend-experience-validation/SKILL.md",
      "stack": [
        "Frontend",
        "Testing",
        "Accessibility"
      ],
      "category": "testing",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "visual regression",
        "browser test",
        "accessibility test",
        "frontend E2E",
        "user flow"
      ]
    },
    {
      "id": "javascript.async-error-handling",
      "name": "JavaScript Async Error Handling",
      "path": "skills/javascript/async-error-handling/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "async error handling",
        "promise errors",
        "unhandled promise rejection",
        "async await catch",
        "retry logic",
        "fallback behavior",
        "promise chains",
        "async loops"
      ]
    },
    {
      "id": "javascript.async-error-handling.browser-async-error-handling-v18",
      "name": "Browser Async Error Handling v18+",
      "path": "skills/javascript/async-error-handling/browser-async-error-handling-v18/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript",
        "Browser"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "browser async error handling",
        "web async handling",
        "browser promise errors",
        "user facing failure state",
        "retry behavior",
        "browser rejection handling"
      ]
    },
    {
      "id": "javascript.async-error-handling.browser-async-error-handling-v20",
      "name": "Browser Async Error Handling v20+",
      "path": "skills/javascript/async-error-handling/browser-async-error-handling-v20/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript",
        "Browser"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "browser async error handling v20",
        "web async handling v20",
        "browser promise errors",
        "user facing failure state",
        "retry behavior",
        "browser rejection handling"
      ]
    },
    {
      "id": "javascript.async-error-handling.nodejs-async-error-handling-v18",
      "name": "Node.js Async Error Handling v18+",
      "path": "skills/javascript/async-error-handling/nodejs-async-error-handling-v18/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript",
        "Node.js"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "node async error handling",
        "nodejs async handling",
        "node v18 errors",
        "process rejection handling",
        "script failure behavior",
        "node promise errors"
      ]
    },
    {
      "id": "javascript.async-error-handling.nodejs-async-error-handling-v20",
      "name": "Node.js Async Error Handling v20+",
      "path": "skills/javascript/async-error-handling/nodejs-async-error-handling-v20/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript",
        "Node.js"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "node async error handling v20",
        "nodejs async handling v20",
        "node v20 errors",
        "process rejection handling",
        "script failure behavior",
        "node promise errors"
      ]
    },
    {
      "id": "javascript.ecmascript-compatibility-semantics",
      "name": "ECMAScript Compatibility Semantics",
      "path": "skills/javascript/ecmascript-compatibility-semantics/SKILL.md",
      "stack": [
        "JavaScript",
        "ECMAScript"
      ],
      "category": "compatibility",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "ECMAScript compatibility",
        "polyfill risk",
        "JavaScript semantics",
        "library support",
        "toolchain target"
      ]
    },
    {
      "id": "javascript.fundamentals",
      "name": "JavaScript Fundamentals",
      "path": "skills/javascript/fundamentals/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "javascript fundamentals",
        "javascript learning path",
        "javascript primitives",
        "js fundamentals",
        "javascript roadmap",
        "javascript capability path"
      ]
    },
    {
      "id": "javascript.modules",
      "name": "JavaScript Modules",
      "path": "skills/javascript/modules/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "javascript modules",
        "import export",
        "commonjs",
        "es modules",
        "barrel files",
        "circular dependencies",
        "package exports",
        "module boundaries"
      ]
    },
    {
      "id": "javascript.pure-functions",
      "name": "JavaScript Pure Functions",
      "path": "skills/javascript/pure-functions/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "javascript",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "pure functions",
        "pure function",
        "immutable function",
        "deterministic logic",
        "mapper function",
        "validator function",
        "business rules",
        "side effect free"
      ]
    },
    {
      "id": "quality.eslint.eslint-autofix-safe-cleanup",
      "name": "ESLint Autofix Safe Cleanup",
      "path": "skills/quality/eslint/eslint-autofix-safe-cleanup/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "eslint",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "eslint autofix",
        "safe cleanup",
        "lint fix",
        "auto fix",
        "mechanical fix"
      ]
    },
    {
      "id": "quality.eslint.eslint-autofix-safe-cleanup-browser-v18",
      "name": "ESLint Autofix Safe Cleanup Browser v18+",
      "path": "skills/quality/eslint/eslint-autofix-safe-cleanup-browser-v18/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "eslint",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "eslint autofix browser",
        "browser lint fix",
        "safe autofix browser",
        "mechanical fix browser"
      ]
    },
    {
      "id": "quality.eslint.eslint-autofix-safe-cleanup-node-v20",
      "name": "ESLint Autofix Safe Cleanup Node v20+",
      "path": "skills/quality/eslint/eslint-autofix-safe-cleanup-node-v20/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "eslint",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "eslint autofix node",
        "node lint fix",
        "safe autofix node",
        "mechanical fix node"
      ]
    },
    {
      "id": "quality.eslint.eslint-baseline-hardening",
      "name": "ESLint Baseline Hardening",
      "path": "skills/quality/eslint/eslint-baseline-hardening/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "eslint",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "eslint baseline hardening",
        "lint baseline",
        "eslint quality gate",
        "lint warnings",
        "lint config review",
        "rule hardening"
      ]
    },
    {
      "id": "quality.eslint.eslint-baseline-hardening-monorepo",
      "name": "ESLint Baseline Hardening Monorepo",
      "path": "skills/quality/eslint/eslint-baseline-hardening-monorepo/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "eslint",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "eslint baseline hardening monorepo",
        "nx lint baseline",
        "workspace lint hardening",
        "shared eslint config"
      ]
    },
    {
      "id": "quality.eslint.eslint-disable-governance",
      "name": "ESLint Disable Governance",
      "path": "skills/quality/eslint/eslint-disable-governance/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "eslint",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "eslint disable governance",
        "eslint-disable",
        "ts-ignore",
        "ts-expect-error",
        "lint suppression",
        "disable comments"
      ]
    },
    {
      "id": "quality.fundamentals",
      "name": "Quality Fundamentals",
      "path": "skills/quality/fundamentals/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "quality",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "quality fundamentals",
        "quality learning path",
        "code quality roadmap",
        "quality primitives",
        "quality capability path",
        "debt and lint coordination"
      ]
    },
    {
      "id": "quality.fundamentals.quality-decision-matrix",
      "name": "Quality Decision Matrix",
      "path": "skills/quality/fundamentals/quality-decision-matrix/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "quality",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "quality decision matrix",
        "choose quality tool",
        "eslint or sonarqube",
        "quality triage matrix",
        "cleanup decision"
      ]
    },
    {
      "id": "quality.no-dead-code.dead-branches-cleanup",
      "name": "Dead Branches Cleanup",
      "path": "skills/quality/no-dead-code/dead-branches-cleanup/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "no-dead-code",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "dead branches",
        "unreachable code",
        "obsolete branch",
        "legacy flags",
        "conditional cleanup"
      ]
    },
    {
      "id": "quality.no-dead-code.orphan-files-cleanup",
      "name": "Orphan Files Cleanup",
      "path": "skills/quality/no-dead-code/orphan-files-cleanup/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "no-dead-code",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "orphan files",
        "dead files",
        "file cleanup",
        "unused file",
        "stale file"
      ]
    },
    {
      "id": "quality.no-dead-code.orphan-files-cleanup-monorepo",
      "name": "Orphan Files Cleanup Monorepo",
      "path": "skills/quality/no-dead-code/orphan-files-cleanup-monorepo/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "no-dead-code",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "orphan files monorepo",
        "nx orphan files",
        "workspace file cleanup",
        "dead files monorepo",
        "project graph cleanup"
      ]
    },
    {
      "id": "quality.no-dead-code.unused-exports-cleanup",
      "name": "Unused Exports Cleanup",
      "path": "skills/quality/no-dead-code/unused-exports-cleanup/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "no-dead-code",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "unused exports",
        "export cleanup",
        "public api cleanup",
        "barrel exports",
        "dead exports"
      ]
    },
    {
      "id": "quality.sonarqube.sonarqube-cognitive-complexity-reduction",
      "name": "SonarQube Cognitive Complexity Reduction",
      "path": "skills/quality/sonarqube/sonarqube-cognitive-complexity-reduction/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "sonarqube",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "cognitive complexity",
        "sonar complexity",
        "branch simplification",
        "complex function",
        "nested conditionals"
      ]
    },
    {
      "id": "quality.sonarqube.sonarqube-duplication-coverage-hardening",
      "name": "SonarQube Duplication Coverage Hardening",
      "path": "skills/quality/sonarqube/sonarqube-duplication-coverage-hardening/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "sonarqube",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "duplication coverage",
        "sonar coverage",
        "duplicate code",
        "coverage hardening",
        "test coverage"
      ]
    },
    {
      "id": "quality.sonarqube.sonarqube-quality-gate-triage",
      "name": "SonarQube Quality Gate Triage",
      "path": "skills/quality/sonarqube/sonarqube-quality-gate-triage/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "sonarqube",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "sonar triage",
        "sonarqube quality gate",
        "sonar quality gate",
        "code smell triage",
        "coverage gate"
      ]
    },
    {
      "id": "quality.sonarqube.sonarqube-quality-gate-triage-monorepo",
      "name": "SonarQube Quality Gate Triage Monorepo",
      "path": "skills/quality/sonarqube/sonarqube-quality-gate-triage-monorepo/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "sonarqube",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "sonar monorepo triage",
        "quality gate monorepo",
        "nx sonar",
        "workspace sonar issues"
      ]
    },
    {
      "id": "quality.technical-debt.debt-ledger-cleanup-hop",
      "name": "Debt Ledger Cleanup Hop",
      "path": "skills/quality/technical-debt/debt-ledger-cleanup-hop/SKILL.md",
      "stack": [
        "JavaScript",
        "TypeScript"
      ],
      "category": "technical-debt",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "debt ledger",
        "technical debt cleanup",
        "cleanup hop",
        "debt tracking",
        "incremental debt repayment",
        "refactor hop"
      ]
    },
    {
      "id": "typescript.dto-mappers.browser-dto-mappers-v14",
      "name": "Browser DTO Mappers v14+",
      "path": "skills/typescript/dto-mappers/browser-dto-mappers-v14/SKILL.md",
      "stack": [
        "TypeScript",
        "Browser"
      ],
      "category": "dto-mappers",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "browser dto mapping",
        "browser dto mappers",
        "view model mapping",
        "serialization boundary",
        "ui mapping contract"
      ]
    },
    {
      "id": "typescript.dto-mappers.node-dto-mappers-v18",
      "name": "Node DTO Mappers v18+",
      "path": "skills/typescript/dto-mappers/node-dto-mappers-v18/SKILL.md",
      "stack": [
        "TypeScript",
        "Node.js"
      ],
      "category": "dto-mappers",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "node dto mapping",
        "node dto mappers",
        "backend mapping",
        "normalization boundary",
        "api contract mapping"
      ]
    },
    {
      "id": "typescript.fundamentals",
      "name": "TypeScript Fundamentals",
      "path": "skills/typescript/fundamentals/SKILL.md",
      "stack": [
        "TypeScript"
      ],
      "category": "fundamentals",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "typescript fundamentals",
        "typescript learning path",
        "ts fundamentals",
        "typescript primitives",
        "typescript capability path",
        "type safety roadmap"
      ]
    },
    {
      "id": "typescript.strict-types",
      "name": "TypeScript Strict Types",
      "path": "skills/typescript/strict-types/SKILL.md",
      "stack": [
        "TypeScript"
      ],
      "category": "strict-types",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "typescript strict types",
        "strict typing",
        "type safety",
        "typescript safety path",
        "unsafe any removal",
        "type narrowing",
        "dto boundaries"
      ]
    },
    {
      "id": "typescript.strict-types.avoid-any",
      "name": "Avoid Any",
      "path": "skills/typescript/strict-types/avoid-any/SKILL.md",
      "stack": [
        "TypeScript"
      ],
      "category": "strict-types",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "any",
        "unknown",
        "strict typing",
        "type guard",
        "DTO",
        "generic"
      ]
    },
    {
      "id": "typescript.strict-types.typescript-strict-types-strict-mode",
      "name": "TypeScript Strict Types Strict Mode",
      "path": "skills/typescript/strict-types/typescript-strict-types-strict-mode/SKILL.md",
      "stack": [
        "TypeScript"
      ],
      "category": "strict-types",
      "status": "stable",
      "version": "0.5.2",
      "triggers": [
        "strict mode typescript",
        "strict true",
        "strict typing strict mode",
        "typescript strict compiler",
        "strict null checks"
      ]
    }
  ]
}
