This document specifies the operational architecture, community governance, issue workflows, and automated AI review systems configured for the AirTell GitHub repository.
- Governance & Repository Ownership
- Community Discussions Architecture
- Issue Templates & Triage Engine
- AI Code Review System (Gemini 4 Argon & Antigravity SDK)
- Release Automation (Release Please)
- Repository File Map
Repository ownership is declared globally via .github/CODEOWNERS to enforce architectural integrity across low-level CC2652 firmware bridges, UART line protocols, and side-channel analytics:
# Global repository owner: applies to all files across the entire codebase
* @ncouture
- Automatic Review Assignment: Any Pull Request modifying files in the repository automatically requests a review from
@ncouture. - Branch Protection Alignment: Paired with branch protection on
mainrequiring approved reviews from designated Code Owners before merging. - Workflow Authorization Gate: Serves as the authoritative source of truth for triggering automated AI code reviews.
AirTell uses GitHub Discussions as an open RF salon and research exchange to segregate open-ended signal analysis from reproducible codebase defects. Full maintainer protocols and the pinned welcome post are documented in .github/DISCUSSIONS.md.
- 🎙️ RF Tradecraft & Signal Forensics: Timing side-channels, clock drift, Apple Continuity / Google Fast Pair reverse-engineering, and sanitized
.pcapteardowns. - 🛠️ Hardware Rigs & Testbed Engineering: CC2652 dongle flashing, LaunchPad / Sonoff antennas, attenuation, and
VirtualRadioBusmock harnesses. - ⚔️ Red Team Tradecraft & Stimulus Chains: Active
SCAN_REQstimulus timing, persistence across MAC rotation intervals, and physical perimeter tracking. - 🛡️ Risk, Governance & Privacy Engineering: Fleet privacy posture evaluations, empirical tracking benchmarks, and sensitive facility threat modeling.
- 💡 Ideas, Feature Requests & Wild Experiments: Protocol extensions, Wireshark dissectors, and Streamlit visualization ideas.
- Issues are for Bugs: Hardware desyncs, UART buffer underruns, packet parsing panics, and CI testbed failures.
- Convert Questions to Discussions: Maintainers convert issues labeled
question,research, orhardware-riginto Discussions rather than closing them.
Issue creation is governed by GitHub Issue Forms located in .github/ISSUE_TEMPLATE/:
1. Template Chooser (config.yml)
blank_issues_enabled: false: Disables unstructured issues to guarantee all submissions include essential RF/testbed telemetry.- Discussions Link: Directly routes general questions, PCAP sharing, and hardware showcases to GitHub Discussions.
- Security Vulnerability Link: Points security researchers to GitHub Private Vulnerability Reporting (
/security/advisories/new).
2. Bug Report Form (bug_report.yml)
Enforces mandatory collection of critical environmental telemetry:
- Operating Topology: Dropdown selection (Topology A, Topology B, Topology C, CLI Side-Channel, UI Dashboard, or
VirtualRadioBus). - Hardware Dongles & Firmware: CC2652 model, USB ports, and Sniffle firmware versions (e.g., CC2652P on
/dev/ttyUSB0with Sniffle v1.10.0). - Environment: OS and Python versions.
- Reproduction Steps: Exact CLI commands and arguments.
- Logs / Captures: Code-formatted blocks for stack traces and Wireshark errors.
3. Feature Request Form (feature_request.yml)
Requires contributors to articulate the research motivation, technical proposal, and alternative implementations considered.
AirTell deploys a specialized, automated code review agent built on the Google Antigravity SDK (google-antigravity) and powered by Gemini 4 Argon with High Thinking.
PR Event or Comment Trigger
│
▼
┌───────────────────────────────────────────┐
│ .github/workflows/code-review.yml │
│ Tier 1: Actor Check (github.actor) │
│ Resolve: PR_AUTHOR & REQUESTER │
└─────────────────────┬─────────────────────┘
│
▼
┌───────────────────────────────────────────┐
│ scripts/code_review.py │
│ Tier 2: --verify-codeowners-only │
│ Codeowner Authorization Check │
└─────────────────────┬─────────────────────┘
│
┌────────────────────────┴────────────────────────┐
▼ ▼
❌ Unauthorized ✅ Authorized
(Requester not in CODEOWNERS (Requester in .github/CODEOWNERS;
or empty PR author) PR author: codeowner or community)
│ │
- Abort execution immediately - Load NotebookLM Research Context
- Post policy warning to PR - Execute Gemini 4 Argon (Thinking=High)
- Post Review Report to PR & Step Summary
The review protocol is codified in .github/skills/code-review/SKILL.md and targets five core dimensions:
- Link Layer & Serial Protocol Rigor: CC2652 UART buffer flow control (2,000,000 baud), sync word detection, and FIFO buffer overflow protection during dense BLE bursts.
- Side-Channel & Timing Integrity: Microsecond precision hardware timestamp preservation (1 µs timer counters), zero-allocation hot loops, and jitter calculation stability.
- Multi-Radio Topologies: Cross-dongle clock synchronization and link-layer state tracking across Topology A, B, C, and
VirtualRadioBusmock fidelity. - Zero-Panic Parsers: Defense against hostile, fuzzed over-the-air BLE PDUs and proprietary beacons (Apple Continuity, Google Fast Pair, SmartTags).
- Code Hygiene: Modern Python (>=3.10) typing, Pydantic v2 schemas, and Ruff linting rules (
E,F,W,I).
The code reviewer is grounded in the authoritative AirTell Research NotebookLM Workspace ("AirTell Intel: 259 PoPETs + 2018 to 2026 Bluetooth related PDFs").
- Dual-Tier Knowledge Loading: In addition to web URL grounding,
scripts/code_review.pyautomatically ingestsdocs/AirTell-PoPETs.md(the synchronized offline research index of all 259 papers) directly into the agent context. - Empirical Validation: Reviews cross-reference link-layer heuristics, timing side-channels, and active stimulus patterns against empirical privacy research standards.
To prevent abuse of high-thinking reasoning compute while supporting open-source community contributions, workflow execution and automated reviews are strictly protected by a dual-tier authorization model:
- Tier 1 (Workflow Trigger Gate): In
.github/workflows/code-review.yml, a job-levelif:condition requires(github.actor == 'ncouture' || github.triggering_actor == 'ncouture'). Non-codeowners cannot allocate GitHub Actions runner instances or execute workflows. - Tier 2 (Runner Codeowner Verification Gate): In
scripts/code_review.py,verify_codeowner_authorizationvalidates that the review requester is a verified repository codeowner listed in.github/CODEOWNERS. Codeowners can authorize and trigger automated code reviews on pull requests authored by external community contributors as well as internal codeowners.
If review requester authorization fails or the PR author is missing, scripts/code_review.py terminates immediately with exit code 1 and posts an explanatory policy notice to the PR, ensuring zero LLM API calls are dispatched.
The GitHub Actions workflow at .github/workflows/code-review.yml supports four on-demand trigger mechanisms:
- ChatOps Comment: A codeowner comments
/review,/code-review, or/ai-reviewon a PR (issue_comment: [created]). - Review Requested: A codeowner clicks "Request review" in the GitHub PR interface (
pull_request: [review_requested]). - Label Added: A codeowner adds the label
code-review,ai-review, orreviewto the PR (pull_request: [labeled]). - Manual Dispatch: A codeowner triggers the workflow via
workflow_dispatchspecifying thepr_number.
Developers and codeowners can run the AI code review runner locally on their development machines:
# Review uncommitted staged changes
python scripts/code_review.py --staged
# Review local branch against origin/main and write output to a file
python scripts/code_review.py --base origin/main --output review.md
# Enforce codeowner policy locally (authorized on community PRs)
python scripts/code_review.py \
--base origin/main \
--enforce-codeowners \
--pr-author "community-contributor" \
--requester "ncouture"AirTell automates semantic versioning, changelog generation, and GitHub releases using Google Release Please Action (googleapis/release-please-action@v5) with manifest-driven configuration.
Merge to main or Manual Dispatch
│
▼
┌───────────────────────────────────────────┐
│ .github/workflows/release-please.yml │
│ Tier 1: Actor Check (github.actor) │
└─────────────────────┬─────────────────────┘
│
▼
┌───────────────────────────────────────────┐
│ Runner: Tier 2 Codeowner Verification │
│ Dynamic .github/CODEOWNERS parsing │
└─────────────────────┬─────────────────────┘
│
┌────────┴────────┐
▼ ▼
❌ Unauthorized ✅ Authorized
(Halt runner) (Execute release-please)
│
▼
┌───────────────────┐
│ Release Please v5 │
│ Manifest Strategy │
└───────────────────┘
Release configuration and version tracking are maintained via root manifest files:
release-please-config.json: Configured for Python packageairtell, updatingpyproject.tomlandsrc/airtell/__init__.py. Configured withbump-minor-pre-major: trueandbump-patch-for-minor-pre-major: falsefor pre-1.0 semantic versioning..release-please-manifest.json: Tracks the current released version (0.2.0).
In strict compliance with repository security governance, release automation enforces defense-in-depth codeowner restriction:
- Tier 1 (Job-Level Trigger Gate): Evaluated before runner allocation:
Ensures non-codeowners cannot allocate runners or trigger release workflows.
if: github.actor == 'ncouture' || github.triggering_actor == 'ncouture'
- Tier 2 (Runner-Level Codeowner Gate): The step
Authorize Codeowner Executionparses.github/CODEOWNERSdirectly on the runner to dynamically verify the triggering actor prior to invokinggoogleapis/release-please-action@v5.
Configured in .github/workflows/release-please.yml:
- Triggers: Runs on
pushtomainand manualworkflow_dispatch. - Runner & Runtime: Pinned to
runs-on: ubuntu-24.04using Node.js 24 native actions (actions/checkout@v6andgoogleapis/release-please-action@v5). - Permissions: Requires
contents: write(to create tags and releases),issues: write(to manageautoreleaselabels), andpull-requests: write(to manage release pull requests), paired with repository workflow permissioncan_approve_pull_request_reviews: true. - Concurrency: Governed by
group: release-please-${{ github.ref }}withcancel-in-progress: falseto ensure in-flight release tasks are not aborted prematurely.
.github/
├── CODEOWNERS # Repository code ownership (* @ncouture)
├── DISCUSSIONS.md # Discussions welcome post & maintainer guidelines
├── ISSUE_TEMPLATE/
│ ├── bug_report.yml # Structured bug report issue form
│ ├── config.yml # Template chooser configuration & discussion links
│ └── feature_request.yml # Feature & protocol enhancement issue form
├── skills/
│ └── code-review/
│ └── SKILL.md # Gemini 3.8 Flash (Thinking=High) AirTell review skill
└── workflows/
├── code-review.yml # CI/CD automated review workflow with codeowner gates
└── release-please.yml # Semantic release and changelog automation workflow
scripts/
└── code_review.py # Antigravity SDK review runner (symlinked to src/airtell/scripts/)
tests/
└── test_codeowner_enforcement.py # Unit test suite verifying codeowner authorization policies
release-please-config.json # Release Please manifest configuration (package airtell)
.release-please-manifest.json # Release Please version tracker (0.2.0)