Files
RuView/wifi-veil/CONTRIBUTING.md
Claude e2ffecde9a ci(wifi-veil): add honesty / anti-slop guard
Add scripts/ci-guard.sh and a `guard` CI job that statically enforce the
project's honesty invariants so they cannot silently regress:

- no telemetry (.claude-flow/), build artifacts, lockfile, or scratch/probe
  files committed;
- no debug / mock-probe / slop markers in source
  (panic!("probe...), dbg!, println!("DEBUG, TODO(ai), LOREM IPSUM, ...);
- the SYNTHETIC evidence label present on every firmware provider README, and
  the "never jamming" compliance disclaimer present in the root + firmware READMEs;
- no dishonest hardware-validation claims — honest negated / TODO(hw) /
  build-only mentions are explicitly allowed (negation-aware);
- no stale monorepo crate/harness identifiers in the code/manifest surface.

Scans only git-tracked files under the tree, so it works both in-monorepo and
in the extracted standalone repo, and never trips on untracked local scratch or
target/. Documented in CONTRIBUTING.md; passes clean on the current tree.

Co-Authored-By: claude-flow <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01WEXNqzs7UsfNFBcP5yW21p
2026-08-09 17:20:03 +00:00

2.3 KiB

Contributing to WiFi Veil

Thanks for your interest. WiFi Veil is a privacy-defense project with a strict honesty and safety contract — please read this before opening a PR.

Non-negotiable rules

  • Compliant waveform controls only — never jamming. Do not add, suggest, or scaffold interference-based "defenses." Every control must shape the node's own standards-conformant emission and preserve its energy.
  • Never present WiFi sensing as camera-grade. Accuracy/defense statements must be tagged SYNTHETIC, CLAIMED, or MEASURED. A number is only MEASURED with a reproducer; hardware claims require a captured real-silicon log. Everything in this repo today is SYNTHETIC / L0.
  • The proof witness is load-bearing. The default scene is pinned by a deterministic FNV-1a witness (src/proof.rs). If a change intentionally moves it, re-pin the constant in the same PR and explain why; an accidental change is a failing test, not a witness to bump.

Development

The Rust crate is dependency-free and builds offline.

cargo test                        # 43 tests + the pinned witness
cargo clippy --all-targets -- -D warnings
cargo fmt --check
cargo build --lib --target wasm32-unknown-unknown   # WASM leaf must stay green

cd firmware/core && make test     # portable C core host test
node harness/bin/cli.js guidance --topic overview   # harness (dependency-free)

Run the honesty / anti-slop guard before pushing (CI runs it too):

bash scripts/ci-guard.sh

It statically enforces the invariants that keep this project honest: no telemetry / build artifacts / lockfile / scratch files committed; no debug or mock-probe markers in source; the SYNTHETIC evidence label present on every firmware provider README; the "never jamming" compliance disclaimer present; no dishonest hardware-validation claims (honest negated/TODO(hw) mentions are fine); and no stale monorepo identifiers in the code surface.

CI (.github/workflows/ci.yml) runs the same gates. Keep changes the smallest coherent unit, read before editing, and never commit telemetry (.claude-flow/), build artifacts, credentials, or CSI/person data.

Architecture decisions

Substantive design changes should reference or add an ADR under docs/adr/. Treat source, tests, and accepted ADRs as authoritative over comments and generated text.