Files
semantica/CONTRIBUTING.md
T
Mohd KaifandClaude Sonnet 4.6 e8d0d7a2cf feat: add 105 real-world context graph tests + update Discord link (#365)
- Add tests/test_030_context_graph_realworld_extended.py (105 tests, 0 failed)
  - ContextGraph advanced methods: analyze_decision_influence,
    get_decision_insights, trace_decision_causality,
    enforce_decision_policy, find_precedents_by_scenario
  - Research paper citation KG (arXiv provenance: Transformer, BERT,
    GPT-3, GPT-4, LLaMA, PaLM — source URLs as entity provenance)
  - E-commerce KG with pricing / supply-chain causal decision chains
  - GraphBuilderWithProvenance with GitHub + arXiv web-sourced data
  - AlgorithmTrackerWithProvenance: all 10 methods incl. 9 domain-specific
    ones added in 0.3.0-alpha (track_cross_domain_similarity, etc.)
  - Parquet export: entities, relationships, full KG, all codecs (PR #343)
  - ArangoDB AQL export: INSERT content, custom collections (PR #342)
  - Deduplication v2: two-stage prefilter, phonetic blocking, hybrid_v2,
    budget limiting (PR #339); semantic rel dedup v2 (PR #340)
  - AgentMemory: store, retrieve, statistics, conversation history
  - Full E2E workflow: build → decisions → influence → export → dedup
  - Multi-domain precedent search (SEC EDGAR, AMA, M&A news sources)
  - Graph serialization round-trips (research, ecommerce, GitHub domains)
  - Incremental/delta processing simulation (PR #349)
  - All 190 tests (85 existing + 105 new) pass, 0 failed

- Fix Discord invite link — replace expiring links with permanent invite
  across all docs and GitHub files:
  Old: discord.gg/N7WmAuDH, discord.gg/ggb7vWeP
  New: discord.gg/sV34vps5hH (never-expire, unlimited invites)
  Files: README.md, CONTRIBUTING.md, CONTRIBUTORS.md, SUPPORT.md,
         .github/SUPPORT.md, docs/index.md, docs/getting-started.md,
         docs/CodeExamples.md, docs/reference/provenance.md,
         semantica/change_management/change_management_usage.md

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 00:00:44 +05:30

8.9 KiB

Contributing to Semantica

Thank you for your interest in contributing! Every contribution, no matter how small, is valuable. 🎉

Give us a Star🍴 Fork Semantica💬 Join our Discord

New to contributing? Start with a good first issue or join our Discord community.


🚀 Quick Start

  1. Find a good first issue
  2. Fork Semantica & clone the repository
  3. Make your changes
  4. Submit a pull request!

Need help? Join Discord or GitHub Discussions


🎯 Ways to Contribute

💻 Code

What you can do:

  • Fix bugs
  • Add new features
  • Improve code quality (add type hints, docstrings, improve error messages)
  • Optimize performance

Where: semantica/ directory

Good first issues: Add docstrings, type hints, or improve error messages


📝 Documentation

What you can do:

  • Fix typos and grammar errors
  • Improve clarity and readability
  • Add code examples and tutorials
  • Create new cookbook notebooks
  • Improve API documentation (docstrings)
  • Create troubleshooting guides
  • Update installation instructions
  • Add missing documentation

Where: README.md, docs/, cookbook/, docstrings in code

Good first issues: Fix typos, add examples, create cookbook tutorials, improve docstrings

Documentation formatting:

  • Use clear, concise language
  • Include code examples where helpful
  • Follow markdown best practices
  • Use proper headings hierarchy
  • Add links to related sections
  • Include screenshots for UI-related docs

🧪 Testing

What you can do:

  • Add unit tests
  • Improve test coverage
  • Add integration tests

Where: tests/ directory

Good first issues: Add tests for specific functions or classes


🐛 Bug Reports

What: Report bugs you find

How: Use the bug report template

Include: Description, steps to reproduce, expected vs actual behavior, environment details


💡 Feature Requests

What: Suggest new features or improvements

How: Use the feature request template

Include: Problem statement, proposed solution, use cases


🎨 Cookbook & Examples

What: Create tutorials and examples

Where: cookbook/ directory

Examples: Create new notebooks, add examples, improve existing tutorials


💬 Community Support

What: Help others in the community

Where: Discord, GitHub Discussions

Examples: Answer questions, review PRs, share your projects


🎓 Educational Content

What: Create educational materials

Examples: Blog posts, video tutorials, talks, workshops, case studies


🔧 Other Contributions

  • Design & Graphics: Logos, diagrams, visualizations
  • Tools & Integrations: CLI tools, integrations with other frameworks
  • Infrastructure: CI/CD improvements, Docker optimization
  • Security: Report security vulnerabilities (privately)

📋 Getting Started

1. Fork & Clone

First, fork Semantica on GitHub, then:

git clone https://github.com/your-username/semantica.git
cd semantica
git remote add upstream https://github.com/Hawksight-AI/semantica.git

2. Set Up Environment

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install dev dependencies
pip install -e ".[dev]"

# Install pre-commit hooks (optional)
pre-commit install

3. Create Branch

git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description

4. Make Changes

  • Follow code style (see below)
  • Add tests for new features
  • Update documentation

5. Run Checks

pytest                          # Run tests
black semantica/ tests/        # Format code
isort semantica/ tests/         # Sort imports
flake8 semantica/ tests/        # Lint

Or use pre-commit hooks: pre-commit run --all-files

6. Commit & Push

git commit -m "feat(module): add new feature"
git push origin feature/your-feature-name

Then create a pull request on GitHub!


📐 Code Style

We use automated tools:

Tool Purpose Command
Black Code formatting black semantica/ tests/
isort Import sorting isort semantica/ tests/
flake8 Style enforcement flake8 semantica/ tests/
mypy Type checking mypy semantica/

Run all: black semantica/ tests/ && isort semantica/ tests/ && flake8 semantica/ tests/ && mypy semantica/


🧪 Testing

pytest                          # Run all tests
pytest --cov=semantica         # With coverage
pytest tests/test_file.py      # Specific file

Coverage goal: 80% minimum, 90%+ for critical modules


📝 Commit Messages

Use Conventional Commits:

feat(kg): add temporal graph support
fix(parse): handle empty PDF files
docs(readme): add installation guide
test(extract): add unit tests

Types: feat, fix, docs, test, refactor, perf, style, chore


PR Checklist

Before submitting:

  • Code follows style guidelines
  • Tests pass locally
  • New tests added (if applicable)
  • Documentation updated
  • Commit messages follow conventions
  • No merge conflicts

📖 Documentation Standards

Code Documentation (Docstrings)

Format: Use Google-style docstrings

def extract_entities(text: str, model: str = "transformer") -> List[Entity]:
    """Extract named entities from text.
    
    Args:
        text: Input text to process
        model: NER model to use (default: "transformer")
    
    Returns:
        List of extracted Entity objects
    
    Raises:
        ValueError: If text is empty or model is invalid
    
    Example:
        >>> from semantica.semantic_extract import NERExtractor
        >>> ner = NERExtractor(method="ml", model="en_core_web_sm")
        >>> entities = ner.extract("Apple Inc. was founded in 1976.")
        >>> len(entities)
        2
    """

Markdown Documentation Formatting

General Guidelines:

  • Use clear headings (H1 for title, H2 for main sections, H3 for subsections)
  • Keep paragraphs short and focused
  • Use bullet points for lists
  • Add code blocks with syntax highlighting
  • Include links to related documentation

Code Blocks:

  • Use triple backticks with language identifier: ```python, ```bash
  • Include comments in code examples
  • Show expected output when helpful

Examples:

## Section Title

Brief introduction paragraph.

### Subsection

- Bullet point 1
- Bullet point 2

**Code example:**

```python
from semantica import SomeClass

instance = SomeClass()
result = instance.method()

Note: Additional context or warnings.


**Best Practices:**
- Start with an overview/introduction
- Use consistent terminology
- Include "See also" links
- Add examples for complex concepts
- Keep formatting consistent across docs

---

## 🆘 Getting Help

- 💬 [Discord](https://discord.gg/sV34vps5hH) - Real-time chat
- 💭 [GitHub Discussions](https://github.com/Hawksight-AI/semantica/discussions) - Q&A
- 🐛 [GitHub Issues](https://github.com/Hawksight-AI/semantica/issues) - Bug reports

**Before asking:** Check existing documentation, search issues/discussions, review cookbook examples

---

## 🏆 Recognition

All contributors are recognized in:
- [CONTRIBUTORS.md](CONTRIBUTORS.md)
- GitHub contributors page
- Release notes

We follow the [all-contributors](https://allcontributors.org) specification!

---

## 📜 Code of Conduct

This project follows a [Code of Conduct](CODE_OF_CONDUCT.md). Be respectful and inclusive.

---

## 📚 Resources

- [README.md](README.md) - Project overview
- [Cookbook](cookbook/) - Tutorials and examples
- [Documentation](docs/) - Comprehensive guides

---

**Thank you for contributing!** 🚀

Every contribution matters - whether it's a single line of code, a typo fix, a helpful answer, or a bug report. We appreciate you! 🙏

⭐ **Give us a Star** • 🍴 **[Fork Semantica](https://github.com/Hawksight-AI/semantica/fork)** • 💬 **Join our [Discord](https://discord.gg/sV34vps5hH)**