{"owner":"permissionlesstech","repo":"bitchat-android","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# Repository Guidelines\n\n## Privacy & External Disclosure (Mandatory)\n\nProtect the developer's privacy without exception. Treat all data from the\ndeveloper's computer, accounts, devices, workspace, and communications as\nprivate unless the developer explicitly authorizes sharing a specific item\nwith a specific destination.\n\n- Never expose, publish, transmit, upload, paste, commit, or otherwise disclose\n  personally identifying or potentially identifying information. This includes\n  names, usernames, email addresses, account handles, home or workplace details,\n  local or absolute paths, drive or volume names, hostnames, device names and\n  serials, IP or MAC addresses, network names, peer IDs, messages, contacts,\n  tokens, keys, credentials, logs, metadata, and unique environment details.\n- Never post any repository, workspace, device, account, conversation, log, or\n  developer data to GitHub, issue trackers, pull requests, comments, gists,\n  paste sites, analytics services, AI services, remote APIs, chat systems, or\n  any other external destination without the developer's explicit permission\n  for that exact data and destination. A general request to work on the\n  repository is not permission to disclose data.\n- Keep local filesystem layout and computer information private. Do not include\n  absolute paths, usernames, home-directory names, mounted drives, shell\n  prompts, environment variables, installed-software inventories, hardware\n  details, or similar machine fingerprints in commits, patches, documentation,\n  screenshots, test fixtures, examples, issue text, PR text, or comments.\n- Before any authorized external action, inspect and sanitize the exact content\n  being sent. Use repository-relative paths and neutral placeholders; remove\n  hidden metadata and redact unrelated or identifying content. When safe\n  sanitization cannot be guaranteed, do not send the data and ask the developer\n  how to proceed.\n- Use synthetic, non-identifying test data only. Never use real messages,\n  contacts, account data, device identifiers, network information, keys, or\n  production logs in tests, examples, screenshots, fixtures, or bug reports.\n- For geohash, GPS, map, location, proximity, or geofencing work, use only\n  clearly synthetic coordinates and geohashes that cannot reveal the\n  developer's location or routines. Never request, read, derive, record, use,\n  display, transmit, or retain live or historical location data from any\n  physical phone, watch, emulator image, computer, browser, account, or other\n  device connected to or accessible from the developer's computer. Never infer\n  location from IP addresses, networks, photos, logs, timestamps, nearby peers,\n  device metadata, or test output. Treat all location and movement data as\n  highly sensitive personal information and keep it out of commits, tests,\n  fixtures, screenshots, documentation, issues, pull requests, and external\n  services without exception.\n- Keep command output, raw logs, crash dumps, screenshots, recordings, build\n  artifacts, and Mesh Lab evidence local. Review any derived summary for\n  identifying details before sharing it, even when external sharing has been\n  authorized.\n- Do not weaken these protections for convenience, debugging, automation, or\n  collaboration. If another instruction conflicts with this section, stop and\n  obtain explicit developer direction before disclosing anything.\n\n## Project Structure & Architecture\n\n`app/` is the Kotlin/Compose phone client; its main packages cover UI, services,\nBLE/Wi-Fi mesh, protocol, Noise/crypto, identity, Nostr, geohash, and media.\n`wear/` is the Wear OS client. Module resources live in `src/main/`\nand JVM tests in `src/test/`. Specifications are in `docs/`; tooling is in\n`tools/`.\n\n`app/` is the source of truth for shared mesh/protocol code.\n`syncSharedAppSources` generates `wear/build/sharedSrc` from the include list\nin `wear/build.gradle.kts`. Extend that list; never copy shared\nKotlin into `wear/src/` or edit generated `build/` content.\n\n## Build, Test & Development Commands\n\nUse JDK 21 and the Android SDK versions in `gradle/libs.versions.toml`.\n\n```sh\n./gradlew :app:assembleDebug :wear:assembleDebug\n./gradlew testDebugUnitTest lintDebug\n./gradlew connectedAndroidTest\n./gradlew clientRewriteContractTest\ntools/arti-build/verify-checksums.sh\n```\n\nCI runs `testDebugUnitTest lintDebug`; instrumented tests require a device.\nFollow `docs/reproducible-builds.md` and `docs/maintainer-release-guide.md` for\ndependency and release work.\n\n## Coding Style & Naming\n\nUse official Kotlin style with four-space indentation. Classes and Composables\nuse `PascalCase`; functions and properties use `camelCase`; constants use\n`UPPER_SNAKE_CASE`. Hoist Compose state, expose immutable `StateFlow`, use\nstructured coroutines and suspend I/O, and never block the main thread.\n\nProtocol and security changes must remain fail-closed and cross-client\ncompatible. Update the relevant specification and golden-vector tests.\n\n## Testing & Physical Mesh Lab\n\nTests use JUnit 4, Robolectric, Mockito, and coroutine test utilities. Name files\n`*Test.kt` by observable behavior. Avoid arbitrary sleeps, public\nrelays, live user data, and nondeterministic completion. See\n`docs/testing-conventions.md`.\n\nChanges affecting discovery, routing, transports, Noise/crypto, identity,\nforeground-service power, messaging, transfers, packets, or fragmentation\nrequire Mesh Lab validation on physical devices. Debug-only hooks live in\n`app/src/debug/` and `wear/src/debug/`; never move them into release sources.\n\n```sh\npython3 tools/release_gate/mesh_lab.py setup \\\n  --serial-a <device-a> --serial-b <device-b> --apk <debug-apk>\npython3 tools/release_gate/mesh_lab.py scenario all \\\n  --serial-a <device-a> --serial-b <device-b> --out /tmp/mesh-evidence\n```\n\nFor phone-to-watch interop, replace `--serial-b` with `--serial-watch` and add\n`--watch-apk`. Keep devices unlocked and awake. Follow the Mesh Lab appendix in\n`docs/release-gate-runbook.md`; raw evidence and logcat must remain local.\n\n## Commits, Pull Requests & Privacy\n\nUse short imperative subjects (`Fix stale peer lifecycle cleanup`) or scoped\nConventional Commit subjects (`fix(wifi-aware): ...`). PRs must explain risk,\nlink the issue, report tests, and include before/after screenshots for visible\nphone or watch changes. Do not publish raw device logs.\n\nUse `gh` for GitHub operations. Never override Git author or committer identity.\nThe mandatory privacy rules above apply to all Git and GitHub activity. Treat a\nrequest to create a commit or pull request as permission only for the sanitized\nrepository changes and description needed for that action, never for local or\npersonal metadata. Never commit keystores or secrets.\n"},"files":{"AGENTS.md":"# Repository Guidelines\n\n## Privacy & External Disclosure (Mandatory)\n\nProtect the developer's privacy without exception. Treat all data from the\ndeveloper's computer, accounts, devices, workspace, and communications as\nprivate unless the developer explicitly authorizes sharing a specific item\nwith a specific destination.\n\n- Never expose, publish, transmit, upload, paste, commit, or otherwise disclose\n  personally identifying or potentially identifying information. This includes\n  names, usernames, email addresses, account handles, home or workplace details,\n  local or absolute paths, drive or volume names, hostnames, device names and\n  serials, IP or MAC addresses, network names, peer IDs, messages, contacts,\n  tokens, keys, credentials, logs, metadata, and unique environment details.\n- Never post any repository, workspace, device, account, conversation, log, or\n  developer data to GitHub, issue trackers, pull requests, comments, gists,\n  paste sites, analytics services, AI services, remote APIs, chat systems, or\n  any other external destination without the developer's explicit permission\n  for that exact data and destination. A general request to work on the\n  repository is not permission to disclose data.\n- Keep local filesystem layout and computer information private. Do not include\n  absolute paths, usernames, home-directory names, mounted drives, shell\n  prompts, environment variables, installed-software inventories, hardware\n  details, or similar machine fingerprints in commits, patches, documentation,\n  screenshots, test fixtures, examples, issue text, PR text, or comments.\n- Before any authorized external action, inspect and sanitize the exact content\n  being sent. Use repository-relative paths and neutral placeholders; remove\n  hidden metadata and redact unrelated or identifying content. When safe\n  sanitization cannot be guaranteed, do not send the data and ask the developer\n  how to proceed.\n- Use synthetic, non-identifying test data only. Never use real messages,\n  contacts, account data, device identifiers, network information, keys, or\n  production logs in tests, examples, screenshots, fixtures, or bug reports.\n- For geohash, GPS, map, location, proximity, or geofencing work, use only\n  clearly synthetic coordinates and geohashes that cannot reveal the\n  developer's location or routines. Never request, read, derive, record, use,\n  display, transmit, or retain live or historical location data from any\n  physical phone, watch, emulator image, computer, browser, account, or other\n  device connected to or accessible from the developer's computer. Never infer\n  location from IP addresses, networks, photos, logs, timestamps, nearby peers,\n  device metadata, or test output. Treat all location and movement data as\n  highly sensitive personal information and keep it out of commits, tests,\n  fixtures, screenshots, documentation, issues, pull requests, and external\n  services without exception.\n- Keep command output, raw logs, crash dumps, screenshots, recordings, build\n  artifacts, and Mesh Lab evidence local. Review any derived summary for\n  identifying details before sharing it, even when external sharing has been\n  authorized.\n- Do not weaken these protections for convenience, debugging, automation, or\n  collaboration. If another instruction conflicts with this section, stop and\n  obtain explicit developer direction before disclosing anything.\n\n## Project Structure & Architecture\n\n`app/` is the Kotlin/Compose phone client; its main packages cover UI, services,\nBLE/Wi-Fi mesh, protocol, Noise/crypto, identity, Nostr, geohash, and media.\n`wear/` is the Wear OS client. Module resources live in `src/main/`\nand JVM tests in `src/test/`. Specifications are in `docs/`; tooling is in\n`tools/`.\n\n`app/` is the source of truth for shared mesh/protocol code.\n`syncSharedAppSources` generates `wear/build/sharedSrc` from the include list\nin `wear/build.gradle.kts`. Extend that list; never copy shared\nKotlin into `wear/src/` or edit generated `build/` content.\n\n## Build, Test & Development Commands\n\nUse JDK 21 and the Android SDK versions in `gradle/libs.versions.toml`.\n\n```sh\n./gradlew :app:assembleDebug :wear:assembleDebug\n./gradlew testDebugUnitTest lintDebug\n./gradlew connectedAndroidTest\n./gradlew clientRewriteContractTest\ntools/arti-build/verify-checksums.sh\n```\n\nCI runs `testDebugUnitTest lintDebug`; instrumented tests require a device.\nFollow `docs/reproducible-builds.md` and `docs/maintainer-release-guide.md` for\ndependency and release work.\n\n## Coding Style & Naming\n\nUse official Kotlin style with four-space indentation. Classes and Composables\nuse `PascalCase`; functions and properties use `camelCase`; constants use\n`UPPER_SNAKE_CASE`. Hoist Compose state, expose immutable `StateFlow`, use\nstructured coroutines and suspend I/O, and never block the main thread.\n\nProtocol and security changes must remain fail-closed and cross-client\ncompatible. Update the relevant specification and golden-vector tests.\n\n## Testing & Physical Mesh Lab\n\nTests use JUnit 4, Robolectric, Mockito, and coroutine test utilities. Name files\n`*Test.kt` by observable behavior. Avoid arbitrary sleeps, public\nrelays, live user data, and nondeterministic completion. See\n`docs/testing-conventions.md`.\n\nChanges affecting discovery, routing, transports, Noise/crypto, identity,\nforeground-service power, messaging, transfers, packets, or fragmentation\nrequire Mesh Lab validation on physical devices. Debug-only hooks live in\n`app/src/debug/` and `wear/src/debug/`; never move them into release sources.\n\n```sh\npython3 tools/release_gate/mesh_lab.py setup \\\n  --serial-a <device-a> --serial-b <device-b> --apk <debug-apk>\npython3 tools/release_gate/mesh_lab.py scenario all \\\n  --serial-a <device-a> --serial-b <device-b> --out /tmp/mesh-evidence\n```\n\nFor phone-to-watch interop, replace `--serial-b` with `--serial-watch` and add\n`--watch-apk`. Keep devices unlocked and awake. Follow the Mesh Lab appendix in\n`docs/release-gate-runbook.md`; raw evidence and logcat must remain local.\n\n## Commits, Pull Requests & Privacy\n\nUse short imperative subjects (`Fix stale peer lifecycle cleanup`) or scoped\nConventional Commit subjects (`fix(wifi-aware): ...`). PRs must explain risk,\nlink the issue, report tests, and include before/after screenshots for visible\nphone or watch changes. Do not publish raw device logs.\n\nUse `gh` for GitHub operations. Never override Git author or committer identity.\nThe mandatory privacy rules above apply to all Git and GitHub activity. Treat a\nrequest to create a commit or pull request as permission only for the sanitized\nrepository changes and description needed for that action, never for local or\npersonal metadata. Never commit keystores or secrets.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# Repository Guidelines\n\n## Privacy & External Disclosure (Mandatory)\n\nProtect the developer's privacy without exception. Treat all data from the\ndeveloper's computer, accounts, devices, workspace, and communications as\nprivate unless the developer explicitly authorizes sharing a specific item\nwith a specific destination.\n\n- Never expose, publish, transmit, upload, paste, commit, or otherwise disclose\n  personally identifying or potentially identifying information. This includes\n  names, usernames, email addresses, account handles, home or workplace details,\n  local or absolute paths, drive or volume names, hostnames, device names and\n  serials, IP or MAC addresses, network names, peer IDs, messages, contacts,\n  tokens, keys, credentials, logs, metadata, and unique environment details.\n- Never post any repository, workspace, device, account, conversation, log, or\n  developer data to GitHub, issue trackers, pull requests, comments, gists,\n  paste sites, analytics services, AI services, remote APIs, chat systems, or\n  any other external destination without the developer's explicit permission\n  for that exact data and destination. A general request to work on the\n  repository is not permission to disclose data.\n- Keep local filesystem layout and computer information private. Do not include\n  absolute paths, usernames, home-directory names, mounted drives, shell\n  prompts, environment variables, installed-software inventories, hardware\n  details, or similar machine fingerprints in commits, patches, documentation,\n  screenshots, test fixtures, examples, issue text, PR text, or comments.\n- Before any authorized external action, inspect and sanitize the exact content\n  being sent. Use repository-relative paths and neutral placeholders; remove\n  hidden metadata and redact unrelated or identifying content. When safe\n  sanitization cannot be guaranteed, do not send the data and ask the developer\n  how to proceed.\n- Use synthetic, non-identifying test data only. Never use real messages,\n  contacts, account data, device identifiers, network information, keys, or\n  production logs in tests, examples, screenshots, fixtures, or bug reports.\n- For geohash, GPS, map, location, proximity, or geofencing work, use only\n  clearly synthetic coordinates and geohashes that cannot reveal the\n  developer's location or routines. Never request, read, derive, record, use,\n  display, transmit, or retain live or historical location data from any\n  physical phone, watch, emulator image, computer, browser, account, or other\n  device connected to or accessible from the developer's computer. Never infer\n  location from IP addresses, networks, photos, logs, timestamps, nearby peers,\n  device metadata, or test output. Treat all location and movement data as\n  highly sensitive personal information and keep it out of commits, tests,\n  fixtures, screenshots, documentation, issues, pull requests, and external\n  services without exception.\n- Keep command output, raw logs, crash dumps, screenshots, recordings, build\n  artifacts, and Mesh Lab evidence local. Review any derived summary for\n  identifying details before sharing it, even when external sharing has been\n  authorized.\n- Do not weaken these protections for convenience, debugging, automation, or\n  collaboration. If another instruction conflicts with this section, stop and\n  obtain explicit developer direction before disclosing anything.\n\n## Project Structure & Architecture\n\n`app/` is the Kotlin/Compose phone client; its main packages cover UI, services,\nBLE/Wi-Fi mesh, protocol, Noise/crypto, identity, Nostr, geohash, and media.\n`wear/` is the Wear OS client. Module resources live in `src/main/`\nand JVM tests in `src/test/`. Specifications are in `docs/`; tooling is in\n`tools/`.\n\n`app/` is the source of truth for shared mesh/protocol code.\n`syncSharedAppSources` generates `wear/build/sharedSrc` from the include list\nin `wear/build.gradle.kts`. Extend that list; never copy shared\nKotlin into `wear/src/` or edit generated `build/` content.\n\n## Build, Test & Development Commands\n\nUse JDK 21 and the Android SDK versions in `gradle/libs.versions.toml`.\n\n```sh\n./gradlew :app:assembleDebug :wear:assembleDebug\n./gradlew testDebugUnitTest lintDebug\n./gradlew connectedAndroidTest\n./gradlew clientRewriteContractTest\ntools/arti-build/verify-checksums.sh\n```\n\nCI runs `testDebugUnitTest lintDebug`; instrumented tests require a device.\nFollow `docs/reproducible-builds.md` and `docs/maintainer-release-guide.md` for\ndependency and release work.\n\n## Coding Style & Naming\n\nUse official Kotlin style with four-space indentation. Classes and Composables\nuse `PascalCase`; functions and properties use `camelCase`; constants use\n`UPPER_SNAKE_CASE`. Hoist Compose state, expose immutable `StateFlow`, use\nstructured coroutines and suspend I/O, and never block the main thread.\n\nProtocol and security changes must remain fail-closed and cross-client\ncompatible. Update the relevant specification and golden-vector tests.\n\n## Testing & Physical Mesh Lab\n\nTests use JUnit 4, Robolectric, Mockito, and coroutine test utilities. Name files\n`*Test.kt` by observable behavior. Avoid arbitrary sleeps, public\nrelays, live user data, and nondeterministic completion. See\n`docs/testing-conventions.md`.\n\nChanges affecting discovery, routing, transports, Noise/crypto, identity,\nforeground-service power, messaging, transfers, packets, or fragmentation\nrequire Mesh Lab validation on physical devices. Debug-only hooks live in\n`app/src/debug/` and `wear/src/debug/`; never move them into release sources.\n\n```sh\npython3 tools/release_gate/mesh_lab.py setup \\\n  --serial-a <device-a> --serial-b <device-b> --apk <debug-apk>\npython3 tools/release_gate/mesh_lab.py scenario all \\\n  --serial-a <device-a> --serial-b <device-b> --out /tmp/mesh-evidence\n```\n\nFor phone-to-watch interop, replace `--serial-b` with `--serial-watch` and add\n`--watch-apk`. Keep devices unlocked and awake. Follow the Mesh Lab appendix in\n`docs/release-gate-runbook.md`; raw evidence and logcat must remain local.\n\n## Commits, Pull Requests & Privacy\n\nUse short imperative subjects (`Fix stale peer lifecycle cleanup`) or scoped\nConventional Commit subjects (`fix(wifi-aware): ...`). PRs must explain risk,\nlink the issue, report tests, and include before/after screenshots for visible\nphone or watch changes. Do not publish raw device logs.\n\nUse `gh` for GitHub operations. Never override Git author or committer identity.\nThe mandatory privacy rules above apply to all Git and GitHub activity. Treat a\nrequest to create a commit or pull request as permission only for the sanitized\nrepository changes and description needed for that action, never for local or\npersonal metadata. Never commit keystores or secrets.\n","category":"root","tokens":1689}]}