Thank you for your interest in contributing to feedback-o-tron!
This project follows the Hyperpolymath RSR 2026 language standard. Before contributing, review the allowed and banned languages in CLAUDE.md.
Allowed:
-
Elixir — primary application code (all
elixir-mcp/modules) -
Zig — FFI bridge (
ffi/zig/) -
Rust — performance-critical components
-
Bash/POSIX Shell — scripts and automation
-
Julia — statistics (
julia-stats/)
Banned: TypeScript, Node.js, npm, Python, Go, Java, Kotlin, Swift. See CLAUDE.md for the full list and rationale.
-
Elixir >= 1.15 with OTP >= 26
-
Zig (for FFI development)
-
Nix or Guix (optional, for reproducible environments)
-
Run
mix formatbefore committing — CI enforces formatting -
Follow existing patterns in the codebase
-
All channel adapters must implement the
FeedbackATron.Channelbehaviour -
All transports must be encrypted (HTTPS, NNTPS, SMTPS, Matrix)
-
No MD5 or SHA1 for security purposes (use SHA-256+)
-
HTTPS only — no plaintext HTTP URLs
-
No hardcoded secrets or credentials
-
All dependencies must be SHA-pinned
-
SPDX license headers on all source files
Use the structured error types in FeedbackATron.Error:
-
AuthenticationError— credential failures -
RateLimitError— platform rate limits -
NetworkError— connectivity issues -
ValidationError— bad input -
PlatformError— unexpected API responses
-
Create
lib/feedback_a_tron/channels/your_platform.ex -
Implement
@behaviour FeedbackATron.Channel -
Add the platform to
Channel.registry/0 -
Add credential loading to
Credentials -
Add rate limit config to
RateLimiter -
Add tests in
test/ -
Update the CLI help text
See TOPOLOGY.md for the full architecture diagram.
Key modules:
-
Submitter— orchestrates multi-platform submission with retry and rate limiting -
Channel— behaviour and registry for platform adapters -
Deduplicator— fuzzy matching to prevent duplicate filings -
RateLimiter— per-platform token bucket rate limiting -
Retry— exponential backoff for transient failures -
AuditLog— JSON-lines audit trail -
NetworkVerifier— pre/post-submission network safety checks -
Credentials— multi-source credential loading with rotation
All contributions must be licensed under PMPL-1.0-or-later. Add the SPDX header to all new files:
# SPDX-License-Identifier: PMPL-1.0-or-later