docs: add comprehensive CONTRIBUTING.md for GhostArmyIntel collaboration
Created detailed contributor guide including: **Join Process:** - Step-by-step onboarding (accept invite → clone → setup → contribute) - Current contributors: leetcrypt (admin), Ringmast4r (invited) - GhostArmyIntel organization integration options **Collaboration Workflows:** - Option 1: Transfer repo to GhostArmyIntel organization (recommended) - Option 2: Fork to organization (independent development) - Option 3: Direct collaborator access (current setup) **Development Guide:** - Codebase structure walkthrough - Git workflow (feature branches, PRs, commit conventions) - Testing procedures (unit tests, benchmarks) - Priority tasks from REAL_CAPTURE_ANALYSIS.md **Quick Start Tasks:** - Add missing protocols (Acurite 02077M, GE Doorbell, Holtek HT12X) - Implement decoded .sub file support (Priority 1 - fixes 45% failures) - Improve real signal robustness (packet segmentation, noise tolerance) **GhostArmyIntel Integration:** - Links to related projects (wardriving-converter, WiGLE-Vault, OUI-Master-Database) - Organization transfer instructions - Fork workflow for org-owned development Designed to onboard Ringmast4r and GhostArmyIntel team members with complete context on project status, architecture, and contribution paths. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+429
@@ -0,0 +1,429 @@
|
|||||||
|
# Contributing to GigLez - IoT RF Device Mapping Platform
|
||||||
|
|
||||||
|
**Welcome!** We're building a Wigle-style platform for Sub-GHz RF device mapping. This guide will help you join the project and start contributing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏛️ Project Overview
|
||||||
|
|
||||||
|
**GigLez** is an open-source crowdsourced platform for mapping IoT RF devices (300-928 MHz). Think "Wigle.net for garage doors, weather stations, and doorbells."
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- 6-component RF signature matching engine
|
||||||
|
- 299 protocol database (RTL_433 imported)
|
||||||
|
- GPS validation & privacy features
|
||||||
|
- Real-world benchmarking infrastructure
|
||||||
|
- Support for Flipper Zero, RTL-SDR, HackRF captures
|
||||||
|
|
||||||
|
**Current Status:**
|
||||||
|
- ✅ Core identification engine complete
|
||||||
|
- ✅ 56 unit tests passing
|
||||||
|
- ⚠️ 33% synthetic accuracy, 0% real-world (documented gap analysis)
|
||||||
|
- 📊 Benchmarking & calibration in progress
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 👥 Current Contributors
|
||||||
|
|
||||||
|
### Core Team
|
||||||
|
- **leetcrypt** - Repository owner, core developer (admin access)
|
||||||
|
- **Ringmast4r** - Invited collaborator (write access) - *Pending acceptance*
|
||||||
|
|
||||||
|
### Organizations
|
||||||
|
- **GhostArmyIntel** - Organization for wardriving & RF intelligence projects
|
||||||
|
- Projects: wardriving-converter, WiGLE-Vault, OUI-Master-Database
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 How to Join the Project
|
||||||
|
|
||||||
|
### Step 1: Accept Your Invitation
|
||||||
|
|
||||||
|
If you've been invited as a collaborator:
|
||||||
|
|
||||||
|
1. **Check your email** for invitation from GitHub
|
||||||
|
2. **Or visit:** https://github.com/notifications
|
||||||
|
3. **Accept the invitation** to join `leetcrypt/giglez`
|
||||||
|
4. You'll receive **write access** (push, pull, create branches/PRs)
|
||||||
|
|
||||||
|
**Pending Invitations:**
|
||||||
|
- Ringmast4r (invited 2026-02-16)
|
||||||
|
|
||||||
|
### Step 2: Clone the Repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repo
|
||||||
|
git clone https://github.com/leetcrypt/giglez.git
|
||||||
|
cd giglez
|
||||||
|
|
||||||
|
# Verify you have access
|
||||||
|
git remote -v
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Set Up Your Environment
|
||||||
|
|
||||||
|
#### Option A: Python Virtual Environment
|
||||||
|
```bash
|
||||||
|
# Create virtual environment
|
||||||
|
python3 -m venv venv
|
||||||
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||||
|
|
||||||
|
# Install dependencies (if requirements.txt exists)
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Run tests to verify setup
|
||||||
|
python -m pytest tests/ -v
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option B: Development with Existing Tools
|
||||||
|
If you already have Python 3.10+ and pytest:
|
||||||
|
```bash
|
||||||
|
# Just run the tests
|
||||||
|
cd /path/to/giglez
|
||||||
|
python -m pytest tests/ -v
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Understand the Codebase
|
||||||
|
|
||||||
|
**Key Directories:**
|
||||||
|
```
|
||||||
|
giglez/
|
||||||
|
├── src/
|
||||||
|
│ ├── matcher/ # RF device identification engine
|
||||||
|
│ │ ├── device_identifier.py # Unified API (iteration 6/6)
|
||||||
|
│ │ ├── pattern_decoder.py # Multi-factor scoring
|
||||||
|
│ │ ├── timing_analyzer.py # Pulse timing extraction
|
||||||
|
│ │ ├── preamble_detector.py # Sync pattern detection
|
||||||
|
│ │ ├── frequency_fingerprint.py # ISM band classification
|
||||||
|
│ │ ├── statistical_classifier.py # Bayesian scoring
|
||||||
|
│ │ └── protocol_database.py # 299 protocol signatures
|
||||||
|
│ ├── parser/
|
||||||
|
│ │ └── sub_parser.py # Flipper .sub file parser
|
||||||
|
│ └── gps/
|
||||||
|
│ └── validator.py # GPS validation & privacy
|
||||||
|
├── tests/
|
||||||
|
│ ├── unit/ # 56 unit tests
|
||||||
|
│ ├── benchmark/ # Synthetic signal testing
|
||||||
|
│ └── real_captures/ # Real Flipper Zero files
|
||||||
|
├── scripts/
|
||||||
|
│ ├── benchmark.py # Accuracy benchmarking
|
||||||
|
│ └── benchmark_real.py # Real-world testing
|
||||||
|
└── docs/
|
||||||
|
├── REAL_CAPTURE_ANALYSIS.md # 0% accuracy gap analysis
|
||||||
|
└── WARDRIVER_ONBOARDING.md # RF community survey
|
||||||
|
```
|
||||||
|
|
||||||
|
**Read First:**
|
||||||
|
1. `CLAUDE.md` - Project status & architecture
|
||||||
|
2. `docs/REAL_CAPTURE_ANALYSIS.md` - Critical findings on real-world performance
|
||||||
|
3. `docs/WARDRIVER_ONBOARDING.md` - Data format requirements
|
||||||
|
|
||||||
|
### Step 5: Make Your First Contribution
|
||||||
|
|
||||||
|
#### Quick Start Tasks (Good First Issues)
|
||||||
|
|
||||||
|
**1. Add Missing Protocols** (Priority 2 fix - 27% of failures)
|
||||||
|
- Add Acurite 02077M to protocol database
|
||||||
|
- Add GE Doorbell 19297
|
||||||
|
- Add Byron DB421E
|
||||||
|
- Add Holtek HT12X (fan/LED remotes)
|
||||||
|
|
||||||
|
**2. Test Real Captures**
|
||||||
|
- Download more real .sub files from UberGuidoZ/Flipper
|
||||||
|
- Run `scripts/benchmark_real.py`
|
||||||
|
- Document which protocols work/fail
|
||||||
|
|
||||||
|
**3. Improve Documentation**
|
||||||
|
- Add examples to CONTRIBUTING.md
|
||||||
|
- Create protocol database contribution guide
|
||||||
|
- Document how to add new signal types
|
||||||
|
|
||||||
|
**4. Fix Decoded .sub File Support** (Priority 1 fix - 45% of failures)
|
||||||
|
- Implement parser for decoded Flipper files
|
||||||
|
- Extract Protocol, Bit, Key, TE fields
|
||||||
|
- Match by protocol name + timing element
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Git Workflow
|
||||||
|
|
||||||
|
### Standard Development Workflow
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Create feature branch
|
||||||
|
git checkout -b feature/your-feature-name
|
||||||
|
|
||||||
|
# 2. Make changes and commit
|
||||||
|
git add .
|
||||||
|
git commit -m "feat: add Acurite 02077M protocol support"
|
||||||
|
|
||||||
|
# 3. Push to GitHub
|
||||||
|
git push origin feature/your-feature-name
|
||||||
|
|
||||||
|
# 4. Create Pull Request on GitHub
|
||||||
|
# Visit: https://github.com/leetcrypt/giglez/pulls
|
||||||
|
# Click "New Pull Request"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commit Message Convention
|
||||||
|
|
||||||
|
Follow conventional commits:
|
||||||
|
```
|
||||||
|
feat: add new protocol support for Holtek HT12X
|
||||||
|
fix: correct timing ratio calculation for Oregon Scientific
|
||||||
|
docs: update CONTRIBUTING.md with fork workflow
|
||||||
|
test: add unit tests for decoded .sub file parsing
|
||||||
|
refactor: optimize preamble detection algorithm
|
||||||
|
```
|
||||||
|
|
||||||
|
### Branch Naming
|
||||||
|
|
||||||
|
- `feature/protocol-xyz` - New protocol additions
|
||||||
|
- `fix/timing-accuracy` - Bug fixes
|
||||||
|
- `docs/contributing-guide` - Documentation
|
||||||
|
- `test/real-captures` - Test improvements
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ For GhostArmyIntel Organization
|
||||||
|
|
||||||
|
### Option 1: Transfer Repository to Organization (Recommended)
|
||||||
|
|
||||||
|
**Requires:** GhostArmyIntel organization admin to accept transfer
|
||||||
|
|
||||||
|
**Process:**
|
||||||
|
1. Repository owner (leetcrypt) initiates transfer:
|
||||||
|
```bash
|
||||||
|
gh api -X POST /repos/leetcrypt/giglez/transfer \
|
||||||
|
-f new_owner=GhostArmyIntel
|
||||||
|
```
|
||||||
|
|
||||||
|
2. GhostArmyIntel org admin accepts transfer at:
|
||||||
|
https://github.com/settings/repositories
|
||||||
|
|
||||||
|
3. Repository becomes: `GhostArmyIntel/giglez`
|
||||||
|
|
||||||
|
4. leetcrypt is re-added as collaborator
|
||||||
|
|
||||||
|
**Pros:**
|
||||||
|
- Organization owns the repo
|
||||||
|
- Professional branding
|
||||||
|
- Team can manage collaborators
|
||||||
|
- Fits with wardriving-converter, WiGLE-Vault projects
|
||||||
|
|
||||||
|
**Cons:**
|
||||||
|
- Requires org admin permission
|
||||||
|
- URL changes (redirect is automatic)
|
||||||
|
|
||||||
|
### Option 2: Fork to Organization
|
||||||
|
|
||||||
|
**Process:**
|
||||||
|
1. GhostArmyIntel member visits: https://github.com/leetcrypt/giglez
|
||||||
|
2. Click "Fork" button
|
||||||
|
3. Select "GhostArmyIntel" as owner
|
||||||
|
4. Fork created at: `GhostArmyIntel/giglez`
|
||||||
|
|
||||||
|
**Workflow:**
|
||||||
|
```bash
|
||||||
|
# Clone the fork
|
||||||
|
git clone https://github.com/GhostArmyIntel/giglez.git
|
||||||
|
cd giglez
|
||||||
|
|
||||||
|
# Add upstream remote (original repo)
|
||||||
|
git remote add upstream https://github.com/leetcrypt/giglez.git
|
||||||
|
|
||||||
|
# Sync with upstream
|
||||||
|
git fetch upstream
|
||||||
|
git merge upstream/main
|
||||||
|
```
|
||||||
|
|
||||||
|
**Pros:**
|
||||||
|
- Independent development
|
||||||
|
- Can create org-specific features
|
||||||
|
- Proper fork relationship
|
||||||
|
|
||||||
|
**Cons:**
|
||||||
|
- Two separate repositories
|
||||||
|
- Need to sync regularly
|
||||||
|
|
||||||
|
### Option 3: Collaborator Access (Current Setup)
|
||||||
|
|
||||||
|
**Process:**
|
||||||
|
1. Ringmast4r accepts invitation to leetcrypt/giglez
|
||||||
|
2. Works directly on shared repository
|
||||||
|
3. Creates branches and PRs
|
||||||
|
|
||||||
|
**Pros:**
|
||||||
|
- Simple, immediate access
|
||||||
|
- Single source of truth
|
||||||
|
|
||||||
|
**Cons:**
|
||||||
|
- Not under GhostArmyIntel organization
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Current Priority Tasks
|
||||||
|
|
||||||
|
Based on `docs/REAL_CAPTURE_ANALYSIS.md`:
|
||||||
|
|
||||||
|
### Priority 1: Decoded .sub File Support (Fixes 45% of failures)
|
||||||
|
**Impact:** 5/11 real captures failed because they're decoded, not RAW
|
||||||
|
|
||||||
|
**Task:**
|
||||||
|
```python
|
||||||
|
# Implement in src/parser/sub_parser.py
|
||||||
|
def parse_decoded_sub_file(filepath):
|
||||||
|
"""Parse decoded Flipper .sub files"""
|
||||||
|
# Extract: Protocol, Bit, Key, TE
|
||||||
|
# Match by protocol name + timing element
|
||||||
|
# Return SignalMetadata with is_decoded=True
|
||||||
|
```
|
||||||
|
|
||||||
|
### Priority 2: Add Missing Protocols (Fixes 27% of failures)
|
||||||
|
**Needed:**
|
||||||
|
- Acurite 02077M (weather station)
|
||||||
|
- GE Doorbell 19297
|
||||||
|
- Byron DB421E
|
||||||
|
- Holtek HT12X (LED/fan remotes)
|
||||||
|
- LiftMaster (generic 433 MHz)
|
||||||
|
|
||||||
|
**Task:**
|
||||||
|
Add to `src/matcher/protocol_database.py`:
|
||||||
|
```python
|
||||||
|
Protocol(
|
||||||
|
name="Acurite 02077M",
|
||||||
|
category="weather_sensor",
|
||||||
|
frequency=433920000,
|
||||||
|
short_pulse_us=1000,
|
||||||
|
long_pulse_us=2000,
|
||||||
|
# ... etc
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Priority 3: Improve Real Signal Robustness (Fixes 27% of failures)
|
||||||
|
**Issues:**
|
||||||
|
- Multi-packet transmissions (131 pulses vs 40 bits)
|
||||||
|
- Signal noise beyond 15% tolerance
|
||||||
|
|
||||||
|
**Tasks:**
|
||||||
|
- Implement packet segmentation
|
||||||
|
- Increase jitter tolerance from 15% → 25%
|
||||||
|
- Add repetition detection
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Testing Your Changes
|
||||||
|
|
||||||
|
### Run All Tests
|
||||||
|
```bash
|
||||||
|
# All unit tests
|
||||||
|
pytest tests/ -v
|
||||||
|
|
||||||
|
# Specific test file
|
||||||
|
pytest tests/unit/test_timing_analyzer.py -v
|
||||||
|
|
||||||
|
# With coverage
|
||||||
|
pytest tests/ --cov=src --cov-report=html
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run Benchmarks
|
||||||
|
```bash
|
||||||
|
# Synthetic signal benchmark
|
||||||
|
python scripts/benchmark.py
|
||||||
|
|
||||||
|
# Real-world captures benchmark
|
||||||
|
python scripts/benchmark_real.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Expected Output
|
||||||
|
```
|
||||||
|
REAL-WORLD BENCHMARK SUMMARY
|
||||||
|
═══════════════════════════════
|
||||||
|
Total Tests: 11
|
||||||
|
|
||||||
|
TOP-K ACCURACY:
|
||||||
|
Top-1: 0.0% (0/11) # Target: improve this!
|
||||||
|
Top-3: 0.0% (0/11)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Communication & Coordination
|
||||||
|
|
||||||
|
### GitHub Discussions
|
||||||
|
Use GitHub Issues for:
|
||||||
|
- Bug reports
|
||||||
|
- Feature requests
|
||||||
|
- Protocol addition proposals
|
||||||
|
- Questions about implementation
|
||||||
|
|
||||||
|
### Pull Request Reviews
|
||||||
|
- Tag @leetcrypt for code review
|
||||||
|
- Tag @Ringmast4r for wardriving expertise
|
||||||
|
- Wait for approval before merging
|
||||||
|
|
||||||
|
### Project Board (Coming Soon)
|
||||||
|
Track work on GitHub Projects:
|
||||||
|
- To Do: Priority tasks from REAL_CAPTURE_ANALYSIS.md
|
||||||
|
- In Progress: Current work
|
||||||
|
- Done: Completed features
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Long-Term Vision
|
||||||
|
|
||||||
|
### Phase 1 (Current): Core Identification Engine
|
||||||
|
- ✅ Multi-factor scoring
|
||||||
|
- ✅ Protocol database (299 protocols)
|
||||||
|
- ⚠️ Real-world accuracy (in progress)
|
||||||
|
|
||||||
|
### Phase 2: Web Platform
|
||||||
|
- Upload interface (drag .sub files + GPS)
|
||||||
|
- Interactive map (Leaflet.js)
|
||||||
|
- Device database browser
|
||||||
|
|
||||||
|
### Phase 3: Community Features
|
||||||
|
- Manual device ID submission
|
||||||
|
- Photo uploads
|
||||||
|
- Voting/verification system
|
||||||
|
- Leaderboards
|
||||||
|
|
||||||
|
### Phase 4: Multi-Format Support
|
||||||
|
- rtl_433 JSON import
|
||||||
|
- URH .complex files
|
||||||
|
- GPX track parsing
|
||||||
|
- Batch upload API
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
MIT License - See LICENSE file
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 Code of Conduct
|
||||||
|
|
||||||
|
- Be respectful and professional
|
||||||
|
- Provide constructive feedback
|
||||||
|
- Help newcomers learn
|
||||||
|
- Document your changes
|
||||||
|
- Test before pushing
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ Questions?
|
||||||
|
|
||||||
|
**GitHub Issues:** https://github.com/leetcrypt/giglez/issues
|
||||||
|
**Repository:** https://github.com/leetcrypt/giglez
|
||||||
|
|
||||||
|
**Related GhostArmyIntel Projects:**
|
||||||
|
- wardriving-converter: https://github.com/GhostArmyIntel/wardriving-converter
|
||||||
|
- WiGLE-Vault: https://github.com/GhostArmyIntel/WiGLE-Vault
|
||||||
|
- OUI-Master-Database: https://github.com/GhostArmyIntel/OUI-Master-Database
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*"A Ringmast4r project honoring the WWII Ghost Army — blending art, code, and strategy into modern open-source signalcraft."*
|
||||||
|
|
||||||
|
**Last Updated:** 2026-02-16
|
||||||
Reference in New Issue
Block a user