Contributing to GENEALOGIX
Thank you for your interest in contributing to GENEALOGIX! Whether you're a genealogist, developer, or both, we welcome contributions of all kinds.
Table of Contents
- How Can I Contribute?
- Development Environment Setup
- Code Organization
- Testing Requirements
- Documentation Standards
- Submitting Changes
- Good First Issues
- Code of Conduct
How Can I Contribute?
For Genealogists
- Improve Examples: Add real-world genealogy scenarios
- Documentation: Clarify genealogical concepts and best practices
- Test Cases: Contribute edge cases from your research experience
- Use Case Reports: Share how GENEALOGIX works (or doesn't) for your needs
For Developers
- Bug Fixes: Fix issues in the CLI tool or validation logic
- New Features: Implement accepted proposals from GitHub issues/discussions
- Performance: Optimize validation speed and memory usage
- Tooling: Build integrations, converters, or utilities
For Everyone
- Bug Reports: Use our bug report template
- Feature Requests: Use our feature request template
- Documentation: Fix typos, improve clarity, add examples
- Community Support: Help others in Discussions
Development Environment Setup
Prerequisites
Required:
- Go 1.25+ - Install Go
- Git - Install Git
Optional but Recommended:
- VS Code with Go extension
- ajv-cli for schema validation:
npm install -g ajv-cli - yamllint for YAML validation:
pip install yamllint
Initial Setup
# 1. Fork the repository on GitHub
# 2. Clone your fork
git clone https://github.com/YOUR_USERNAME/spec.git
cd spec
# 3. Add upstream remote
git remote add upstream https://github.com/genealogix/spec.git
# 4. Install CLI tool for testing
go install ./glx
# 5. Verify installation
glx --help
# 6. Run validation tests
glx validate glx/tests/valid/Development Workflow
# 1. Sync with upstream
git fetch upstream
git checkout main
git merge upstream/main
# 2. Create feature branch
git checkout -b feature/my-contribution
# 3. Make changes and test
# ... edit files ...
glx validate
go test ./...
# 4. Commit changes
git add .
git commit -m "Add feature X
Detailed explanation of changes and why they're needed."
# 5. Push and create PR
git push origin feature/my-contribution
# Open pull request on GitHubCode Organization
Repository Structure
genealogix/spec/
├── specification/ # Specification documents (markdown)
│ ├── 1-introduction.md
│ ├── 2-core-concepts.md
│ ├── 3-archive-organization.md
│ ├── 4-entity-types/ # Per-entity specifications
│ ├── schema/ # JSON Schema definitions
│ │ ├── v1/ # Version 1 schemas
│ │ └── meta/ # Schema validation schemas
├── docs/ # User and developer documentation
│ ├── quickstart.md
│ ├── guides/ # User guides
│ ├── development/ # Developer guides
│ ├── diagrams/ # Architecture diagrams
│ └── examples/ # Working example archives
│ └── complete-family/ # Best starting point
└── glx/ # CLI tool source code
├── main.go
└── tests/ # Validation test cases
├── valid/ # Should pass validation
└── invalid/ # Should fail validationUnderstanding the Architecture
Key Concepts:
- Specification Documents (
specification/) define behavior and requirements - JSON Schemas (
specification/schema/) enforce structure and validation rules - Examples (
docs/examples/) demonstrate practical usage - Test Suite (
glx/tests/) ensures conformance
Entity Types:
- 9 core entity types: Person, Relationship, Event, Place, Source, Citation, Repository, Assertion, Media
- Each has: specification doc, JSON schema, examples, tests
Evidence Hierarchy:
- Repository → Source → Citation → Assertion
- All genealogical claims must be backed by evidence
Testing Requirements
Running Tests
# Validate specification examples
glx validate docs/examples/
# Validate test suite
cd glx/tests
./run-tests.sh
# Check JSON schemas
glx check-schemas
# Run Go tests (CLI tool)
go test ./glx/...Writing New Tests
Valid Test Cases (glx/tests/valid/):
- Should pass validation
- Test happy paths and optional fields
- Include comments explaining what's being tested
# glx/tests/valid/person-with-multiple-names.glx
id: person-12345678
properties:
given_name: "John"
family_name: "Smith"
alternative_names:
- "Jonathan Smith"
- "Juan Hernandez" # Testing multilingual namesInvalid Test Cases (glx/tests/invalid/):
- Should fail validation with specific error
- Test boundary conditions and error handling
- Document expected error message
# glx/tests/invalid/person-invalid-id-format.glx
# Expected error: ID must match pattern person-[a-f0-9]{8}
id: invalid-id
properties:
given_name: "Test"
family_name: "Person"Test Coverage Requirements
- Minimum: 3 test cases per entity type (27 total for 9 entities)
- Recommended: Cover all optional fields, edge cases, and error conditions
- Invalid tests: At least 1 per common error type
Documentation Standards
Writing Style
For Specification Documents:
- Clear, precise, professional language
- Define technical terms on first use
- Include examples for complex concepts
- Use consistent terminology throughout
For User Documentation:
- Friendly, helpful tone
- Step-by-step instructions
- Real-world examples
- Anticipate common questions
Markdown Conventions
# Top-level title (only one per document)
## Major sections
### Subsections
**Bold** for emphasis and UI elements
*Italic* for terms and file names
`code` for commands, file names, and code elements
Code blocks with language:
\`\`\`bash
command here
\`\`\`
Tables for structured comparisons
Links with descriptive text: [see the guide](link)Genealogical Standards
When documenting genealogical concepts:
- Use Standard Terminology: Follow Genealogical Proof Standard where applicable
- Evidence Quality: Explain primary/secondary and direct/indirect evidence
- Citation Standards: Follow Evidence Explained principles
- Date Formats: Use ISO 8601 (YYYY-MM-DD) or historical variations documented
- Place Names: Use historical names with modern equivalents
Proposing Major Changes
Major changes to the specification are discussed through GitHub issues and discussions.
When to Create a Proposal
Proposal Required (via GitHub Issue):
- Changes to core data model or entity types
- New required fields or breaking changes
- Changes to validation rules or file format
- Git workflow convention changes
Proposal Not Required:
- Bug fixes
- Documentation improvements
- New examples
- Minor clarifications
Proposal Workflow
- Create Issue: Open a GitHub issue describing your proposed change
- Discussion: Use GitHub Discussions for extended community discussion
- Community Review: Community reviews and comments (minimum 7 days)
- Decision: Maintainers accept, reject, or request changes
- Implementation: After acceptance, implement the change via pull request
- Documentation: Update relevant documentation as part of the implementation
For questions or to start a discussion, use GitHub Discussions.
Submitting Changes
Pull Request Process
- Create Issue First: For non-trivial changes, create an issue to discuss
- Branch Naming: Use descriptive names like
feature/add-xyzorfix/issue-123 - Commit Messages: Follow Conventional Commits
type(scope): brief description Longer explanation if needed. Fixes #123 - PR Description: Use the PR template
- Testing: Ensure all tests pass and add new tests for new features
- Documentation: Update relevant documentation
Review Process
- Maintainers will review PRs within 3-5 business days
- Address review comments promptly
- Be open to feedback and iteration
- Squash commits if requested before merge
What Makes a Good PR
✅ Good PR:
- Focused on a single issue or feature
- Includes tests and documentation
- Passes all CI checks
- Has clear commit messages
- References related issues
❌ Needs Improvement:
- Multiple unrelated changes
- No tests or documentation updates
- Fails validation or tests
- Unclear purpose or description
Good First Issues
Looking for where to start? Check issues labeled good-first-issue:
Documentation:
- Fix typos or improve clarity
- Add examples to specification docs
- Write migration guides from other formats
Testing:
- Add test cases for edge cases
- Improve test coverage for entity types
- Document expected validation errors
Examples:
- Create examples for specific scenarios
- Add README files to examples
- Improve example documentation
Tooling:
- Add helpful error messages to CLI
- Improve validation output formatting
- Add progress indicators for large archives
Community Guidelines
Communication Channels
- GitHub Issues: Bug reports, feature requests
- GitHub Discussions: Questions, ideas, show-and-tell
- Pull Requests: Code and documentation contributions
Getting Help
- Check existing issues and discussions first
- Provide complete information when asking questions
- Be patient and respectful
- Help others when you can
Recognition
Contributors are recognized in:
- GitHub contributor graph
- Release notes
- Acknowledgments in major documentation updates
Code of Conduct
We are committed to providing a welcoming and inclusive environment. Please read and follow our Code of Conduct.
Expected Behavior
- Be respectful and constructive
- Welcome newcomers
- Focus on what's best for the community
- Show empathy and kindness
Unacceptable Behavior
- Harassment or discrimination
- Trolling or insulting comments
- Publishing others' private information
- Any conduct inappropriate in a professional setting
Questions?
- Technical questions: GitHub Discussions
- Private concerns: Contact maintainers at conduct@genealogix.io
Thank you for contributing to GENEALOGIX! Together we're building a better future for genealogical research.