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

56 lines
2.3 KiB
Markdown

# 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.
```bash
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
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/`](docs/adr/). Treat source, tests, and accepted ADRs as
authoritative over comments and generated text.