Thank you for your interest in gstack-industrial! We welcome all forms of contributions.
Found a bug?
- Check Issues to see if it's already reported
- If not, open a new issue with:
- Description: What happened?
- Steps to Reproduce: How to reproduce?
- Expected Behavior: What should happen?
- Actual Behavior: What actually happened?
- Environment: OS, Bun version, Claude Code version
Have a great idea?
- Open a Feature Request issue
- Describe:
- Problem: What problem does this feature solve?
- Solution: What's the expected feature?
- Alternatives: Any alternative approaches considered?
Want to contribute code? Awesome!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Implement your changes
- Test your changes
- Commit (
git commit -m 'feat: add amazing feature') - Push (
git push origin feature/amazing-feature) - Open a Pull Request
- Bun >= 1.0.0
- Claude Code
- Git
# 1. Fork & Clone
git clone https://github.com/<YOUR_USERNAME>/gstack-industrial.git
cd gstack-industrial
# 2. Install dependencies
bun install
# 3. Link to Claude Code (for development)
ln -s $(pwd)/skill-router ~/.claude/skills/templates/skill-router-dev
ln -s $(pwd)/standard-sections ~/.claude/skills/templates/standard-sections-dev
ln -s $(pwd)/hooks ~/.claude/hooks-dev
# 4. Test
bun run skill-router/test-cli.ts "test message" --debug- Use TypeScript strict mode
- Prefer
constoverlet, never usevar - Prefer
interfaceovertype(unless necessary) - Explicit type annotations (don't rely on inference)
// Good
const message: string = "Hello";
interface RouterContext {
message: string;
phase: Phase[];
}
// Bad
let message = "Hello";
type RouterContext = {
message, phase
};- Files:
kebab-case.ts(e.g.,matcher-engine.ts) - Functions:
camelCase(e.g.,calculateMatchScore) - Interfaces:
PascalCase(e.g.,RouterContext) - Constants:
UPPER_SNAKE_CASE(e.g.,DEFAULT_THRESHOLD)
- Use JSDoc for public functions
- Add explanatory comments for complex logic
- Don't comment obvious code
/**
* Calculates match score for a matcher.
*
* @param matcher - Skill matcher definition
* @param ctx - Router context
* @returns Match score (0-500)
*/
function calculateMatchScore(matcher: SkillMatcher, ctx: RouterContext): number {
// scoring logic...
}# Test router
bun run skill-router/test-cli.ts "I need to brainstorm" --debug
# Test template generator
bun run skill-router/gen-skill-docs.ts --check
# Test auto-discovery
bun run discover:dry
# Test hook
cd ~/.claude/hooks
bun run skill-router-before-message.ts "test message"Before submitting a PR:
- Basic functionality tests pass
- Edge cases tested
- Error handling is correct
- No TypeScript errors
- No significant performance regression
We use Conventional Commits:
<type>(<scope>): <subject>
<body>
<footer>
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Formatting (no code change)refactor: Refactoring (not feat or fix)perf: Performance improvementtest: Adding or modifying testschore: Miscellaneous (build, CI, dependencies)
git commit -m "feat(router): add quiet hours support"
git commit -m "fix(matcher): incorrect phase detection for 'test' keyword"
git commit -m "docs(readme): update installation instructions"
git commit -m "refactor(engine): simplify scoring algorithm"Use the same format as commit messages:
feat(router): add multi-language support
fix(matcher): handle empty message gracefully
## Description
[What does this PR do?]
## Motivation
[Why is this change needed?]
## Changes
- [ ] Change A
- [ ] Change B
- [ ] Change C
## Testing
[How to test this change?]
## Checklist
- [ ] Code follows coding standards
- [ ] Tests pass
- [ ] Documentation updated (if needed)
- [ ] Commit messages follow convention- Automated checks: CI runs template sync validation
- Code review: Maintainer reviews your code
- Revisions: Address feedback
- Merge: Maintainer merges after approval
When your changes affect documentation, please update:
- README.md — Main documentation (English / zh-TW / ja)
- INSTALL.md — Installation guide
- skill-router/README.md — Router architecture and configuration
- Use clear, concise language
- Provide code examples
- Use tables and lists for readability
- Include screenshots where applicable
| Label | Description |
|---|---|
bug |
Bug report |
enhancement |
Feature request |
documentation |
Documentation improvement |
good first issue |
Good for newcomers |
help wanted |
Help needed |
question |
Discussion |
wontfix |
Won't fix |
- Open a Discussion
- Or ask in Issues
By contributing, you agree that your contributions will be licensed under the MIT License.