An interface found in the wrong location is a hard BLOCK; exceeding the file-size limit or missing documentation is a WARNING only. See language-rules.md for the full per-language interface-location, forbidden-zone, and line-counting rules.
SOLID Detection Skill
References
- language-rules.md - Load when: resolving the exact interface directory, file-limit, or pattern-detection regex for a specific language (Next.js, React, Generic TS, Laravel, Swift, Java, Go, Ruby, Rust, Python), or counting lines while excluding comments/blanks
Project Detection
Detect project type from configuration files:
# Next.js (priority over React)
[ -f "package.json" ] && grep -q '"next"' package.json
# React (no "next" in package.json)
[ -f "package.json" ] && grep -q '"react"' package.json && ! grep -q '"next"' package.json
# Generic TypeScript (no react/next, has .ts files)
[ -f "package.json" ] && ! grep -q '"react"' package.json && ! grep -q '"next"' package.json
[ -f "tsconfig.json" ] || [ -f "bun.lockb" ] || [ -f "bunfig.toml" ]
# Laravel
[ -f "composer.json" ] && grep -q '"laravel' composer.json
# Swift
[ -f "Package.swift" ] || ls *.xcodeproj
# Java
[ -f "pom.xml" ] || [ -f "build.gradle" ] || [ -f "build.gradle.kts" ]
# Go
[ -f "go.mod" ]
# Ruby
[ -f "Gemfile" ] && [ -f "Rakefile" ]
# Rust
[ -f "Cargo.toml" ]
# Python
[ -f "pyproject.toml" ] || [ -f "requirements.txt" ]
Priority order: Next.js > React > Generic TS > Laravel > Swift > Java > Go > Ruby > Rust > Python
For the full per-language rule tables (interface location, forbidden zones, pattern-detection regex) and line-counting rules, see language-rules.md.
Validation Actions
| Severity |
Action |
| Interface in wrong location |
BLOCK (exit 2) |
| File over limit |
WARNING (exit 0) |
| Missing documentation |
WARNING |
Skill Mapping
| Project Type |
SOLID Skill |
Skill Path |
nextjs |
solid-nextjs |
nextjs-expert/skills/solid-nextjs/ |
react |
solid-react |
react-expert/skills/solid-react/ |
generic |
solid-generic |
solid/skills/solid-generic/ |
laravel |
solid-php |
laravel-expert/skills/solid-php/ |
swift |
solid-swift |
swift-apple-expert/skills/solid-swift/ |
java |
solid-java |
solid/skills/solid-java/ |
go |
solid-go |
solid/skills/solid-go/ |
ruby |
solid-ruby |
solid/skills/solid-ruby/ |
rust |
solid-rust |
solid/skills/solid-rust/ |
python |
(no skill yet) |
- |
Environment Variables
Set by detect-project.sh:
SOLID_PROJECT_TYPE=nextjs|react|generic|laravel|swift|java|go|ruby|rust|python|unknown
SOLID_FILE_LIMIT=100|150
SOLID_INTERFACE_DIR=path/to/interfaces
SOLID_STRUCTURE=modular
1---2name: solid-detection3description: Use when determining which language-specific SOLID skill to load, detecting project type from config files, or resolving interface directory conventions.4---56<objective>7SOLID Detection identifies a project's language/framework from its config files (package.json + next/react, tsconfig.json/bun files, composer.json + laravel, Package.swift/*.xcodeproj, pom.xml/build.gradle, go.mod, Gemfile+Rakefile, Cargo.toml, pyproject.toml/requirements.txt) in a fixed priority order, then maps it to the matching SOLID skill and sets `SOLID_PROJECT_TYPE`, `SOLID_FILE_LIMIT`, `SOLID_INTERFACE_DIR`, and `SOLID_STRUCTURE` environment variables via `detect-project.sh`.89An interface found in the wrong location is a hard BLOCK; exceeding the file-size limit or missing documentation is a WARNING only. See `language-rules.md` for the full per-language interface-location, forbidden-zone, and line-counting rules.10</objective>1112# SOLID Detection Skill1314## References1516- [language-rules.md](references/language-rules.md) - Load when: resolving the exact interface directory, file-limit, or pattern-detection regex for a specific language (Next.js, React, Generic TS, Laravel, Swift, Java, Go, Ruby, Rust, Python), or counting lines while excluding comments/blanks1718## Project Detection1920Detect project type from configuration files:2122```bash23# Next.js (priority over React)24[ -f "package.json" ] && grep -q '"next"' package.json2526# React (no "next" in package.json)27[ -f "package.json" ] && grep -q '"react"' package.json && ! grep -q '"next"' package.json2829# Generic TypeScript (no react/next, has .ts files)30[ -f "package.json" ] && ! grep -q '"react"' package.json && ! grep -q '"next"' package.json31[ -f "tsconfig.json" ] || [ -f "bun.lockb" ] || [ -f "bunfig.toml" ]3233# Laravel34[ -f "composer.json" ] && grep -q '"laravel' composer.json3536# Swift37[ -f "Package.swift" ] || ls *.xcodeproj3839# Java40[ -f "pom.xml" ] || [ -f "build.gradle" ] || [ -f "build.gradle.kts" ]4142# Go43[ -f "go.mod" ]4445# Ruby46[ -f "Gemfile" ] && [ -f "Rakefile" ]4748# Rust49[ -f "Cargo.toml" ]5051# Python52[ -f "pyproject.toml" ] || [ -f "requirements.txt" ]53```5455**Priority order:** Next.js > React > Generic TS > Laravel > Swift > Java > Go > Ruby > Rust > Python5657For the full per-language rule tables (interface location, forbidden zones, pattern-detection regex) and line-counting rules, see [language-rules.md](references/language-rules.md).5859## Validation Actions6061| Severity | Action |62|----------|--------|63| Interface in wrong location | **BLOCK** (exit 2) |64| File over limit | **WARNING** (exit 0) |65| Missing documentation | **WARNING** |6667## Skill Mapping6869| Project Type | SOLID Skill | Skill Path |70|--------------|-------------|------------|71| `nextjs` | solid-nextjs | `nextjs-expert/skills/solid-nextjs/` |72| `react` | solid-react | `react-expert/skills/solid-react/` |73| `generic` | solid-generic | `solid/skills/solid-generic/` |74| `laravel` | solid-php | `laravel-expert/skills/solid-php/` |75| `swift` | solid-swift | `swift-apple-expert/skills/solid-swift/` |76| `java` | solid-java | `solid/skills/solid-java/` |77| `go` | solid-go | `solid/skills/solid-go/` |78| `ruby` | solid-ruby | `solid/skills/solid-ruby/` |79| `rust` | solid-rust | `solid/skills/solid-rust/` |80| `python` | _(no skill yet)_ | - |8182## Environment Variables8384Set by `detect-project.sh`:8586```bash87SOLID_PROJECT_TYPE=nextjs|react|generic|laravel|swift|java|go|ruby|rust|python|unknown88SOLID_FILE_LIMIT=100|15089SOLID_INTERFACE_DIR=path/to/interfaces90SOLID_STRUCTURE=modular91```