From 7d6d56e330928a9b6811b7acc4234350994d330a Mon Sep 17 00:00:00 2001 From: Edison Jwa Date: Wed, 20 May 2026 01:37:02 +0900 Subject: [PATCH] docs(p0): compact MVP spec for Android Oboe focus --- docs/00_AGENT_ROUTER.md | 31 + docs/P0_MVP_AGENT_SPEC.md | 136 + docs/P1_BETA_AGENT_SPEC.md | 58 + docs/P2_PRODUCTION_AGENT_SPEC.md | 34 + docs/README.md | 11 + docs/SOP_AGENT_OPERATIONS.md | 46 + docs/architecture/desktop-ptt-architecture.md | 213 - docs/architecture/proof-of-concept-plan.md | 66 - docs/architecture/sad.md | 1624 --- docs/architecture/sdd.md | 2052 --- docs/architecture/sysdes.md | 3047 ----- docs/governance/baseline-approval-record.md | 65 - .../baseline-candidate-validation-report.md | 92 - docs/governance/decision-impact-assessment.md | 103 - docs/governance/development-environment.md | 60 - docs/governance/document-index.md | 93 - docs/governance/document-naming-convention.md | 66 - docs/governance/document-review-report.md | 90 - .../git-commit-message-convention.md | 185 - docs/governance/legal-review-readiness.md | 200 - docs/governance/path-migration-map.md | 84 - docs/governance/poc-results-summary.md | 158 - docs/governance/product-decision-register.md | 362 - .../repo-format-validation-report.md | 77 - docs/governance/repository-bootstrap-plan.md | 72 - docs/governance/staged-release-plan.md | 111 - docs/governance/traceability-matrix.md | 1160 -- docs/i18n/localization-architecture.md | 87 - .../legal/trademark-and-attribution-review.md | 107 - docs/phase_index.json | 7684 +++++++++++ docs/privacy/privacy-policy.md | 122 - .../aspice-swe2-swe3-integration-note.md | 87 - docs/references/external-references.md | 128 - docs/release/ios-build.md | 664 - docs/release/platform-release-policy.md | 83 - docs/release/release-artifact-policy.md | 51 - .../release-readiness-go-nogo-record.md | 234 - docs/release/windows-build.md | 514 - docs/requirements/srs.md | 2850 ---- docs/requirements/sysrs.md | 2007 --- .../dependency-and-supply-chain-report.md | 126 - .../diagnostic-redaction-audit-report.md | 134 - docs/security/flutter-license-inventory.md | 4280 ------ docs/security/license-inventory.html | 11101 ---------------- docs/security/license-inventory.md | 9895 -------------- docs/security/secure-storage-audit-report.md | 97 - .../security-privacy-legal-guideline.md | 89 - docs/security/threat-model.md | 154 - docs/ui-ux/adaptive-layout-platform-guide.md | 84 - docs/ui-ux/material3-component-catalog.md | 105 - docs/ui-ux/material3-design-tokens.md | 120 - docs/ui-ux/material3-guideline.md | 93 - docs/verification/android-p0-acceptance.md | 319 - docs/verification/ios-p0-acceptance.md | 183 - docs/verification/ipad-p0-acceptance.md | 245 - docs/verification/linux-p0-acceptance.md | 228 - docs/verification/macos-p0-acceptance.md | 222 - .../swe4-unit-verification-plan.md | 709 - ...-software-integration-verification-plan.md | 377 - .../swe6-software-verification-plan.md | 400 - ...s4-system-integration-verification-plan.md | 303 - docs/verification/verification-master-plan.md | 83 - docs/verification/windows-p0-acceptance.md | 246 - 63 files changed, 8000 insertions(+), 46507 deletions(-) create mode 100644 docs/00_AGENT_ROUTER.md create mode 100644 docs/P0_MVP_AGENT_SPEC.md create mode 100644 docs/P1_BETA_AGENT_SPEC.md create mode 100644 docs/P2_PRODUCTION_AGENT_SPEC.md create mode 100644 docs/README.md create mode 100644 docs/SOP_AGENT_OPERATIONS.md delete mode 100644 docs/architecture/desktop-ptt-architecture.md delete mode 100644 docs/architecture/proof-of-concept-plan.md delete mode 100644 docs/architecture/sad.md delete mode 100644 docs/architecture/sdd.md delete mode 100644 docs/architecture/sysdes.md delete mode 100644 docs/governance/baseline-approval-record.md delete mode 100644 docs/governance/baseline-candidate-validation-report.md delete mode 100644 docs/governance/decision-impact-assessment.md delete mode 100644 docs/governance/development-environment.md delete mode 100644 docs/governance/document-index.md delete mode 100644 docs/governance/document-naming-convention.md delete mode 100644 docs/governance/document-review-report.md delete mode 100644 docs/governance/git-commit-message-convention.md delete mode 100644 docs/governance/legal-review-readiness.md delete mode 100644 docs/governance/path-migration-map.md delete mode 100644 docs/governance/poc-results-summary.md delete mode 100644 docs/governance/product-decision-register.md delete mode 100644 docs/governance/repo-format-validation-report.md delete mode 100644 docs/governance/repository-bootstrap-plan.md delete mode 100644 docs/governance/staged-release-plan.md delete mode 100644 docs/governance/traceability-matrix.md delete mode 100644 docs/i18n/localization-architecture.md delete mode 100644 docs/legal/trademark-and-attribution-review.md create mode 100644 docs/phase_index.json delete mode 100644 docs/privacy/privacy-policy.md delete mode 100644 docs/references/aspice-swe2-swe3-integration-note.md delete mode 100644 docs/references/external-references.md delete mode 100644 docs/release/ios-build.md delete mode 100644 docs/release/platform-release-policy.md delete mode 100644 docs/release/release-artifact-policy.md delete mode 100644 docs/release/release-readiness-go-nogo-record.md delete mode 100644 docs/release/windows-build.md delete mode 100644 docs/requirements/srs.md delete mode 100644 docs/requirements/sysrs.md delete mode 100644 docs/security/dependency-and-supply-chain-report.md delete mode 100644 docs/security/diagnostic-redaction-audit-report.md delete mode 100644 docs/security/flutter-license-inventory.md delete mode 100644 docs/security/license-inventory.html delete mode 100644 docs/security/license-inventory.md delete mode 100644 docs/security/secure-storage-audit-report.md delete mode 100644 docs/security/security-privacy-legal-guideline.md delete mode 100644 docs/security/threat-model.md delete mode 100644 docs/ui-ux/adaptive-layout-platform-guide.md delete mode 100644 docs/ui-ux/material3-component-catalog.md delete mode 100644 docs/ui-ux/material3-design-tokens.md delete mode 100644 docs/ui-ux/material3-guideline.md delete mode 100644 docs/verification/android-p0-acceptance.md delete mode 100644 docs/verification/ios-p0-acceptance.md delete mode 100644 docs/verification/ipad-p0-acceptance.md delete mode 100644 docs/verification/linux-p0-acceptance.md delete mode 100644 docs/verification/macos-p0-acceptance.md delete mode 100644 docs/verification/swe4-unit-verification-plan.md delete mode 100644 docs/verification/swe5-software-integration-verification-plan.md delete mode 100644 docs/verification/swe6-software-verification-plan.md delete mode 100644 docs/verification/sys4-system-integration-verification-plan.md delete mode 100644 docs/verification/verification-master-plan.md delete mode 100644 docs/verification/windows-p0-acceptance.md diff --git a/docs/00_AGENT_ROUTER.md b/docs/00_AGENT_ROUTER.md new file mode 100644 index 0000000..2df47a6 --- /dev/null +++ b/docs/00_AGENT_ROUTER.md @@ -0,0 +1,31 @@ +# AI Agent Router — Chanora Minimal Spec + +Purpose: keep AI context small. Do not load the old full bundle unless explicitly asked for audit reconstruction. + +## Load Order +1. Always load this file first. +2. Load exactly one phase file: `P0_MVP_AGENT_SPEC.md`, `P1_BETA_AGENT_SPEC.md`, or `P2_PRODUCTION_AGENT_SPEC.md`. +3. Load `SOP_AGENT_OPERATIONS.md` only when changing architecture, release, security, privacy, diagnostics, build, or test gates. +4. Use `phase_index.json` for machine lookup. Do not paste full source docs into context. + +## Phase Meaning +- P0 = MVP buildable product. Default implementation target. +- P1 = beta hardening and extended quality. Do not implement unless asked. +- P2 = production/public-release readiness. Do not implement until P0 and P1 gates pass. +- SOP = standing operating rules for agents, reviews, testing, release, traceability, and refusal conditions. + +## Non-Negotiable Product Contract +- Product: Chanora, a cross-platform TeamSpeak 3-compatible client application. +- Stack: Flutter UI + Rust core + typed Flutter/Rust bridge + `tsclientlib` adapter. +- Platforms: Windows, macOS, Linux, Android, iOS. +- MVP server model: external TS3-compatible servers only; no Chanora-operated backend. +- MVP connection model: one active server connection per client instance. +- Privacy: no telemetry, no automatic diagnostic upload, no crash reporting unless later approved. +- Diagnostics: local, user-initiated export only. +- Storage: secrets in platform secure storage; non-secrets in bundled SQLite via `rusqlite`. +- Localization: English + Chinese Simplified at MVP; preserve server content verbatim. +- Design: Material 3 + Chanora Design System. +- License: Apache-2.0 OR MIT. + +## Hard Stop Rules +Stop and ask for explicit approval before adding: telemetry, crash reporting, automatic upload, multiple active server connections, a Chanora backend, unsupported platform targets, unapproved hotkey/audio packages, or legal/trademark wording changes. diff --git a/docs/P0_MVP_AGENT_SPEC.md b/docs/P0_MVP_AGENT_SPEC.md new file mode 100644 index 0000000..d2c8a37 --- /dev/null +++ b/docs/P0_MVP_AGENT_SPEC.md @@ -0,0 +1,136 @@ +# P0 MVP Agent Spec — Build This First + +## Objective +Create the smallest complete Chanora MVP that can connect to one TS3-compatible server, render channel/user state, support basic voice workflow, persist local non-secret settings, protect secrets, and pass platform P0 acceptance gates. + +## Scope +Implement only P0/MVP. Treat P1/P2 items as backlog unless the user explicitly requests them. + +## Accepted MVP Decisions +- DEC-001: Release type = Internal Alpha first, then External Beta, then MVP Public / Store Release +- DEC-002: MVP platform scope = MVP target remains Windows, macOS, Linux, Android, and iOS; first release may be staged by channel/platform +- DEC-003: Minimum iOS version = iOS 13 minimum for Flutter support baseline; test latest iOS release separately +- DEC-004: Minimum Android version = **Android API 28 (Android 9.0)** minimum, raised from the original recommendation of API 24 by explicit owner ruling on 2026-05-14. Rationale: simplifies the audio path (AAudio is unconditionally available from API 26+ and stable from API 28), narrows the TLS / privacy / scoped-storage compatibility surface, and matches typical 2026 Android baselines. The original cpal-on-Oboe Android spike was built with `minSdk = 24` and `cargo-ndk -P 26`; product code in `apps/chanora_flutter` uses `minSdk = 28` and the Android product audio backend is now direct Oboe, so Chanora no longer carries the API 24/25 OpenSL ES fallback branch. +- DEC-005: Android target SDK = Target the Google Play-required API level on the upload date; current release gate uses API 35+ unless newer Google policy applies +- DEC-006: Multiple server connections in MVP = Not in MVP; support one active server connection per client instance +- DEC-007: AEC default state = Enabled by default on platforms/audio backends where supported and stable +- DEC-008: AGC default state = Enabled by default, with user setting to disable +- DEC-009: Noise suppression default state = Enabled by default, with user setting to disable +- DEC-010: High-pass filter default state = Enabled by default +- DEC-011: Audio processing implementation path = Use platform-native audio processing first where available; use Rust/WebRTC-style processing as controlled fallback or later architecture option +- DEC-011.1: Audio crate choice = `cpal` for desktop (empirically verified on Linux/PipeWire by `poc/audio-capture-playback-spike` on 2026-05-13) and direct `oboe-rs` for Android product code. The earlier cpal-on-Oboe spike remains evidence that Rust audio reaches Oboe/AAudio on a Motorola Moto G Stylus 5G (2023) running Android 14 arm64-v8a, but product code chooses direct Oboe because P0 Android needs explicit `VoiceCommunication` input preset, `VoiceCommunication`/`Speech` output attributes, low-latency/exclusive stream requests with shared fallback, audio-session ids for hardware AEC/NS/AGC binding, and diagnostics of requested/achieved stream values. iOS crate TBD pending an iOS spike that requires macOS + Xcode hardware +- DEC-012: Official SDK / trademark / licensing review = Public/store release is blocked until legal confirms TeamSpeak non-affiliation wording, trademark usage, OSS licenses, and `tsclientlib` license posture +- DEC-013: Local database choice = Use SQLite or equivalent embedded local database for non-secret local state; secrets remain in platform secure storage +- DEC-013.1: SQLite crate = `rusqlite` with the `bundled` feature (SQLite statically linked into the binary; no system libsqlite3 dependency); verified by `poc/sqlite-storage-spike` on 2026-05-13 +- DEC-013.2: Linux secure-storage backend policy = Prefer Secret Service (libsecret / gnome-keyring / kwallet / KeePassXC) on Linux; if the default collection is locked or D-Bus is unavailable, fall back to kernel keyutils with a clear user notice. Both backends are "equivalent" per SysRS-053 / SysRS-162; verified by `poc/secure-storage-spike` on 2026-05-13 +- DEC-014: Bridge choice = Use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs; **`flutter_rust_bridge` 2.x pinned** (empirically verified at 2.12.0 by `poc/flutter_rust_bridge_hello` on 2026-05-13) +- DEC-015: Product language for MVP = **English + Chinese (Simplified) for MVP**, raised from the original recommendation of English-only by explicit owner ruling on 2026-05-14. Rationale: the demonstrated test-server population (verified live against `cn.teamspeak.app`) and broader TS3 audience include substantial Chinese-speaking users; shipping zh-Hans alongside en at MVP avoids a launch-window UX gap. Architecture remains i18n-ready so additional languages can be added later mechanically. Server-provided content is preserved verbatim and never translated (ADR-008 UTF-8 boundary, DEC-015 server-content rule retained). +- DEC-016: Diagnostics upload policy = No automatic upload for MVP; user-initiated local diagnostic export only +- DEC-017: Crash reporting = Disabled for MVP unless explicit opt-in provider and privacy policy are approved +- DEC-018: Public product name = Chanora +- DEC-021: Apple App Store submission SDK = Use Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later for App Store submission on or after 2026-04-28, unless Apple publishes a newer applicable requirement before upload +- DEC-020: License model = **Dual-licensed under Apache-2.0 OR MIT (recipient's choice)**, the standard Rust-ecosystem permissive license model. Accepted on 2026-05-14. Compatible with every direct dependency in the PoC tree (`tsclientlib` MIT-OR-Apache-2.0, `flutter_rust_bridge` MIT, `cpal` Apache-2.0, `rusqlite` MIT, `keyring` MIT-OR-Apache-2.0, etc.) and with the Flutter framework's BSD-3-Clause. The license texts ship as `LICENSE-APACHE` and `LICENSE-MIT` at the repository root; an aggregator `LICENSE` points to both. `NOTICE` enumerates current direct-dependency attributions. The full OSS legal review (transitive deps, license obligations, OSS notices) remains under DEC-012 and is still required before public release. +- DEC-022: Canonical implementation directory layout = Accept the README's sketch as canonical: `apps/chanora_flutter/`, `core/chanora_core/`, `crates/chanora_protocol/`, `crates/chanora_audio/`, `crates/chanora_state/`, `crates/chanora_storage/`, `crates/chanora_diagnostics/`, `crates/chanora_bridge/`. Matches SAD §7.2 module decomposition +- DEC-023: Windows desktop Global PTT priority = **P0 in MVP.** Resolves PTT-OPEN-001 from `gen2/chanora-desktop-ptt-review-summary-v0.9.2.md`. The Windows backend ladder (Raw Input → low-level keyboard hook → Focused fallback) is mandatory for the first public release; release notes shall not claim Global PTT support on Windows until live measurement confirms a Global level from a non-fallback rung. +- DEC-024: macOS desktop Global PTT priority = **P0 in MVP, with explicit permission UX flow.** Resolves PTT-OPEN-002. The macOS backend shall request the Input Monitoring / Accessibility permission, accept user denial gracefully (continue at `L0Focused` without functional regression), and upgrade to Global asynchronously when the user grants the permission. +- DEC-025: Officially-tested Linux environment for first public release = **GNOME on Wayland (only).** Resolves PTT-OPEN-003. The Linux backend shall use the freedesktop `org.freedesktop.portal.GlobalShortcuts` interface on GNOME-on-Wayland and fall back to Focused PTT on every other Linux environment (X11, sway, KDE, untested compositors). Release notes shall not claim Global PTT support outside the tested compositor. +- DEC-026: Mouse side-button support in first desktop PTT release = **Supported on Windows and macOS; Linux follows whatever the GlobalShortcuts portal exposes.** Resolves PTT-OPEN-004. The Raw Input backend (Windows) and the Event Tap backend (macOS) shall accept Mouse4 / Mouse5 bindings; the Linux portal binding accepts whatever the session exposes and the release notes shall not over-claim. +- DEC-027: PTT diagnostics privacy posture = **Capability and availability state only — no raw key codes ever leave the device.** Resolves PTT-OPEN-005. The diagnostic export shall name only `PttCapabilityLevel`, `backend_id`, `bound_input_class`, and `fallback_exercised`; the user's actual key value (scan code, virtual key, keysym) shall never be logged, persisted, or exported. `PttSanitizer` enforces this at write time. +- DEC-028: Missed-key-up watchdog requirement = **P0.** Resolves PTT-OPEN-006. The audio engine shall include a missed-key-up watchdog that clears `transmit_active` after a configured ceiling (default 30 s) when no key-up event arrives. The watchdog is a P0 release-gate item rather than an implementation-level concern because the failure mode (stuck transmission after the user has released the binding) is user-visible and reputation-relevant. +- DEC-029: Flutter global-hotkey packages rejected for PTT = **Use the native Rust `DesktopPttBackend` trait + per-OS implementations (already specified in SDD-083 / SDD-084 / SDD-085); do not adopt `hotkey_manager`, `super_hot_key`, or any equivalent pub.dev package for PTT.** Rationale: those packages wrap the OS `RegisterHotKey` / `RegisterEventHotKey` semantics — they consume the key (suppressing it from other applications), they do not deliver a key-up event, and they do not support mouse side-buttons. PTT requires the opposite primitive (observe, do not consume, deliver both up and down). +- DEC-030: Voice activity detection deferred to P1 = **`TransmitMode::VoiceActivity` ships as a reserved enum variant with no v1 implementation.** The settings UI shows it as a disabled "coming soon" option. The actual implementation choice is deferred to a future baseline. Rationale: three viable backends were compared (RMS energy threshold — trivial but quality-poor; WebRTC VAD via the `webrtc-vad` crate — frozen-but-stable C++ BSD-3 dep, ~200 KB binary, industry baseline; Silero VAD via ONNX Runtime — best quality but ~8–16 MB binary uplift per platform plus an ONNX-runtime dependency surface). The v1 dependency-surface budget does not have room for the trade-off review required to pick correctly. Choosing too early risks either user-visible quality regression (RMS) or a forced ONNX adoption (Silero) before there is a comparable need for ML inference elsewhere (noise suppression, AEC). +- DEC-001: Product Owner = Release type sequence +- DEC-002: Product Owner / Engineering = MVP platform strategy +- DEC-003: Product Owner / iOS Owner = Minimum iOS version +- DEC-004: Product Owner / Android Owner = Minimum Android version +- DEC-005: Android Owner / Release Manager = Android target SDK +- DEC-006: Product Owner / Software Architect = Multiple server connections in MVP +- DEC-007: Audio Owner / Product Owner = AEC default +- DEC-008: Audio Owner / Product Owner = AGC default +- DEC-009: Audio Owner / Product Owner = Noise suppression default +- DEC-010: Audio Owner = High-pass filter default +- DEC-011: Software Architect / Audio Owner = Audio processing path +- DEC-011.1: Software Architect / Audio Owner = Audio crate (desktop / mobile) +- DEC-012: Legal / Compliance = SDK/trademark/licensing review +- DEC-013: Software Architect / Storage Owner = Local database +- DEC-013.1: Software Architect / Storage Owner = SQLite crate +- DEC-013.2: Software Architect / Storage Owner / Security Reviewer = Linux secure-storage backend policy +- DEC-014: Software Architect = Bridge choice +- DEC-015: Product Owner = Product language for MVP +- DEC-016: Product Owner / Legal / Security = Diagnostics upload policy +- DEC-017: Product Owner / Legal / Security = Crash reporting +- DEC-018: Product Owner = Public product name +- DEC-020: Product Owner / Legal = License model +- DEC-021: iOS Owner / Release Manager = Apple App Store SDK gate +- DEC-022: Software Architect = Canonical implementation directory layout +- DEC-023: Product Owner / Windows Platform Owner = Windows desktop Global PTT priority +- DEC-024: Product Owner / macOS Platform Owner = macOS desktop Global PTT priority +- DEC-025: Product Owner / Linux Platform Owner = Officially-tested Linux environment +- DEC-026: Product Owner / UX Owner = Mouse side-button support +- DEC-027: Security / Privacy Reviewer = PTT diagnostics privacy posture +- DEC-028: Audio Owner / Software Architect = Missed-key-up watchdog +- DEC-029: Software Architect / Audio Owner = Flutter global-hotkey packages rejected for PTT +- DEC-030: Audio Owner / Product Owner = Voice activity detection deferred to P1 + +## Required P0 Capability Groups +1. App shell: routing, startup, theme, localization, adaptive layout, platform-service initialization. +2. UI/design: Material 3, Chanora design tokens, responsive desktop/tablet/mobile layouts, accessible controls, keyboard focus, safe areas/insets. +3. Protocol: TS3-compatible adapter through `tsclientlib`; no direct UI coupling to protocol internals. +4. Connection: one active server connection; visible connecting/connected/reconnecting/disconnected/error states. +5. Channel/user tree: preserve Unicode server content; do not translate server names/messages. +6. Voice basics: capture/playback path, push-to-talk where platform-supported, mute/deafen indicators, native processing defaults. +7. Audio defaults: AEC on where stable, AGC on with user toggle, noise suppression on with user toggle, high-pass filter on. +8. Storage: SQLite for non-secret state; platform secure storage for identities/tokens/password-equivalent secrets. +9. Diagnostics: local export only; redact secrets; machine fields remain language-neutral. +10. Builds: reproducible platform builds for Windows, macOS, Linux, Android, and iOS with staged release allowed. +11. Verification: unit, widget, integration, platform acceptance, and release go/no-go evidence. + +## P0 Architecture Boundaries +- Flutter owns UI, navigation, Material 3 theming, accessibility, and adaptive presentation. +- Rust core owns domain state, protocol/session orchestration, storage, diagnostics, and platform-abstracted services. +- Bridge owns typed DTOs/events/errors only. Do not leak Rust internals into Flutter or Flutter objects into Rust core. +- Platform adapters own OS-specific audio, hotkey, secure storage, build, and permission behavior. + +## P0 Definition of Done +- User can launch app, enter/connect to a TS3-compatible server, see server/channel/user state, and disconnect cleanly. +- App supports the selected P0 voice path without telemetry or automatic upload. +- Secrets are never stored in SQLite/plaintext. +- English and zh-Hans product strings are available; server-originated Unicode remains unchanged. +- All diagnostic exports are local/user-triggered and redacted. +- Platform P0 acceptance docs pass or contain explicit blocker records. +- Every code change cites at least one requirement or decision ID. + +## P0 Requirement Index +- Count: 500 +- ID groups: SAD-001..SAD-096 (71 ids); SDD-001..SDD-121 (98 ids); SRS-001..SRS-219 (178 ids); SysDes-001..SysDes-158 (153 ids) + +## P0 Source Weighting +- `requirements/srs.md`: 178 +- `architecture/sysdes.md`: 153 +- `architecture/sdd.md`: 98 +- `architecture/sad.md`: 71 + +## P0 Allocation Hotspots +- Unallocated: 98 +- Flutter UI: 68 +- Rust Core: 52 +- Verification: 43 +- Audio Subsystem: 42 +- Software: Audio Subsystem: 39 +- System Engineering: 33 +- Protocol Adapter: 31 +- Diagnostics: 28 +- State Sync: 24 +- Design System: 22 +- Bridge: 21 +- Storage: 21 +- Software: Diagnostics: 21 +- Platform: 20 +- Software: Protocol Adapter: 20 +- Platform Adapters: 19 +- Software: Rust Core: 19 +- Audio: 18 +- Operations: 17 + +## Agent Compression Rule +Do not paste all P0 requirement statements into prompt context. Use this file as the execution contract and `phase_index.json` only when an exact ID/source lookup is required. diff --git a/docs/P1_BETA_AGENT_SPEC.md b/docs/P1_BETA_AGENT_SPEC.md new file mode 100644 index 0000000..1363beb --- /dev/null +++ b/docs/P1_BETA_AGENT_SPEC.md @@ -0,0 +1,58 @@ +# P1 Beta Agent Spec — Harden After MVP + +## Objective +Improve reliability, beta readiness, accessibility coverage, diagnostics usefulness, and platform quality after P0 works end-to-end. + +## Entry Gate +Do not start P1 until P0 MVP acceptance is passing or blockers are formally recorded. + +## P1 Scope +- Harden reconnection/error handling beyond MVP happy path. +- Expand integration/system tests and beta acceptance evidence. +- Improve accessibility, keyboard workflows, adaptive layout edge cases, and localization completeness. +- Improve diagnostics quality without changing the privacy model. +- Prepare external beta release notes, support workflows, and known-issue tracking. + +## P1 Non-Goals +- No telemetry by default. +- No automatic diagnostic upload. +- No multiple active server connections unless a new accepted decision overrides DEC-006. +- No production/store launch gates unless explicitly promoted to P2. + +## P1 Definition of Done +- P0 regressions remain passing. +- Beta blockers are triaged and traceable. +- Diagnostic exports are useful for support while still redacted and local. +- Platform-specific beta risks have owner/status records. + +## P1 Requirement Index +- Count: 81 +- ID groups: SAD-035..SAD-066 (18 ids); SDD-051..SDD-109 (20 ids); SRS-028..SRS-191 (38 ids); SysDes-122, SysDes-123, SysDes-124, SysDes-125, SysDes-138 + +## P1 Source Weighting +- `requirements/srs.md`: 38 +- `architecture/sdd.md`: 20 +- `architecture/sad.md`: 18 +- `architecture/sysdes.md`: 5 + +## P1 Allocation Hotspots +- Unallocated: 20 +- Diagnostics: 14 +- Audio Subsystem: 13 +- Flutter UI: 9 +- Platform Adapters: 9 +- Deployment Scripts: 7 +- Software Architecture: 6 +- Application Container: 6 +- Storage: 5 +- Protocol Adapter: 5 +- Localization Service: 5 +- Bridge: 4 +- Flutter App Shell: 4 +- Software Design: 4 +- Platform Adapter: 4 +- Platform Audio Adapter: 3 +- State Sync: 3 +- Rust Core: 3 +- Verification Support: 2 +- Flutter State: 2 diff --git a/docs/P2_PRODUCTION_AGENT_SPEC.md b/docs/P2_PRODUCTION_AGENT_SPEC.md new file mode 100644 index 0000000..adddcdb --- /dev/null +++ b/docs/P2_PRODUCTION_AGENT_SPEC.md @@ -0,0 +1,34 @@ +# P2 Production Agent Spec — Public Release Readiness + +## Objective +Prepare Chanora for public/store release only after P0 implementation and P1 beta hardening are complete. + +## Entry Gate +Do not begin P2 until P0 and P1 evidence is available. Public release is blocked by legal/trademark/OSS review and store-policy readiness. + +## P2 Scope +- Final release go/no-go records. +- Store metadata and platform upload compliance. +- Legal review: TeamSpeak non-affiliation wording, trademark usage, OSS license posture, `tsclientlib` license posture. +- Final privacy policy confirmation against actual app behavior. +- Production build signing, artifact policy, and staged rollout policy. + +## P2 Non-Goals +- Do not add telemetry/crash reporting to satisfy production readiness unless privacy/legal/product explicitly approve it. +- Do not expand server/backend scope. +- Do not add new features that destabilize P0/P1 acceptance. + +## P2 Definition of Done +- Release manager has signed go/no-go evidence. +- Legal/compliance blockers are closed. +- Platform upload SDK/target requirements are current on upload date. +- Release artifacts are reproducible, signed where required, and mapped to a version/tag. + +## P2 Requirement Index +- Count: 11 +- ID groups: SAD-045, SAD-046, SAD-047, SAD-048, SAD-049, SAD-050, SAD-055; SDD-063; SRS-117, SRS-154, SRS-175 + +## P2 Source Weighting +- `architecture/sad.md`: 7 +- `requirements/srs.md`: 3 +- `architecture/sdd.md`: 1 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..ef190b5 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,11 @@ +# Chanora AI-Agent Minimal Phased Requirements + +This bundle intentionally removes the large rewritten archive and trace CSV. It is designed for AI agents with limited context. + +Recommended loading: +1. `00_AGENT_ROUTER.md` +2. One phase file: P0, P1, or P2 +3. `SOP_AGENT_OPERATIONS.md` only when process/release/security rules matter +4. `phase_index.json` only for exact ID lookup + +Do not load the old full bundle unless performing audit reconstruction. diff --git a/docs/SOP_AGENT_OPERATIONS.md b/docs/SOP_AGENT_OPERATIONS.md new file mode 100644 index 0000000..710f0d6 --- /dev/null +++ b/docs/SOP_AGENT_OPERATIONS.md @@ -0,0 +1,46 @@ +# SOP Agent Operations — Standing Rules + +## Core Agent Rules +1. Default to P0. Do not implement P1/P2 unless explicitly requested. +2. Preserve traceability: commit messages, PR descriptions, tests, and review notes must cite decision/requirement IDs. +3. Make the smallest compliant change. Avoid architecture invention. +4. If requirements conflict, precedence is: Product Decision Register > SysRS > SysDes > SRS > SAD > SDD > Verification/Release/Security docs. +5. If a task requires exact historical detail, inspect `phase_index.json`; do not load the obsolete full bundle. + +## Required Review Gates +- Architecture boundary review for Flutter/Rust/bridge/protocol/storage/audio changes. +- Privacy review for diagnostics, logging, crash handling, analytics, upload, identifiers, or support artifacts. +- Security review for secure storage, redaction, secrets, dependencies, and supply chain. +- Release review for platform build, signing, SDK, store, and artifact policy. +- Localization review for product strings and server-content preservation. + +## Testing SOP +- Unit tests: Rust core, DTO transforms, storage, redaction, decision logic. +- Widget tests: Material 3 components, state tokens, localization, accessibility semantics, adaptive layouts. +- Integration tests: bridge events/errors, protocol adapter state, diagnostics export, storage migration. +- Platform tests: secure storage, audio capture/playback, permissions, hotkeys/PTT, packaging. +- Acceptance tests: use platform P0 acceptance docs before any release promotion. + +## Build SOP +- Keep repo layout canonical: `apps/chanora_flutter/`, `core/chanora_core/`, `crates/chanora_*`. +- Pin `flutter_rust_bridge` 2.x. +- Use bundled `rusqlite` for embedded SQLite. +- Android minSdk = 28; target API must match current Google Play requirement on upload date. +- iOS minimum = 13; App Store upload SDK gate must be checked on actual upload date. + +## Privacy/Security SOP +- No telemetry in MVP. +- No crash reporting unless approved. +- No automatic diagnostic upload. +- Diagnostics are local export only and must redact secrets. +- Product-owned strings may be localized; server-originated content must be preserved verbatim. +- Secrets never enter logs, diagnostics, SQLite, screenshots, or crash-like artifacts. + +## Release SOP +- Release sequence: Internal Alpha -> External Beta -> MVP Public. +- Public/store release requires legal/trademark/OSS license confirmation. +- Staged platform release is allowed when documented. +- Every release must include version, commit/tag, artifact list, known issues, test evidence, and go/no-go result. + +## Agent Refusal / Escalation Conditions +Stop implementation and ask for owner approval when asked to add or change: telemetry, crash reporting, diagnostic uploads, backend service, multi-server active sessions, platform scope, license, trademark/non-affiliation text, secret-storage policy, or target SDK/minimum OS baseline. diff --git a/docs/architecture/desktop-ptt-architecture.md b/docs/architecture/desktop-ptt-architecture.md deleted file mode 100644 index 9c29102..0000000 --- a/docs/architecture/desktop-ptt-architecture.md +++ /dev/null @@ -1,213 +0,0 @@ -# Desktop Push-to-Talk Architecture - -| Field | Value | -|---|---| -| Document type | Architecture | -| Version | 0.9.3 | -| Status | Baseline Candidate | -| Language | English | -| Product | Chanora | -| Date | 2026-05-15 | - -Owner-resolved review questions from `gen2/chanora-desktop-ptt-review-summary-v0.9.2.md` are recorded as DEC-023 through DEC-028 in `docs/governance/product-decision-register.md`. - ---- - -## 1. Purpose - -Desktop Push-to-Talk (PTT) is the operation by which a user holds a bound keyboard key or mouse button to enable voice transmission and releases it to disable transmission. This document fixes the architecture so the product can describe, implement, verify, and release desktop PTT honestly — every capability claim made to the user is auditable against a live runtime measurement. - -The previous architecture treated PTT as a single global behaviour. That over-promised on platforms where the operating system, the user-granted permission set, the display server, or the compositor does not permit unconditional global key capture. This document replaces that with a capability-based model. - -## 2. Architectural Decisions - -| ID | Decision | Source | -|---|---|---| -| DEC-023 | Windows Global PTT is **P0 / MVP**. | Owner ruling 2026-05-15 | -| DEC-024 | macOS Global PTT is **P0 / MVP** with explicit permission UX flow. | Owner ruling 2026-05-15 | -| DEC-025 | The officially-tested Linux environment for the first public release is **GNOME on Wayland** (only). | Owner ruling 2026-05-15 | -| DEC-026 | Mouse side buttons are **supported** in the first desktop PTT release on Windows and macOS; Linux support follows whatever the GlobalShortcuts portal exposes. | Owner ruling 2026-05-15 | -| DEC-027 | The diagnostic export carries **capability and availability state only** — no raw key codes, scan codes, or virtual-key values ever leave the device. | Owner ruling 2026-05-15 | -| DEC-028 | The **missed-key-up watchdog is P0**: the audio engine shall self-release `transmit_active` if the OS suppresses a key-up event. | Owner ruling 2026-05-15 | - -## 3. Capability Ladder - -| Level | Name | Meaning | -|---|---|---| -| `L0Focused` | Focused PTT | PTT works only while the Chanora window has input focus. Mandatory on every desktop platform per SysRS-296. | -| `L1GlobalShortcut` | Global shortcut activation | The OS recognises a global accelerator and notifies the application, but hold-to-talk semantics may be approximated rather than guaranteed. | -| `L2GlobalHoldToTalk` | Global hold-to-talk | Press and release events are delivered while the application is not focused. The common Windows / macOS / GNOME-Wayland-portal MVP target. | -| `L3GlobalWithMouseButtons` | Global hold-to-talk plus mouse buttons | Includes mouse side buttons (Mouse4 / Mouse5). | -| `L4DeviceAware` | Device-aware PTT | Backend can distinguish specific input devices. **Reserved.** No MVP implementation produces `L4DeviceAware`. | - -The reported capability shall match runtime behaviour. A backend that *could* deliver `L2GlobalHoldToTalk` but lacks the user-granted permission shall report `L0Focused` until permission is granted. - -## 4. Component Allocation - -``` -+------------------------------------+ -| Flutter Voice UI | -| PTT binding-capture sheet | -| VoiceBar PttCapabilityBadge | -+---------------+--------------------+ - | - | set_binding(...) - | events_stream() -> BridgeEvent::PttCapability - v -+---------------+--------------------+ -| chanora_bridge | -| typed DTOs, no key data crosses | -+---------------+--------------------+ - | - v -+------------------------------------+ -| chanora_core | -| PttController | -| owns Box| -| owns Arc | -| publishes PttCapabilityLevel | -| MissedKeyUpWatchdog (tokio task) | -+---------------+--------------------+ - | - v -+------------------------------------+ -| chanora_audio | -| DesktopPttBackend trait | -| WindowsRawInputBackend | -| WindowsHookBackend | -| MacOSEventTapBackend | -| LinuxGnomeWaylandBackend | -| FocusedPttBackend | -| AudioTransmitGate | -| capture_active / transmit_active | -+------------------------------------+ - | - v -+------------------------------------+ -| chanora_diagnostics | -| RedactingLogLayer | -| PttSanitizer (drops banned keys) | -+------------------------------------+ -``` - -The audio engine reads `transmit_active` once per outbound Opus frame. No code path other than `AudioTransmitGate::set` flips the value. - -## 5. Per-Platform Strategy - -### 5.1 Windows - -Three-level ladder evaluated once at audio-engine start: - -1. **`WindowsRawInputBackend`** — preferred. Uses `RegisterRawInputDevices` with `RIDEV_INPUTSINK` to receive keyboard and mouse events even when Chanora is not focused. Runs a message-only window on its own OS thread so the WndProc is non-blocking. Reports `L2GlobalHoldToTalk` (keyboard) or `L3GlobalWithMouseButtons` (when a mouse side button is bound). -2. **`WindowsHookBackend`** — fallback. Installs `WH_KEYBOARD_LL` and `WH_MOUSE_LL` hooks on its own thread. Used when Raw Input registration fails (some constrained environments). Reports `L2GlobalHoldToTalk` / `L3GlobalWithMouseButtons`. -3. **`FocusedPttBackend`** — final fallback. Reports `L0Focused`. - -The chosen rung is fixed for the lifetime of the audio engine; restart of the engine re-evaluates the ladder. - -### 5.2 macOS - -Two-level ladder with explicit permission gating: - -1. **`MacOSEventTapBackend`** — preferred when Input Monitoring (or Accessibility, depending on macOS version) permission is `Granted`. Creates a `CGEventTap` on the main run loop, filtered to keyboard and mouse-button events. Reports `L2GlobalHoldToTalk` / `L3GlobalWithMouseButtons`. -2. **`FocusedPttBackend`** — fallback when permission is `Denied`, `Undetermined`, or revoked at runtime. Reports `L0Focused`. - -The audio engine starts immediately on user request; the permission state is queried in parallel and the capability level is upgraded asynchronously through `BridgeEvent::PttCapability` if the user grants the permission. This avoids blocking voice functionality on a permission prompt. - -### 5.3 Linux - -Two-level ladder restricted to the officially-tested environment per DEC-025. - -**Selection** at `try_select()` time: - -* Reads `XDG_SESSION_TYPE` (must equal `wayland`) and `XDG_CURRENT_DESKTOP` (must contain `gnome` or `gnome-flashback`). -* Probes `org.freedesktop.portal.GlobalShortcuts` via a blocking `version` property read. - -If either check fails the factory returns `None` and the caller falls back to `FocusedPttBackend` at `L0Focused`. - -**Live session lifecycle (Q5b — lazy, single backend instance):** - -1. `start(gate, binding)` spawns a worker `tokio::spawn` task. The worker owns its own async `zbus::Connection` and a `GlobalShortcutsProxy`. -2. The worker calls `CreateSession` with fresh `handle_token` / `session_handle_token` values (random `u32` per process). The portal returns a `Request` object path; the worker subscribes to the `Response` signal on that path and awaits the session handle from the `results` dict. -3. The worker then calls `BindShortcuts(session_handle, [("chanora-ptt", { description: "Chanora push-to-talk" })], "", {})`. The portal opens its own system-managed dialog asking the user to choose a key — Chanora does not read raw key events. The audio engine continues at `L0Focused` while the dialog is open (the descriptor watch publishes the transition once the portal returns). -4. Once `BindShortcuts` resolves: - * On `response_code == 0`: classify the `trigger_description` substring heuristically (`mouse` → `mouse-side-button`; otherwise `keyboard`), publish `descriptor() = L2GlobalHoldToTalk` (or `L3GlobalWithMouseButtons` for the mouse case) through the watch sender. The trigger_description string itself is never logged. **Mouse-side-button support on Linux is portal-dependent (SRS-200 / DEC-026):** the backend never offers a fixed "Mouse4 / Mouse5" capture path; the portal's own dialog decides which inputs it accepts in the current session, and Chanora honours whatever it returns. The classifier degrades to `keyboard` whenever the portal's description does not contain `mouse`. - * On `response_code == 1` (user cancelled) or `> 1` (other failure): publish `descriptor() = L0Focused` through the watch sender. The user can retry via the UI "Configure" button. -5. The worker then enters its long-lived loop, multiplexing on the command channel (`Rebind` / `Stop`) and the portal's `Activated` / `Deactivated` signals. Signal payloads scoped to a different session handle or shortcut id are ignored. Matching `Activated` calls `gate.set(true)`; matching `Deactivated` calls `gate.set(false)`. -6. `rebind(binding)` sends a command to the worker which re-runs `BindShortcuts` on the same session. The portal opens its dialog again; the user can pick a new key. -7. `stop()` (or backend Drop) signals the worker, which calls `Request::Close` on the session handle, calls `gate.set(false)`, and exits. - -**UX implication on Linux:** the in-app `_PttBindingCaptureDialog` (used by Windows and macOS in MVP) is **skipped** when the active backend is `gnome-wayland-portal`. The Flutter "Configure" button calls `setPttBinding` directly with a sentinel `platform_key = "portal"` and shows a SnackBar telling the user their desktop will open its own shortcut dialog. This matches the portal's design (DEC-027 / Q3a). - -**Per DEC-025 the application does not claim Global PTT support on an untested Linux environment.** The UI capability badge explicitly notes "Focused PTT — untested compositor for Global PTT" when the user runs Chanora outside GNOME-on-Wayland. - -## 6. Privacy Rule - -Per SysRS-302 and SRS-202: - -- Raw key codes, scan codes, virtual-key values, keysyms, and key-press timing sequences shall not be logged, persisted, or included in any user-initiated diagnostic export. -- The `PttSanitizer` log-sink decorator enforces this at write time by inspecting field names and dropping records whose field names match a banned list (`key_code`, `scan_code`, `virtual_key`, `vk`, `keysym`, `keysym_string`, `key_sequence`). The check is structural — it does not rely on a content scan. -- The diagnostic export shall name only the capability level (`PttCapabilityLevel::as_str()`), the backend identifier (a fixed `&'static str` per implementation), and the bound input class (`"keyboard"`, `"mouse-side-button"`). - -## 7. Audio Gate Rule - -Per SRS-201: - -- `capture_active: AtomicBool` is set by the audio engine on input-stream lifecycle transitions (stream opened or closed) and by the platform input-permission state. The PTT subsystem does not write `capture_active`. -- `transmit_active: AtomicBool` lives inside `AudioTransmitGate`. The Opus encoder feed reads it once per outbound frame; the gate is the only mutator path. -- A muted self-input (per `set_input_muted`) forces `transmit_active` to false regardless of the PTT subsystem's wish; this preserves the existing self-mute semantics. - -## 8. Missed-Key-Up Watchdog - -Per SRS-203 / DEC-028: - -- The audio engine spawns one `MissedKeyUpWatchdog` task per audio session. -- It subscribes to `AudioTransmitGate`'s `watch::Receiver` and notes the timestamp of each `false -> true` transition. -- On each `true -> false` transition it clears the timestamp. -- If a `true` lifetime exceeds the configured ceiling (default 30 s, owner-tunable through a future setting), the watchdog calls `AudioTransmitGate::set(false)` and emits a sanitised diagnostic line naming only the capability level and backend identifier. - -## 9. Release Readiness - -Per SysDes-148 and the release-readiness record: - -- Every release artefact carries a per-platform capability-evidence row listing the detected `PttCapabilityLevel`, the active backend identifier, and whether the Focused fallback was exercised during verification. -- Release notes shall mirror that evidence and shall not over-claim Global PTT support. - -## 10. Traceability - -``` -SysRS-296..302 - -> SysDes-142..148 - -> SRS-195..203 - -> SAD-071..079 - -> SDD-081..092 -``` - -Verification coverage: - -``` -SDD-081..092 -> SWE4-UV-035..039 -SAD-071..079 + SDD-081..092 -> SWE5-IV-015 -SRS-195..203 -> SWE6-SV-017 -SysDes-142..148 -> SYS4-SIV-016 -``` - -## 11. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Initial baseline-candidate architecture for capability-based desktop Push-to-Talk. Codifies the owner rulings for PTT-OPEN-001 through PTT-OPEN-006 as DEC-023 through DEC-028. | -| 0.9.4 | 2026-05-15 | Promoted the Linux GNOME-Wayland backend from probe-only to the live `CreateSession` + `BindShortcuts` + `Activated` / `Deactivated` session flow. Owns an async tokio task with a dedicated `zbus::Connection`; publishes descriptor transitions through a `watch::Sender` consumed by `chanora_core::ChanoraSession::start_audio`. Adds the privacy-safe `trigger_description` classifier and the cancellation / failure path (downgrade to `L0Focused` + re-emit). Updates the Flutter UI to skip the in-app capture dialog on the portal backend (Q3a) and surface a SnackBar redirecting the user to the desktop's own dialog. | - -## 8. v0.9.5 lifecycle and mode-picker addendum - -This addendum captures the v1 audio + PTT lifecycle refactor recorded in SysRS-303..304, SysDes-149..151, SRS-204..207, SAD-081..083, and SDD-094..097. It does not change the desktop PTT backend design captured in §1–§7; it constrains how the backends are owned and how the rest of the audio path is exposed to the UI. - -1. **No "Start audio" button anywhere.** The audio engine lifecycle is bound to voice-channel membership. Input and output streams open on the user's first voice-channel join of the session and close on the last voice-channel leave. The bridge surface drops `start_audio` / `stop_audio` and exposes `voice_join(channel_id) -> Result<(), VoiceError>` and `voice_leave() -> Result<(), VoiceError>`; `AudioEngine::ensure_running()` is invoked implicitly by `voice_join` and is idempotent. The Voice Bar renders from `BridgeEvent::VoiceState { in_channel, transmit_mode, mute, release_tail_ms }` and contains no manual-start affordance. Microphone permission is requested at app first launch rather than at first channel join; the output stream opens regardless of permission state, so listen-only is a first-class flow. -2. **Transmit modes for v1 are `Ptt` and `Continuous`; `VoiceActivity` is reserved but not implemented.** `TransmitMode` is a `#[repr(u8)]` enum mirrored across the bridge; the default on fresh install is `Ptt`; the setting is persisted per identity in the identity store. The settings page renders `VoiceActivity` as a disabled "coming soon" radio row until DEC-030 is resolved and a VAD backend is allocated. -3. **200 ms PTT release tail (configurable 0–500 ms).** A `ReleaseTailTimer` tokio adapter sits between the `DesktopPttBackend` `transmit` signal and `AudioTransmitGate::set()`. Key-down forwards `true` immediately; key-up starts a sleep of `release_tail_ms` (default 200, matching the TeamSpeak / Mumble default) before the gate closes; a key-down within the sleep window cancels the pending close. The tail affects only `transmit_active`; `capture_active` is unaffected. The adapter is independent of the missed-key-up watchdog (SAD-079 / SDD-092). -4. **Hard-mute overrides everything.** The Voice Bar hard-mute toggle is applied by the `TransmitModeSelector` as a final clamp on `transmit_active` and takes precedence over the active transmit mode, the PTT key state, and every other internal signal. Hard-mute is in-session only and resets on the next voice-channel join. -5. **Cross-references.** **DEC-029** locks the v1 PTT capture path to the native Rust `DesktopPttBackend` trait + per-OS implementations (SDD-083 / SDD-084 / SDD-085) and rejects Flutter global-hotkey packages such as `hotkey_manager` and `super_hot_key`, which wrap the OS `RegisterHotKey` semantics, consume the key, drop key-up events, and skip mouse side-buttons. **DEC-030** defers Voice Activity Detection to P1 pending a backend trade-off review (RMS vs WebRTC VAD vs Silero VAD); the enum surface is preserved so a P1 increment is non-breaking. - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added the v0.9.5 lifecycle and mode-picker addendum capturing the no-manual-start audio engine bound to voice-channel membership, the v1 transmit-mode set (`Ptt` default + `Continuous`, with `VoiceActivity` reserved per DEC-030), the 200 ms (0–500 ms) PTT release tail, and the hard-mute override. Cross-references DEC-029 (native PTT backend locked) and DEC-030 (VAD deferred to P1). | diff --git a/docs/architecture/proof-of-concept-plan.md b/docs/architecture/proof-of-concept-plan.md deleted file mode 100644 index 8949bbc..0000000 --- a/docs/architecture/proof-of-concept-plan.md +++ /dev/null @@ -1,66 +0,0 @@ -# Proof-of-Concept Plan - -**Document type:** Architecture / Proof-of-Concept Plan -**Version:** 0.3.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/architecture/proof-of-concept-plan.md` - ---- - -## 1. Purpose - -This document defines technical proof-of-concept work that should be completed before heavy product implementation. - -## 2. Required PoCs - -| PoC | Purpose | Exit criteria | Status | -|---|---|---|---| -| Flutter/Rust bridge hello | Prove command/result/event DTO boundary | Flutter can call Rust and receive event stream data | **PASS** — `poc/flutter_rust_bridge_hello/VERIFICATION.md` (Linux desktop, 3/3 tests, 2026-05-13). Closes DEC-014. | -| `tsclientlib` connect spike | Prove protocol feasibility | Rust can connect to a compatible server/test double | **PASS** — `poc/tsclientlib-connect-spike/VERIFICATION.md` (live against `cn.teamspeak.app`, 2026-05-13). | -| Audio capture/playback spike | Prove platform audio behavior | Capture/playback works on at least one desktop and one mobile target | **PASS** — desktop half: `poc/audio-capture-playback-spike/VERIFICATION.md` (Linux/PipeWire, 2026-05-13). Mobile half: `poc/audio-capture-playback-android-spike/VERIFICATION.md` (Android 14 arm64-v8a on a physical Motorola Moto G Stylus 5G, 2026-05-13). Closes DEC-011.1 for desktop + Android; iOS still Deferred. | -| Secure storage spike | Prove secret storage behavior | Secret write/read/delete works through platform secure storage | **PASS (Linux only)** — `poc/secure-storage-spike/VERIFICATION.md` (6/6 audit tests, 2026-05-13). Closes DEC-013.2 (Linux backend policy). | -| SQLite storage spike | Prove local non-secret persistence | Schema, migration, and repository pattern are demonstrated | **PASS** — `poc/sqlite-storage-spike/VERIFICATION.md` (11/11 tests, 2026-05-13). Closes DEC-013.1. | -| Diagnostics redaction spike | Prove redaction before export | Password and identity-secret samples are redacted | **PASS** — `poc/diagnostics-redaction-spike/VERIFICATION.md` (REDACT-TC-001..010, 2026-05-13). | - -## 3. PoC Directory - -Recommended future location: - -```text -poc/ - flutter-rust-bridge-hello/ - tsclientlib-connect-spike/ - audio-capture-playback-spike/ - secure-storage-spike/ - sqlite-storage-spike/ - diagnostics-redaction-spike/ -``` - -## 4. Rule - -A PoC is not product code unless explicitly promoted. - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial proof-of-concept plan. | -| 0.2.0 | 2026-05-14 | Recorded PoC outcomes: 5 PASS, 1 PARTIAL PASS (mobile half of audio still open). Added Status column. Spike directories live under `poc/`; see `poc/README.md` and `docs/governance/poc-results-summary.md`. | -| 0.3.0 | 2026-05-14 | Audio PoC promoted from PARTIAL PASS to PASS after `poc/audio-capture-playback-android-spike` verified the mobile half on a physical Android device. All six PoC plan entries are now PASS. iOS is explicitly deferred per DEC-011.1 and remains an open follow-up but is no longer a PoC-plan gap. | - - -## Desktop Push-to-Talk PoC Items (Baseline Candidate 0.9.3) - -| PoC ID | Purpose | Owner | Acceptance | -|---|---|---|---| -| PoC-PTT-001 | Confirm `WindowsRawInputBackend` registers under `RIDEV_INPUTSINK` and forwards key + mouse-button events while Chanora is not focused. | Windows Platform Owner | Live press-release sequence toggles `transmit_active` on a Windows 10/11 reference host with another window focused. | -| PoC-PTT-002 | Confirm `MacOSEventTapBackend` works under granted Input Monitoring permission and degrades to `L0Focused` under denied permission. | macOS Platform Owner | Live measurement on a macOS reference host both before and after granting Input Monitoring; permission revocation degrades capability without crashing. | -| PoC-PTT-003 | Confirm `LinuxGnomeWaylandBackend` binds a shortcut via the GlobalShortcuts portal and receives `Activated` / `Deactivated` signals on a GNOME-on-Wayland reference host. | Linux Platform Owner | Portal dialog accepts a binding; press-release sequence toggles `transmit_active` outside the Chanora window. | -| PoC-PTT-004 | Confirm `PttSanitizer` drops records with banned key field names. | Diagnostics Owner | Unit test passes; manual diagnostic export inspection on a host with PTT bound to a real key shows zero raw key data. | -| PoC-PTT-005 | Confirm `MissedKeyUpWatchdog` clears `transmit_active` after the configured timeout. | Audio Owner | Unit test passes with tokio time paused; integration test on a Windows host where the OS suppresses the key-up event clears within the timeout. | - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop-PTT PoC items PoC-PTT-001..005 covering Windows Raw Input, macOS Event Tap (permission states), Linux GlobalShortcuts portal, diagnostics sanitizer, and missed-key-up watchdog. | diff --git a/docs/architecture/sad.md b/docs/architecture/sad.md deleted file mode 100644 index 1e47f87..0000000 --- a/docs/architecture/sad.md +++ /dev/null @@ -1,1624 +0,0 @@ - -# Chanora SAD — Software Architecture Description - -**Document type:** SAD / Software Architecture Description -**Process alignment:** ASPICE SWE.2 Software Architectural Design -**Version:** 0.9.11 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Architecture baseline:** Flutter + Rust Core -**Lifecycle position:** `SysRS -> SysDes -> SRS -> SAD -> SDD` - -**Repo path:** `docs/architecture/sad.md` --- - -## 1. Purpose - -This Software Architecture Description defines the software architecture for Chanora. - -The SAD is intentionally structured as an architecture document, not only a list of modules. It includes: - -- Stakeholders and concerns -- Architecture drivers and constraints -- System context view -- Container view -- Component view -- Runtime / sequence views -- Deployment view -- Data and storage view -- Security and privacy view -- Diagnostics and observability view -- UI architecture view -- Audio architecture view -- Protocol architecture view -- Internationalization architecture view -- Architecture decision records -- SRS-to-SAD traceability - -## 2. Strict Traceability Rules - -The documentation hierarchy is: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -``` - -The SAD shall use only the SRS layer as its direct source. - -Rules: - -```text -SAD items shall use Source SRS only. -SAD items shall not use direct system-requirement sources. -SAD items shall not use direct system-design sources. -SDD items shall use Source SAD only. -``` - -## 3. Stakeholders and Architecture Concerns - -| Stakeholder | Concerns | -|---|---| -| End user | Fast voice access, stable connection, clear UI, safe controls | -| Power user | Audio configuration, diagnostics, reliable reconnect | -| Software team | Clear module boundaries, testability, maintainability | -| Platform team | OS permissions, audio routing, lifecycle behavior, packaging | -| QA team | Traceability, test seams, platform coverage, regression verification | -| Security reviewer | Secret storage, redaction, input validation, diagnostics safety | -| UX designer | Material 3 consistency, adaptive layout, accessibility, i18n | -| Release operator | Repeatable builds, signing, packaging, release metadata | - -## 4. Architecture Drivers - -| Driver | Architectural impact | -|---|---| -| Flutter + Rust Core | UI and core logic are separated by bridge DTOs and event streams. | -| `tsclientlib` | Protocol integration is isolated inside a protocol adapter. | -| Cross-platform operation | Platform behavior is isolated behind platform services and adapters. | -| Low-latency voice | Real-time audio processing is isolated from UI rendering. | -| Material 3 baseline | UI architecture uses a design-system layer above Material 3. | -| Strict traceability | SAD derives only from SRS and SDD derives only from SAD. | -| i18n readiness | Product localization, server content, Unicode, and diagnostics text are separated. | -| Diagnostics and support | Logging, redaction, exports, and machine-readable diagnostics are centralized. | - -## 5. Context View - -```text -User - -> Chanora Flutter Client - -> Rust Core - -> tsclientlib Protocol Adapter - -> External TeamSpeak-compatible Server - -Chanora Flutter Client - -> Operating System Services - -> Audio devices - -> Secure storage - -> Permissions - -> Notifications - -> Lifecycle / insets / routing -``` - -### Context boundaries - -Inside Chanora software: - -- Flutter app shell -- Chanora design system -- Feature modules -- Flutter state and view models -- Bridge facade -- Rust Core -- Protocol adapter -- Audio subsystem -- Storage subsystem -- Diagnostics subsystem -- Localization subsystem -- Platform service abstractions - -Outside Chanora software: - -- External compatible voice servers -- Operating systems -- Physical audio devices -- App stores / package repositories -- Network infrastructure - -## 6. Container View - -```text -+---------------------------------------------------------------+ -| Flutter Application Container | -| App Shell | -| Design System | -| Adaptive Shell | -| Feature Modules | -| Flutter State / View Models | -| Localization Service | -| Platform Services | -+------------------------- Bridge DTOs / Events ----------------+ -| Rust Core Container | -| Connection Manager | -| State Synchronization | -| Protocol Adapter | -| Audio Engine | -| Storage Services | -| Diagnostics | -+---------------------------------------------------------------+ -``` - -| Container | Responsibility | -|---|---| -| Flutter Application Container | UI, navigation, Material 3 theming, accessibility, localization, platform presentation | -| Bridge Container | Stable DTOs, commands, event streams, error mapping | -| Rust Core Container | Authoritative connection, protocol coordination, state, audio, storage, diagnostics | -| Platform Services Container | OS-specific services exposed to Flutter/Rust boundaries | -| External Server | Compatible server providing channels, users, voice, and text | - -## 7. Component View - -### 7.1 Flutter application components - -| Component | Responsibility | -|---|---| -| `app_shell` | App initialization, routing, global providers, theme mode, localization bootstrap | -| `design_system` | Material 3 configuration, Chanora tokens, typography, shapes, motion, density | -| `adaptive_shell` | Compact, medium, expanded layout branching | -| `features/connect` | Manual connection and bookmark entry | -| `features/server` | Channel tree, users, connection status | -| `features/voice` | Voice controls and audio settings | -| `features/chat` | Channel text UI | -| `features/settings` | User settings, audio processing settings, i18n options | -| `features/diagnostics` | Redacted diagnostics and export flow | -| `state` | View models derived from Rust Core events | -| `localization` | Product string resources and fallback | -| `platform_services` | Insets, back intent, haptics, permissions, platform behavior | - -### 7.2 Rust components - -| Component | Responsibility | -|---|---| -| `chanora_core` | Top-level Rust API, connection orchestration, command handling | -| `chanora_protocol` | `tsclientlib` isolation and protocol event mapping | -| `chanora_state` | Snapshot, delta, reducers, authoritative state model | -| `chanora_audio` | Capture, processing, encode/decode, jitter, mixing | -| `chanora_storage` | Bookmarks, settings, identity references, non-secret data | -| `chanora_diagnostics` | Logs, redaction, event recording, export | -| `chanora_bridge` | Flutter/Rust DTOs, API, event streams | - -## 8. Runtime Views - -### 8.1 Application startup - -```text -Start process - -> Initialize platform bindings - -> Load localization baseline - -> Build Material 3 theme - -> Register Chanora design tokens - -> Initialize bridge facade - -> Initialize app router - -> Render adaptive shell -``` - -### 8.2 Connect to server - -```text -User submits connection - -> Connect feature controller - -> Bridge command - -> Rust Core connection manager - -> Protocol adapter - -> tsclientlib - -> External server - -> Snapshot fetch - -> State reducer - -> Core event stream - -> Flutter view model - -> Server screen render -``` - -### 8.3 Incoming server event - -```text -External server event - -> tsclientlib - -> Protocol adapter - -> Internal protocol event - -> State reducer - -> Core event - -> Bridge stream - -> Flutter state - -> UI update -``` - -### 8.4 Outgoing voice - -```text -Microphone - -> Platform capture - -> Audio pipeline - -> High-pass filter - -> Noise suppression - -> Echo canceller - -> Automatic gain control - -> Push-to-talk / mute gate - -> Encoder - -> Protocol adapter - -> External server -``` - -### 8.5 Incoming voice - -```text -External server - -> Protocol adapter - -> Jitter buffer - -> Decoder - -> Per-user mute / volume - -> Mixer - -> Platform playback -``` - -### 8.6 Product-localized text rendering - -```text -String key - -> Localization service - -> Locale lookup - -> Fallback if missing - -> Flutter text widget - -> Accessibility semantics -``` - -### 8.7 Server-content rendering - -```text -Server-provided text - -> Protocol boundary conversion if required - -> UTF-8 internal representation - -> DTO / state - -> Flutter UI - -> Display without translation -``` - -## 9. Deployment View - -| Platform | Deployment form | -|---|---| -| Windows | Signed installer or packaged desktop artifact | -| macOS | Signed and notarized application bundle | -| Linux | Selected package format such as AppImage, Flatpak, deb, or rpm | -| Android | AAB/APK with platform permissions and foreground voice behavior | -| iOS | TestFlight/App Store build with platform permission and audio session behavior | - -Deployment architecture separates: - -- Build scripts -- Signing assets -- Store metadata -- Release notes -- Platform permission declarations -- Runtime configuration - -## 10. Data and Storage View - -| Data type | Storage architecture | -|---|---| -| Bookmarks | Local database / repository | -| Recent servers | Local database / repository | -| Audio settings | Local database / repository | -| UI preferences | Local database / repository | -| Identity secrets | Platform secure storage | -| Server passwords | Platform secure storage | -| Diagnostic bundles | User-initiated generated export | -| Protocol state | Runtime state, rebuilt from snapshot | -| Product localization | Static or packaged localization resources | -| Server content | Runtime content, optionally session-level persistence later | - -## 11. Security and Privacy View - -Security architecture rules: - -- Secrets are not stored in plaintext. -- Passwords and identity secrets are stored through platform secure storage. -- Logs and diagnostic exports are redacted. -- User-visible errors do not expose internal stack traces. -- Diagnostics export requires user action. -- Protocol and platform text conversions occur only at explicit boundaries. -- Product localization does not translate server-provided content. - -## 12. Diagnostics and Observability View - -Diagnostics components provide: - -- Structured logs -- Redaction -- Network diagnostics -- Audio diagnostics -- Protocol event recording where enabled -- Event replay support where enabled -- User-initiated diagnostic export -- Stable language-neutral diagnostic keys -- Localizable diagnostic display descriptions - -## 13. UI Architecture View - -```text -Material 3 - -> Chanora Design System - -> Tokens - -> Component themes - -> Chanora components - -> Feature screens - -> View models -``` - -Rules: - -- Feature screens do not hardcode semantic colors, spacing, shapes, or motion. -- Design system owns Material 3 mapping. -- Components own accessibility semantics for common controls. -- Voice and connection controls remain visible or directly reachable across layouts. -- Adaptive shell owns layout class selection. - -## 14. Audio Architecture View - -The audio subsystem is separate from UI rendering. - -Key elements: - -- Platform capture -- Audio preprocessing -- Echo cancellation -- Automatic gain control -- Noise suppression -- High-pass filtering -- Voice activity and metering -- Push-to-talk and mute gate -- Opus-compatible encode/decode -- Jitter buffer -- Mixer -- Playback routing - -## 15. Protocol Architecture View - -The protocol subsystem isolates all `tsclientlib` interaction. - -Rules: - -- Flutter does not call `tsclientlib`. -- Rust Core does not expose raw protocol library types to Flutter. -- Protocol events are converted to internal protocol events. -- Protocol errors are converted to user-safe error models. -- Reconnect orchestration remains above protocol adapter behavior when required. - -## 16. Internationalization Architecture View - -i18n architecture separates: - -| Text type | Handling | -|---|---| -| Product strings | Localized | -| Accessibility labels | Localized | -| Settings labels | Localized | -| Error descriptions | Localized where user-facing | -| Diagnostic keys | Stable and language-neutral | -| Server names | Preserved, not translated | -| Channel names | Preserved, not translated | -| Client nicknames | Preserved, not translated | -| Chat messages | Preserved, not translated | - -UTF-8 is the internal representation for cross-layer text. Conversion occurs only at protocol or platform boundaries. - -## 17. Architecture Decisions - -| ADR | Decision | Status | -|---|---|---| -| ADR-001 | Use Flutter for cross-platform UI | Accepted | -| ADR-002 | Use Rust Core for protocol, state, audio, storage, and diagnostics logic | Accepted | -| ADR-003 | Use `tsclientlib` and isolate it in the protocol adapter | Accepted | -| ADR-004 | Use Material 3 as UI design baseline | Accepted | -| ADR-005 | Define Chanora Design System above Material 3 | Accepted | -| ADR-006 | Use strict `SysRS -> SysDes -> SRS -> SAD -> SDD` traceability | Accepted | -| ADR-007 | Do not let SAD link directly to system requirement or system design IDs | Accepted | -| ADR-008 | Use UTF-8 internally and boundary-only string conversion | Accepted | -| ADR-009 | Treat server-provided text as content, not product localization | Accepted | - - -## 18. SWE.2 Architecture Completeness and Evaluation Criteria - -The architecture shall be evaluated against the following SWE.2 criteria before baseline approval and after architecture-affecting changes. - -| Criterion | Architecture evidence | -|---|---| -| Software elements are identified | Component View and Software Architecture Items | -| Software requirements are allocated | SRS-to-SAD coverage matrix | -| Interfaces are defined | Interface Catalog | -| Dynamic behavior is defined | Runtime Views | -| Resource consumption objectives are considered | Performance and Resource View | -| Architecture is technically feasible | Architecture evaluation checklist | -| Architecture is testable | Verification hooks and test seams | -| Traceability is maintained | Direct `Source SRS` references only | -| Consistency is maintained | View consistency checklist and change impact review | -| Architecture is communicated | Change History and baseline approval record | - -## 19. Interface Catalog - -The interface catalog records software architectural interfaces. Detailed design shall refine these interfaces in the SDD. - -| Interface ID | Interface | Producer | Consumer | Data / message | Error handling | Source SAD | -|---|---|---|---|---|---|---| -| IF-SAD-001 | Flutter command bridge | Flutter Feature Controller | Rust Bridge Facade | Command DTO | Bridge error DTO | SAD-040 | -| IF-SAD-002 | Rust event stream | Rust Core | Flutter State | Core event DTO | Stream close / error event | SAD-041 | -| IF-SAD-003 | Protocol adapter boundary | Rust Core | Protocol Adapter | Protocol command / event | Protocol error mapping | SAD-032 | -| IF-SAD-004 | Audio capture boundary | Platform Audio | Audio Subsystem | Audio frame | Device unavailable / underrun | SAD-034 | -| IF-SAD-005 | Audio playback boundary | Audio Subsystem | Platform Audio | Mixed audio frame | Device unavailable / route changed | SAD-034 | -| IF-SAD-006 | Secure storage boundary | Storage Service | Platform Secure Storage | Secret key/value | Secure-store error | SAD-035 | -| IF-SAD-007 | Localization lookup | Flutter UI | Localization Service | String key + parameters | Missing-key fallback | SAD-020 | -| IF-SAD-008 | Server-content text path | Protocol Adapter | Flutter UI | UTF-8 content text | Boundary conversion error | SAD-021, SAD-022 | -| IF-SAD-009 | Diagnostics export | Diagnostics | File/share target | Redacted diagnostic bundle | Export failure | SAD-036, SAD-050 | -| IF-SAD-010 | Platform behavior service | Flutter Shell | Platform Services | Insets, back, haptics, permissions | Unsupported platform behavior | SAD-017, SAD-018, SAD-019 | - -## 20. Performance and Resource View - -| Area | Objective | Architecture mechanism | -|---|---|---| -| UI responsiveness | Avoid blocking UI during connection, sync, reconnect, and diagnostics export | Async bridge calls, view models, Rust Core background work | -| Audio latency | Minimize local audio pipeline latency | Dedicated audio subsystem and platform audio adapters | -| Memory growth | Avoid unbounded growth in logs, audio buffers, chat history, and event queues | Bounded buffers, retention policies, diagnostic export controls | -| Reconnect | Rebuild state after recoverable connection failure | Connection manager, fresh snapshot, state reducer | -| Localization | Avoid runtime string lookup failures | Baseline English fallback and localization service tests | -| Diagnostics | Export without leaking secrets | Central redaction and export service | - -## 21. Assumptions and Dependencies - -| ID | Assumption / Dependency | Impact | -|---|---|---| -| SAD-ASM-001 | Flutter Material 3 support is available on the target Flutter version. | Design System depends on Material 3 widgets and ThemeData behavior. | -| SAD-ASM-002 | Rust and Flutter bridge tooling supports stable DTO generation. | Bridge and event stream interfaces depend on stable generated bindings. | -| SAD-ASM-003 | `tsclientlib` supports or can be adapted for required MVP protocol behavior. | Protocol Adapter feasibility depends on library capability. | -| SAD-ASM-004 | Target operating systems expose required audio, permission, and secure storage services. | Platform Services depend on OS capabilities. | -| SAD-ASM-005 | Flutter text rendering can preserve Unicode and support bidirectional text where platform engines support it. | i18n architecture depends on platform text support. | - -## 22. Architecture Glossary - -| Term | Meaning | -|---|---| -| App Shell | Top-level Flutter composition root for routing, initialization, theme, localization, and adaptive layout | -| Design System | Chanora UI layer that maps Material 3 and product semantic tokens to components | -| Bridge Facade | Software boundary used by Flutter to call Rust Core and receive Rust events | -| Runtime View | Architecture view describing runtime interaction, sequence, or state behavior | -| Interface Catalog | Architectural list of software interfaces to be refined by detailed design | -| ADR | Architecture Decision Record | -| Product string | User-visible string owned by Chanora and eligible for localization | -| Server content | User/server-provided text received from a compatible voice server and displayed without translation | - - -## 23. Software Architecture Items - -**SAD-001**: The architecture shall use a Flutter App Shell as the top-level software composition root. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter App Shell -- Source SRS: SRS-144, SRS-149, SRS-151, SRS-184 -- Verification method: Review, Inspection - -The shell initializes routing, theme, localization, adaptive layout, platform services, and feature containers before rendering feature screens. - -**SAD-002**: The architecture shall use a Chanora Design System package above Material 3. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Design System -- Source SRS: SRS-145, SRS-146, SRS-147, SRS-148, SRS-149 -- Verification method: Review, Widget Test - -The design system contains product tokens, Material 3 theme configuration, component themes, and product semantic mappings. - -**SAD-003**: The architecture shall isolate feature screens from direct theme-token construction. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Feature Modules, Design System -- Source SRS: SRS-150 -- Verification method: Static Inspection - -Feature screens consume design-system APIs and components instead of creating colors, spacing, shape, or motion locally. - -**SAD-004**: The architecture shall implement connection-state token mapping in the design system. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Design System -- Source SRS: SRS-146, SRS-148 -- Verification method: Unit Test - -Connection states such as connected, connecting, reconnecting, disconnected, and error map to product semantic tokens. - -**SAD-005**: The architecture shall implement voice-state token mapping in the design system. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Design System -- Source SRS: SRS-147 -- Verification method: Unit Test - -Voice states such as speaking, muted, deafened, and push-to-talk active map to product semantic tokens. - -**SAD-006**: The architecture shall implement latency, packet-loss, diagnostics, and error token mapping. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Design System -- Source SRS: SRS-148 -- Verification method: Unit Test - -Latency, packet loss, diagnostics severity, warning, and error semantics are separated from Material base colors. - -**SAD-007**: The architecture shall expose tokens through Flutter theming mechanisms. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Design System -- Source SRS: SRS-149 -- Verification method: Widget Test - -ThemeData, ColorScheme, component themes, TextTheme, and ThemeExtension are the allowed token access mechanisms. - -**SAD-008**: The architecture shall provide an Adaptive Shell that owns window-class resolution. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter App Shell -- Source SRS: SRS-151, SRS-152, SRS-153, SRS-154 -- Verification method: Widget Test, Integration Test - -Window class is resolved once at shell level and passed into layout composition. - -**SAD-009**: The architecture shall implement a compact layout branch. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Adaptive Shell -- Source SRS: SRS-152, SRS-155, SRS-156 -- Verification method: Integration Test - -Compact layout uses single-column content and keeps connection and voice controls visible or directly reachable. - -**SAD-010**: The architecture shall implement a medium layout branch. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Adaptive Shell -- Source SRS: SRS-153, SRS-155, SRS-156 -- Verification method: Integration Test - -Medium layout supports side navigation or navigation rail and main content. - -**SAD-011**: The architecture shall implement an expanded layout branch. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Adaptive Shell -- Source SRS: SRS-154, SRS-155, SRS-156 -- Verification method: System Test - -Expanded layout supports persistent panes and persistent voice controls. - -**SAD-012**: The architecture shall implement a Connection Status UI component. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Components, Feature Modules -- Source SRS: SRS-155, SRS-159 -- Verification method: Widget Test - -Connection state is displayed with non-color-only cues. - -**SAD-013**: The architecture shall implement a persistent VoiceBar component. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Components, Voice Feature -- Source SRS: SRS-156 -- Verification method: Widget Test, Integration Test - -VoiceBar exposes mute, deaf, push-to-talk, input level, current channel, and latency summary. - -**SAD-014**: The architecture shall implement accessible semantics for critical controls. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Components, Localization -- Source SRS: SRS-157, SRS-158, SRS-159 -- Verification method: Accessibility Test - -Critical controls expose semantic labels and state descriptions. - -**SAD-015**: The architecture shall implement keyboard focus traversal for desktop and tablet keyboard use. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Source SRS: SRS-160 -- Verification method: Widget Test, System Test - -Focusable components use a predictable traversal order and visible focus indication. - -**SAD-016**: The architecture shall protect critical controls under increased text scaling. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Adaptive Shell, Components -- Source SRS: SRS-161 -- Verification method: Accessibility Test - -Shell and components are designed to avoid clipping or loss of critical actions when text scale increases. - -**SAD-017**: The architecture shall centralize safe-area and inset handling. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Platform Services -- Source SRS: SRS-162 -- Verification method: Platform Test - -Safe area, display cutout, system bars, keyboard, and desktop inset handling is performed through shared shell utilities. - -**SAD-018**: The architecture shall model Android back behavior through platform services. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Platform Services -- Source SRS: SRS-163 -- Verification method: Platform Test - -Back behavior is represented as an intent handled by route and shell policy. - -**SAD-019**: The architecture shall model iOS navigation, keyboard avoidance, safe area, and haptics through platform services. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Platform Services -- Source SRS: SRS-164 -- Verification method: Platform Test - -iOS behavior is not hardcoded in feature screens. - -**SAD-020**: The architecture shall implement a Localization Service for product-owned strings. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Localization Service -- Source SRS: SRS-165, SRS-166, SRS-167, SRS-168, SRS-169 -- Verification method: Unit Test, Integration Test - -Product strings are loaded from localization resources with English fallback. - -**SAD-021**: The architecture shall separate product localization from server-provided content. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Localization Service, Protocol DTOs, Flutter UI -- Source SRS: SRS-170 -- Verification method: Integration Test - -Server content is displayed as content and is not translated by the client. - -**SAD-022**: The architecture shall preserve Unicode through protocol, bridge, state, and UI paths. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Bridge, Rust Core, Flutter UI -- Source SRS: SRS-171, SRS-172 -- Verification method: Integration Test - -DTOs and internal state use UTF-8 compatible representations. - -**SAD-023**: The architecture shall isolate non-UTF-8 conversion in boundary adapters. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Platform Adapter, Bridge -- Source SRS: SRS-173 -- Verification method: Inspection, Integration Test - -Encoding conversion is not permitted in feature screens or general business logic. - -**SAD-024**: The architecture shall preserve multilingual content in diagnostics except for intentional redaction. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Diagnostics, Storage -- Source SRS: SRS-174 -- Verification method: Test, Audit - -Diagnostic payload builders preserve Unicode values while applying redaction policy. - -**SAD-025**: The architecture shall support bidirectional text where the platform text engine supports it. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Source SRS: SRS-175 -- Verification method: Localization Test - -Text widgets are selected and configured to allow natural bidirectional rendering. - -**SAD-026**: The architecture shall centralize locale-aware formatting. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Localization Service, Diagnostics UI -- Source SRS: SRS-176 -- Verification method: Localization Test - -Date, time, number, and visible diagnostic timestamp formatting occurs through localization utilities. - -**SAD-027**: The architecture shall keep diagnostic machine fields language-neutral. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Diagnostics, Localization Service -- Source SRS: SRS-177, SRS-178 -- Verification method: Inspection, Test - -Diagnostic keys and codes remain stable while display descriptions are localized. - -**SAD-028**: The architecture shall maintain downstream UI/UX and design-system documentation. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: UX, Software Engineering -- Source SRS: SRS-179 -- Verification method: Review - -The UI/UX guideline, token guide, component catalog, adaptive layout guide, and platform guide are treated as supporting baselines. - -**SAD-029**: The architecture shall enforce SRS-only source traceability for SAD. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Software Architecture -- Source SRS: SRS-180, SRS-181, SRS-182 -- Verification method: Inspection - -SAD items contain Source SRS and do not contain lower-layer source IDs. - -**SAD-030**: The architecture shall enforce SAD-only source traceability for SDD. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Software Design -- Source SRS: SRS-183 -- Verification method: Inspection - -Detailed design items are derived from SAD items only. - -**SAD-031**: The architecture shall initialize theme, localization, and platform services before first feature render. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter App Shell -- Source SRS: SRS-184 -- Verification method: Integration Test - -The app shell performs initialization sequencing before rendering user-visible feature content. - -**SAD-032**: The architecture shall isolate TeamSpeak-compatible protocol integration behind Rust protocol components. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Rust Core, Protocol Adapter -- Source SRS: SRS-001 through SRS-030 -- Verification method: Integration Test - -Protocol responsibilities remain outside Flutter feature screens. - -**SAD-033**: The architecture shall isolate authoritative server state in Rust Core and state synchronization components. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync -- Source SRS: SRS-031 through SRS-060 -- Verification method: System Test - -Flutter consumes state events and view models rather than mutating protocol state. - -**SAD-034**: The architecture shall isolate real-time audio processing in the audio subsystem. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Audio -- Source SRS: SRS-061 through SRS-090 -- Verification method: Audio Test - -Capture, preprocessing, encoding, decoding, jitter buffer, and mixing are assigned to audio software components. - -**SAD-035**: The architecture shall isolate local storage and secure storage behavior behind storage components. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Storage, Platform Secure Storage -- Source SRS: SRS-091 through SRS-110 -- Verification method: Security Test, Inspection - -Storage APIs separate non-secret data from secrets. - -**SAD-036**: The architecture shall isolate diagnostics and redaction behavior in diagnostics components. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Diagnostics -- Source SRS: SRS-111 through SRS-124 -- Verification method: Audit, Test - -Logs, event capture, export, and redaction stay centralized. - -**SAD-037**: The architecture shall isolate deployment, release, and packaging support in build and release assets. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Build, Release, Operations -- Source SRS: SRS-125 through SRS-134 -- Verification method: Inspection, Demo - -Packaging and release decisions are outside feature-screen code. - -**SAD-038**: The architecture shall provide verification hooks for requirements traceability and platform validation. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Verification Support -- Source SRS: SRS-135 through SRS-143 -- Verification method: Review, Inspection - -Traceability checks and verification evidence are supported by documentation and test structure. - -**SAD-039**: The architecture shall use view models as the boundary between feature screens and application state. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Flutter State -- Source SRS: SRS-001 through SRS-184 -- Verification method: Unit Test, Review - -Feature screens receive render-ready state and issue user intents through controllers. - -**SAD-040**: The architecture shall use a bridge facade as the only Flutter-to-Rust command boundary. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Bridge Facade -- Source SRS: SRS-001 through SRS-184 -- Verification method: Inspection, Integration Test - -Flutter feature modules call bridge services rather than Rust implementation details. - -**SAD-041**: The architecture shall map asynchronous Rust events into Flutter UI state updates. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Bridge, Flutter State -- Source SRS: SRS-001 through SRS-184 -- Verification method: Integration Test - -Core event streams update UI view models deterministically. - -**SAD-042**: The architecture shall define test seams for theme, localization, adaptive shell, platform services, and bridge facade. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Verification Support -- Source SRS: SRS-165 through SRS-184 -- Verification method: Review, Test - -Test seams allow widget, integration, platform, and golden tests. - -**SAD-043**: The architecture shall support light and dark theme mode behavior. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Design System, Flutter App Shell -- Source SRS: SRS-157 -- Verification method: Widget Test - -Theme mode is controlled centrally and propagates through Material theme data. - -**SAD-044**: The architecture shall allow dynamic color as an optional enhancement without overriding Chanora semantic state tokens. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Design System -- Source SRS: SRS-158 -- Verification method: Widget Test - -Dynamic color affects base Material scheme but not product semantic safety states. - -**SAD-045**: The architecture shall keep future SDD derivation independent from non-SAD requirement IDs. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Software Design -- Source SRS: SRS-183 -- Verification method: Inspection - -The SAD-to-SDD boundary is the only source path for SDD. - -**SAD-046**: The architecture shall include C4-style architecture views in the SAD baseline. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review - -Context, container, component, runtime, deployment, and data views are part of the architecture baseline. - -**SAD-047**: The architecture shall include ADRs for architecturally significant decisions. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review - -ADR entries document the rationale for major design decisions. - -**SAD-048**: The architecture shall identify software stakeholders and architecture concerns. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review - -Stakeholder concerns guide architecture views and tradeoffs. - -**SAD-049**: The architecture shall include deployment and operational architecture views. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Release Architecture -- Source SRS: SRS-125 through SRS-134, SRS-182 -- Verification method: Review, Inspection - -Deployment view covers platform-specific packaging and release architecture. - -**SAD-050**: The architecture shall include diagnostics and observability architecture views. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Diagnostics Architecture -- Source SRS: SRS-111 through SRS-124, SRS-177, SRS-178 -- Verification method: Review, Test - -Diagnostics view covers logs, redaction, event keys, localization, and exports. - - - -**SAD-051**: The architecture shall include a SWE.2 evaluation checklist covering software elements, allocation, interfaces, dynamic behavior, resource objectives, feasibility, testability, traceability, consistency, and communication. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review, Inspection - -The checklist is used before SAD baseline approval and after architecture-affecting changes. - -**SAD-052**: The architecture shall maintain an interface catalog for architecturally significant software interfaces. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review, Inspection - -The catalog records producers, consumers, data/message type, and error handling for each architectural interface. - -**SAD-053**: The architecture shall include performance and resource views for UI responsiveness, audio latency, memory growth, reconnect, localization, and diagnostics. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review, Analysis - -Performance and resource objectives are linked to architecture mechanisms. - -**SAD-054**: The architecture shall document assumptions and dependencies that affect design feasibility. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review - -Assumptions and dependencies are reviewed during change impact analysis. - -**SAD-055**: The architecture shall include a glossary for architecture-specific terms. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P2 / Production -- Allocated to: Software Architecture -- Source SRS: SRS-182 -- Verification method: Review - -The glossary reduces ambiguity across architecture, detailed design, and verification activities. - -**SAD-056**: The architecture shall define software interface error-handling responsibilities at the architectural level. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Software Architecture, Bridge, Rust Core, Platform Services -- Source SRS: SRS-182 -- Verification method: Review, Integration Test - -Each architecturally significant interface identifies error handling responsibilities. - -**SAD-057**: The architecture shall explicitly support detailed design refinement of interface names, types, units, resolutions, ranges, and default values. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Architecture, Software Design -- Source SRS: SRS-183 -- Verification method: Review, Inspection - -The SAD delegates detailed per-unit interface metadata to the SDD. - -**SAD-058**: The architecture shall define software units as the target decomposition level for SWE.3 detailed design. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Architecture, Software Design -- Source SRS: SRS-183 -- Verification method: Review - -Software components are decomposed into software units in the SDD. - -**SAD-059**: The architecture shall define that SDD detail must be sufficient to support implementation and unit verification. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Design, Verification -- Source SRS: SRS-183 -- Verification method: Review, Inspection - -The required SDD detail level is driven by implementation and unit verification needs. - -**SAD-060**: The architecture shall require SAD and SDD changes to be communicated to relevant affected parties before downstream implementation or verification updates are treated as baseline. - -- Status: Baseline -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Software Architecture, Software Design, Verification -- Source SRS: SRS-180, SRS-182, SRS-183 -- Verification method: Review - -Communication evidence is maintained through change history and baseline approval records. - - -## 24. SRS-to-SAD Coverage Matrix - -### 24.1 Cross-cutting + platform-specific allocations - -A single SRS item may be intentionally allocated to more than one SAD item when it has both a cross-cutting concern (logging, diagnostics, lifecycle, error handling, redaction, permission policy) and a platform-specific architectural realization (Android foreground service, iOS background audio session, macOS permission gating, Linux portal binding, etc.). In that case the SAD records both anchors: the cross-cutting anchor covers the concern at the architecture level, and the platform-specific anchor covers the realization on a particular OS. This is a deliberate dual allocation, not a duplication, and the §24.2 matrix marks affected rows explicitly. Worked example: SRS-111 (foreground voice-session behaviour) is allocated both to SAD-036 (cross-cutting diagnostics / lifecycle isolation across SRS-111..124) and to SAD-086 (Android `AndroidVoiceForegroundService` realization). The cross-cutting anchor is the right place to refine concern-wide rules; the platform-specific anchor is the right place to refine the OS-bound element. - -### 24.2 SRS-to-SAD coverage matrix - -| SRS Range | SAD Coverage | -|---|---| -| SRS-001 through SRS-030 | SAD-032, SAD-039, SAD-040, SAD-041 | -| SRS-031 through SRS-060 | SAD-033, SAD-039, SAD-041 | -| SRS-061 through SRS-090 | SAD-034, SAD-039, SAD-041 | -| SRS-091 through SRS-110 | SAD-035 | -| SRS-111 through SRS-124 | SAD-036, SAD-050 (cross-cutting). SRS-111 additionally allocated to SAD-086 (Android-specific realization) per §24.1 dual-allocation pattern. | -| SRS-125 through SRS-134 | SAD-037, SAD-049 | -| SRS-135 through SRS-143 | SAD-038 | -| SRS-144 through SRS-184 | SAD-001 through SAD-031, SAD-039 through SAD-060 | - -## 25. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial SAD baseline covering SRS-001 through SRS-184 and enforcing SRS-only direct traceability. | -| 0.2.0 | 2026-05-14 | Expanded SAD into a full software architecture document with stakeholders, concerns, context/container/component/runtime/deployment/data/security/diagnostics/UI/audio/protocol/i18n views and ADRs. | -| 0.3.0 | 2026-05-14 | Added SWE.2 evaluation checklist, interface catalog, performance/resource view, assumptions/dependencies, glossary, and SDD refinement requirements. | - ---- - -## 26. Platform Baseline and Product Decision Architecture Addendum - -**SAD-061**: The software architecture shall isolate iOS runtime minimum version configuration from feature logic. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: iOS Build Configuration, Platform Services -- Source SRS: SRS-185 -- Verification method: Platform Test, Inspection - -**SAD-062**: The software architecture shall treat Apple App Store SDK compliance as a release pipeline and build configuration responsibility. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Release Pipeline, iOS Build Configuration -- Source SRS: SRS-186 -- Verification method: Release Inspection - -**SAD-063**: The software architecture shall isolate Android runtime minimum version and Play target API compliance in Android build configuration and platform services. The Android minimum runtime baseline is API 28 (Android 9.0) per DEC-004 (Accepted 2026-05-14), which superseded the earlier API 24 recommendation. The `minSdkVersion` / `minSdk` value, the Play target API value, and any conditional platform-capability branching that depends on the minimum baseline shall be expressed in a single Android build-configuration location and consumed by platform services rather than by feature screens; this isolation allows the minimum baseline to be raised, when Flutter, plugin, audio, or platform constraints require it, without touching feature code. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Android Build Configuration, Platform Services, Release Pipeline -- Source SRS: SRS-187, SRS-188 -- Verification method: Platform Test, Release Inspection - -**SAD-064**: The software architecture shall model one active connection as the MVP runtime invariant across UI, Rust Core, state synchronization, audio routing, and protocol adapter components. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, State Sync, Audio Subsystem, Protocol Adapter -- Source SRS: SRS-189 -- Verification method: System Test, Review - -**SAD-065**: The software architecture shall assign audio processing defaults and capability detection to the audio subsystem and settings presentation layer. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Audio, Settings UI -- Source SRS: SRS-190 -- Verification method: Audio Test - -**SAD-066**: The software architecture shall hide platform-native and fallback audio processing implementations behind the audio subsystem interface. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Platform Audio Adapter -- Source SRS: SRS-191 -- Verification method: Architecture Review, Audio Test - -**SAD-067**: The software architecture shall isolate non-secret local persistence in a database repository layer and secret persistence in platform secure storage services. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Storage, Platform Secure Storage -- Source SRS: SRS-192 -- Verification method: Storage Test, Security Audit - -**SAD-068**: The software architecture shall use a stable typed bridge facade with schema-controlled DTO boundaries between Flutter and Rust. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Bridge Facade, Flutter State, Rust Core -- Source SRS: SRS-193 -- Verification method: Integration Test, Architecture Review - -**SAD-069**: The software architecture shall exclude automatic telemetry, automatic diagnostic upload, and automatic crash reporting from MVP components and release configuration. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Diagnostics, Privacy, Release Pipeline -- Source SRS: SRS-194 -- Verification method: Privacy Review, Security Audit - -**SAD-070**: The software architecture shall record the product decisions affecting platform baselines, connection scope, audio defaults, audio implementation path, storage, bridge, diagnostics, and crash reporting in the ADR and decision baseline. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Software Architecture, Documentation Control -- Source SRS: SRS-185 through SRS-194 -- Verification method: Review, Inspection - -**SAD-071**: The software architecture shall isolate desktop PTT into a `DesktopPttBackend` trait owned by the audio subsystem, with the active implementation selected at runtime by a `platform_input::select` factory. Only the factory and the audio engine know which implementation is active; the rest of the application sees only the trait surface and the published capability level. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio, Platform Input -- Source SRS: SRS-195 -- Verification method: Architecture Review, Unit Test - -**SAD-072**: The Windows PTT backend shall be a three-level ladder (`WindowsRawInputBackend` -> `WindowsHookBackend` -> `FocusedPttBackend`). The ladder is evaluated once at audio-engine start; the chosen rung is fixed for the lifetime of that engine and is reported as the backend identifier. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio (Windows) -- Source SRS: SRS-197 -- Verification method: Platform Test (Windows), Architecture Review - -**SAD-073**: The macOS PTT backend shall be a two-level ladder (`MacOSEventTapBackend` -> `FocusedPttBackend`) with explicit permission state surfaced through `PttCapabilityLevel`. The permission query shall not block the audio-engine start path; an undecided permission shall resolve to `L0` and may upgrade asynchronously when the user grants the permission. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio (macOS) -- Source SRS: SRS-198 -- Verification method: Platform Test (macOS), Architecture Review - -**SAD-074**: The Linux PTT backend shall be a two-level ladder (`LinuxGnomeWaylandBackend` using the freedesktop `org.freedesktop.portal.GlobalShortcuts` interface, -> `FocusedPttBackend`). Untested display servers, untested compositors, and missing D-Bus access shall all resolve to `L0`. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio (Linux) -- Source SRS: SRS-199 -- Verification method: Platform Test (Linux, GNOME Wayland), Architecture Review - -**SAD-075**: The audio engine shall expose `AudioTransmitGate`, a thin object that owns the `transmit_active` AtomicBool and exposes `set` and `load` operations only. The Opus encoder feed shall consult `AudioTransmitGate::load()` once per outbound frame; no other code path may flip `transmit_active`. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio -- Source SRS: SRS-201 -- Verification method: Unit Test, Audio Test - -**SAD-076**: The bridge shall expose PTT events through the existing `BridgeEvent` stream, adding a `BridgeEvent::PttCapability { level, backend_id }` variant. The bridge shall never carry raw key codes or scan codes across the FFI boundary; the trait surface and the event shape together enforce SRS-202 at the architectural layer. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Bridge, Audio, Diagnostics -- Source SRS: SRS-202 -- Verification method: Architecture Review, Privacy Review - -**SAD-077**: The diagnostics subsystem shall add a `PttSanitizer` decorator over the `RedactingLogLayer` log sink. The decorator shall scan each record's field set for the well-known names `key_code`, `scan_code`, `virtual_key`, `vk`, `keysym`, `keysym_string`, `key_sequence` and drop the record before it reaches storage. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Diagnostics -- Source SRS: SRS-202 -- Verification method: Unit Test, Privacy Review - -**SAD-078**: The Flutter UI shall consume `BridgeEvent::PttCapability` and render a small capability badge in the Voice Bar. When the capability resolves to `L0` on a platform that the user reasonably expected to support Global PTT (for example Windows or macOS with the relevant permission undecided), the UI shall render an explanation row pointing to the corresponding fix (run-as-administrator path, permission grant path, environment-not-supported note). - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Source SRS: SRS-196, SRS-198 -- Verification method: UI Review, User Acceptance Test - -**SAD-079**: The audio engine shall own the missed-key-up watchdog as a single tokio task that subscribes to `transmit_active` transitions through a `tokio::sync::watch` channel; on a configured timeout (default 30 s, owner-tunable) without a release event, the task shall clear `transmit_active` and emit a sanitised diagnostic record. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio -- Source SRS: SRS-203 -- Verification method: Unit Test, Integration Test - -**SAD-080**: The software architecture shall expose a mouse-side-button input class as a first-class member of the cross-platform PTT binding type so the Windows and macOS backends can drive `transmit_active` from `Mouse4` / `Mouse5` events while the Linux GNOME-Wayland portal backend honours whatever input classes the portal's own dialog returns. The bridge surface and the Flutter binding-capture dialog shall carry the same coarse class without ever exposing a raw mouse button id beyond the `PointerEvent.buttons` bitmask on the platform side. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio (Windows / macOS / Linux), Bridge, Flutter UI -- Source SRS: SRS-200 -- Verification method: Unit Test, Platform Test, UI Review - -**SAD-081**: The software architecture shall remove the `start_audio` and `stop_audio` bridge calls from the public bridge surface and shall replace them with `voice_join(channel_id) -> Result<(), VoiceError>` and `voice_leave() -> Result<(), VoiceError>`. The audio engine's `ensure_running()` private method shall be invoked from the `voice_join` handler on first call of the session and shall be idempotent; the `voice_leave` handler shall call a private `shutdown_if_idle()` that closes the input and output streams when no voice channels remain. The Voice Bar UI shall not surface any manual-start affordance and shall instead key off the bridge event stream `BridgeEvent::VoiceState { in_channel, transmit_mode, mute, release_tail_ms }`, which the audio subsystem publishes on every lifecycle transition. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio, Bridge, Flutter UI -- Source SRS: SRS-204 -- Verification method: Integration Test, UI Review - -**SAD-082**: The software architecture shall add a `ReleaseTailTimer` element to the audio subsystem, owned by the `PttController` and acting as an adapter between the `DesktopPttBackend` `transmit` signal and the `AudioTransmitGate::set()` call. On key-down the adapter forwards `true` immediately; on key-up the adapter starts a tokio sleep of `release_tail_ms` (default 200, configurable 0–500); a key-down within the sleep window cancels the pending close; a timer expiration calls `AudioTransmitGate::set(false)`. The adapter is independent of the missed-key-up watchdog defined in SAD-079 and does not interact with `capture_active`. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio -- Source SRS: SRS-206 -- Verification method: Unit Test, Integration Test - -**SAD-083**: The software architecture shall add a `TransmitModeSelector` element owned by the audio engine that consults the current `TransmitMode` from the identity store on every state evaluation. In `Ptt` mode the selector defers to the `PttController` + `ReleaseTailTimer` pipeline; in `Continuous` mode the selector sets `transmit_active = !mute` while `in_channel` is true and clears `transmit_active` otherwise; in `VoiceActivity` mode (placeholder per DEC-030) the selector shall behave identically to `Continuous` until a VAD implementation is allocated in a later baseline. The selector shall be the only writer of `transmit_active` other than the missed-key-up watchdog defined in SAD-079, and the hard-mute toggle defined in SRS-207 shall be applied by the selector as a final clamp on the output value. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio -- Source SRS: SRS-205, SRS-207 -- Verification method: Unit Test, Integration Test - -**SAD-084**: The software architecture shall allocate Android in-call audio-mode management to an `AndroidAudioModeController` element inside the Android platform audio adapter, owned by the audio subsystem and bound to the voice-session lifecycle rather than to any UI screen lifecycle. The controller shall engage Android's voice-communication audio mode (for example `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mechanism) no later than the moment a voice session becomes connected — driven from the same audio-engine lifecycle hook that opens the input/output streams per SAD-081 — so that microphone gain, output routing, echo handling, and Bluetooth SCO behaviour follow Android's voice-communication path rather than the media path. The controller shall snapshot the prior audio mode on engage and restore it on the last voice-session leave. The controller shall be the only writer of the Android audio mode within the application; feature screens, the Flutter UI layer, and the bridge surface shall not reach Android `AudioManager` mode APIs directly. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Audio Adapter (Android) -- Source SRS: SRS-208 -- Verification method: Platform Test (Android), Audio Test, Architecture Review - -**SAD-085**: The software architecture shall extend the Android platform permission adapter (within Platform Services) to own the runtime `RECORD_AUDIO` permission flow on behalf of the audio subsystem, and shall recognise listen-only operation (`capture_active = false` while the output stream remains open, consistent with SAD-081 / SRS-204) as a first-class audio operating mode at the architecture layer rather than as an error or degraded state. The permission adapter shall request `RECORD_AUDIO` at or before voice-session activation, shall expose the current permission state to the audio engine and to the Flutter UI through the existing bridge event stream, and shall block microphone capture (`capture_active` shall remain false) when the permission is not granted, revoked, or undecided. In that case, the `TransmitModeSelector` defined in SAD-083 shall remain clamped such that `transmit_active = false` regardless of PTT or Continuous-mode inputs, while the output mix path defined in SAD-081 continues to operate. The Flutter UI shall surface a user-visible path to grant `RECORD_AUDIO` before retrying transmit; the permission adapter shall not auto-retry beyond Android platform conventions. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Platform Services (Android Permission Adapter), Audio Subsystem, Flutter UI, Bridge -- Source SRS: SRS-209 -- Verification method: Platform Test (Android), Integration Test, Privacy Review - -**SAD-086**: The software architecture shall allocate Android foreground-service behaviour for active voice sessions to an `AndroidVoiceForegroundService` element owned by the Android platform services container, bound to the voice-session lifecycle (start on first `voice_join`, stop on last `voice_leave`, consistent with SAD-081) rather than to any UI screen lifecycle. The service shall declare the appropriate Android foreground-service type for voice communication, post the required ongoing notification, and coordinate with the `AndroidAudioModeController` (SAD-084) and the Android permission adapter (SAD-085) so that microphone capture and Bluetooth SCO routing survive UI backgrounding and process trimming under Android background-execution restrictions. Feature screens shall not start, stop, or interrogate the foreground service directly; they shall observe voice-session state through `BridgeEvent::VoiceState`. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Platform Services (Android), Audio Subsystem -- Source SRS: SRS-111 -- Verification method: Platform Test (Android), Integration Test - -**SAD-087**: The software architecture shall isolate macOS runtime baseline configuration, universal-binary packaging, framework layout, and CocoaPods integration in macOS build configuration and platform services, parallel to SAD-061 (iOS runtime) and SAD-063 (Android runtime). Specifically: (a) the macOS deployment target shall be expressed in a single macOS build-configuration location (currently `10.15`, declared in `apps/chanora_flutter/macos/chanora_bridge.podspec`) and consumed by platform services rather than feature screens, so the minimum macOS version can be raised without touching feature code; (b) the macOS Rust bridge artifact shall be packaged as a universal binary covering both `arm64` and `x86_64` slices, combined via `lipo` into a single dylib so a single signed framework runs on Apple-silicon and Intel Macs; (c) the bridge shall be delivered as a `.framework` bundle using the macOS `Versions/A` layout convention expected by the system loader and code-signing tools; (d) CocoaPods integration shall be driven by a hand-rolled podspec (the same `chanora_bridge.podspec`) maintained and regenerated through release-pipeline build automation rather than authored ad hoc per release. Feature screens, the Flutter UI layer, and the bridge surface shall not reach macOS build settings or framework layout details directly. This item is the macOS counterpart to SAD-061 / SAD-063 and is the proper SAD anchor for downstream detailed-design items concerning macOS bridge build automation, framework layout, and podspec maintenance. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: macOS Build Configuration, Platform Services (macOS), Release Pipeline -- Source SRS: SRS-013 -- Source SysDes: SysDes-155 (macOS runtime baseline — deployment target, universal-binary packaging, `.framework` `Versions/A` layout, CocoaPods podspec automation) -- Verification method: Platform Test (macOS), Release Inspection, Architecture Review - -**SAD-088**: The software architecture shall add a `criterion`-based realtime-audio benchmark harness as a first-class architectural element of the `chanora_audio` crate, extending the existing audio-subsystem allocation in SAD-034. The harness lives in `crates/chanora_audio/benches/` as a Cargo-convention `benches/` directory (a sibling of the crate's `src/`, not a public seam of the crate's library API). The harness shall use the `criterion` crate as its measurement framework (selected at this layer; SDD pins the exact version and feature flags). Rationale for `criterion`: it is the de-facto stable-toolchain Rust microbenchmark harness, produces stable statistical output (mean / p50 / p95 / p99) without requiring a nightly compiler, and integrates with `cargo bench` so the same invocation works in developer shells and on CI runners. The harness shall expose one bench function (or one criterion `BenchmarkGroup`) per SysDes-156 metric family, with the following architectural assignment of metric → bench element: (a) `bench_capture_alloc_count` — counts heap allocations on the steady-state `CaptureState::ingest` path after a warmup phase, using a per-bench allocation-counting mechanism (a dev-dependency allocation tracker such as `dhat`, or a custom global-allocator counter — selection deferred to SDD); (b) `bench_capture_callback_wall_clock` — measures wall-clock duration of `CaptureState::ingest` and reports p50 / p95 / p99 from criterion's sample distribution; (c) `bench_opus_encode_latency` — directly times an Opus encoder over a fixed 960-sample / 20 ms input frame; (d) `bench_opus_decode_latency` — directly times the Opus decode path; if the upstream `tsclientlib` `AudioHandler` is opaque to the crate, the bench shall time the smallest decode wrapper the crate owns and the SDD shall name that wrapper; (e) `bench_resampler_throughput` — measures samples-per-second on the three canonical rate pairs (44.1→48, 16→48, 48→48 kHz). The harness shall emit, for each bench function, the SRS-217 baseline JSON record (one record per metric, in the SRS-217 schema); the emission mechanism (a custom `criterion` measurement reporter, a post-bench JSON-aggregation step, or equivalent) is delegated to SDD. The harness shall not introduce any new public seam on the `chanora_audio` crate's library API surface — benches consume the same internal entry points that the realtime callback consumes, so SAD-034's isolation property is preserved. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio Subsystem (`chanora_audio` crate, `benches/` directory; extends SAD-034) -- Source SRS: SRS-216, SRS-217 -- Source SysDes: SysDes-156 (realtime-audio benchmark surface, SE-13; five metric families; baseline-JSON storage) -- Verification method: Inspection (bench-function presence and metric coverage), Bench Run (criterion executes on the host runner), Architecture Review - -**SAD-089**: The software architecture shall pin the baseline-JSON on-disk path for the SAD-088 harness to `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`, a single deterministic file per host architecture under the crate's `benches/` directory. The filename is keyed on Rust target triple (`x86_64-unknown-linux-gnu`) so future multi-host expansion can add sibling files (`aarch64-apple-darwin.json`, `x86_64-pc-windows-msvc.json`, etc.) without restructuring the directory layout; for the present revision, exactly one such file exists because SysDes-157 fixes the host to Linux x86_64 (`ubuntu-latest`). The file shall be committed to the default branch so that the SAD-090 advisory workflow has a deterministic comparison target at every PR's merge-base commit. The file contents shall conform to the SRS-217 record schema (one record per metric, fields `metric`, `value`, `unit`, `host_arch`, `toolchain`, `git_sha`, `timestamp` at minimum). The file is the sole on-disk output sink of the SAD-088 harness; it is written by exactly one workflow (SAD-091) and read by exactly one workflow (SAD-090) — see SAD-090 / SAD-091 for the workflow isolation property. Multi-host baselines (additional sibling files keyed on alternate target triples) are explicitly out of scope for this revision per SysDes-157 point 2. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Audio Subsystem (`chanora_audio` crate, `benches/baselines/` subdirectory; output sink of SAD-088) -- Source SRS: SRS-217 -- Source SysDes: SysDes-156 (baseline-JSON storage; deterministic repo location) -- Verification method: Inspection (file path, schema), Bench Run (file is regenerable end-to-end) - -**SAD-090**: The software architecture shall add an advisory CI workflow file `.github/workflows/bench-advisory.yml` to the build/release/operations allocation (extending SAD-037), realizing the SRS-218 advisory-reporting workflow. Triggers: `pull_request` against the default branch, plus `push` to the default branch (matching SRS-218 clause 1; tag pushes and non-default branch pushes are excluded). Runner: `ubuntu-latest` (the sole host in scope per SysDes-157 point 2). Step shape (high-level; SDD authors the exact YAML): (1) checkout the PR head; (2) install the Rust toolchain pinned by the repo's `rust-toolchain.toml`; (3) for each bench function defined under SAD-088, invoke `cargo bench` on the `chanora_audio` crate; (4) read the baseline JSON at SAD-089's path *as of the PR's merge-base commit* (using `git show :crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` or an equivalent git-plumbing read) — never the default-branch-tip baseline, per SRS-219's anti-retroactive-reclassification rule; (5) compare current measurements against that merge-base baseline using the SRS-219 per-metric tolerance window; (6) render the comparison as a markdown table with one row per metric and a 🟢 / 🟡 / 🔴 marker per the SAD-determined semantics (see below); (7) post the table as a PR comment via `actions/github-script@v7` or an equivalent comment-posting action (exact action choice delegated to SDD); (8) the workflow's status check shall always exit `success` (exit code 0) regardless of any 🔴 marker, per SRS-218 clause 4 — regression visibility is delivered through the markdown table, not through the check status. The named status check shall follow existing repo workflow-naming convention (e.g. `bench-advisory`; SDD reads existing workflow files and matches the convention). This workflow shall never write to the baseline JSON file authored under SAD-089 — write authority is exclusively SAD-091's, enforcing the SRS-218 clause 5 workflow-isolation property at the architecture layer. Yellow-marker semantics is pinned at this SAD layer (see §24.1 paragraph below). The workflow is allocated to the CI surface (SE-18) and is the realization of the SE-18 anchor previously named only at the SysDes layer (no prior SAD item exists for the SE-18 surface; this is the first such allocation). - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Build, Release, Operations (`.github/workflows/bench-advisory.yml`; extends SAD-037 — CI surface, SE-18 realization) -- Source SRS: SRS-218, SRS-219 (tolerance binding consumed by comparator step) -- Source SysDes: SysDes-157 (advisory CI integration), SysDes-158 (tolerance window and merge-base-snapshot comparator) -- Verification method: Inspection (workflow trigger / runner / non-blocking exit), CI Dry Run (synthetic PR exercises markdown rendering end-to-end), Architecture Review - -**SAD-091**: The software architecture shall add a separate baseline-update CI workflow file `.github/workflows/bench-baseline-update.yml` to the build/release/operations allocation (extending SAD-037), realizing the SRS-218 clause 5 baseline-update-isolation property. Trigger: `workflow_dispatch` only — the workflow is manually invoked from the GitHub Actions tab on the default branch and shall not fire on `pull_request`, `push`, or any tag event. Runner: `ubuntu-latest` (matching SAD-090's host for byte-comparability of measurements). Step shape: (1) checkout the default branch; (2) install the Rust toolchain pinned by `rust-toolchain.toml`; (3) execute the same `cargo bench` invocations as SAD-090 across the SAD-088 bench functions; (4) write the resulting JSON, conformant to SRS-217's schema, to the SAD-089 path `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` (overwriting the prior file); (5) commit and push the updated file to the default branch — the commit mechanism (a direct push using a GitHub-bot token, the `peter-evans/create-pull-request` action, or an equivalent push action) is delegated to SDD. This workflow is the **only** writer of the SAD-089 baseline JSON. The SAD-090 PR-triggered workflow is strictly a reader. This single-writer property is the architectural realization of SRS-218 clause 5 and shall be invariant under future revisions (any future revision adding a second writer requires a SAD revision, not an SDD revision). - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Build, Release, Operations (`.github/workflows/bench-baseline-update.yml`; extends SAD-037 — CI surface, SE-18 realization; sole writer of SAD-089) -- Source SRS: SRS-218 (workflow-isolation clause) -- Source SysDes: SysDes-157 (baseline-update isolation via `workflow_dispatch`) -- Verification method: Inspection (trigger is `workflow_dispatch` only; commit destination is SAD-089's path), CI Dry Run (manual invocation regenerates baseline end-to-end), Architecture Review - -### Yellow-marker semantics (pinned at SAD) - -Pinned at SAD layer to remove a downstream ambiguity that would otherwise surface as an open question in the SAD-090 SDD unit: the 🟡 "within tolerance but trending" marker (SRS-218 clause 3, third element of the marker set) shall be defined as follows: a metric is rendered 🟡 if and only if (a) the metric is within the SRS-219 per-metric tolerance window relative to the merge-base baseline (i.e. it is not 🔴), AND (b) the absolute delta between the PR's current measurement and the **previous run of the SAD-090 workflow on the default branch** (i.e. the most recent default-branch CI bench result, not the baseline JSON itself) is greater than 50% of the SRS-219 tolerance window for that metric. Metrics whose SRS-219 tolerance is exactly zero (the heap-allocation-count metric, SRS-219 clause a) cannot be 🟡 because the 50% trigger is undefined when the window has zero width; for those metrics only 🟢 (zero allocations) and 🔴 (any non-zero allocation count) apply. Rationale for pinning at SAD rather than deferring to SDD: the question "is yellow relative to baseline or relative to previous-run-on-default" is an architectural choice about what state the workflow consumes (baseline JSON only, vs baseline JSON + a previous-runs cache), not an implementation detail; pinning it here fixes the workflow's required inputs at the architecture layer so SDD has a fully determined input set. Operationally, the "previous-run-on-default" datum may be sourced from the SAD-091 baseline (treating the committed baseline as the latest default-branch run, which is the simpler and recommended SDD realization) or from a separate run-history artifact; SDD selects which. - -## 27. Channel Join Pending-State Architecture - -**SAD-092**: The software architecture shall assign authoritative current-channel membership ownership to Rust Core and the State Synchronization Engine. The authoritative current channel is the last channel membership state confirmed by Rust Core from the protocol path or from a reconciled server snapshot. Flutter state, Flutter feature screens, and bridge DTO consumers shall treat that value as read-only render state and shall not create, overwrite, or finalize authoritative membership locally. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync -- Source SRS: SRS-023, SRS-054, SRS-056, SRS-057, SRS-058 -- Related SysDes: SysDes-069 -- Verification method: Architecture Review, Integration Test, System Test - -**SAD-093**: The software architecture shall model a channel-join request as user intent crossing the bridge, not as an immediate local membership mutation. Flutter may expose the requested target channel as a non-authoritative pending target for visual feedback while continuing to render the authoritative current channel from SAD-092 until Rust Core/protocol confirmation changes that authoritative state. The bridge shall provide command and event contracts that distinguish join intent, pending target visibility, confirmed membership, and user-safe failure reporting; the bridge and Flutter layers shall not directly mutate authoritative channel membership. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Flutter UI, Flutter State, Bridge Facade, Rust Core -- Source SRS: SRS-023, SRS-049, SRS-054 -- Related SysDes: SysDes-069 -- Verification method: UI Test, Integration Test, System Test - -**SAD-094**: The software architecture shall preserve the previous authoritative current channel on channel-join failure or timeout and shall clear the non-authoritative pending target through Rust Core / State Sync events. Join denial, network/protocol error, timeout, and cancellation-like outcomes shall be surfaced as user-safe errors without reclassifying the pending target as the current channel. Diagnostics shall record the join lifecycle at sanitized event level, including request, confirmation, failure, timeout, stale outcome, and reconciliation decisions, without leaking secrets or raw protocol payloads. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync, Protocol Adapter, Bridge Facade, Diagnostics, Flutter State -- Source SRS: SRS-023, SRS-048, SRS-049, SRS-054, SRS-056, SRS-057, SRS-058 -- Related SysDes: SysDes-069 -- Verification method: Integration Test, System Test, Diagnostics Review - -**SAD-095**: The downstream SDD shall define deterministic State Sync handling for channel-join edge cases while preserving the SAD-092 authoritative ownership boundary. Required SDD coverage includes duplicate join requests, a different target requested while a join is pending, leave/switch races, stale acknowledgements or failures for superseded requests, reconnect and fresh-snapshot reconciliation, and per-connection ordering boundaries. The architecture requires a single deterministic reducer/state-machine ownership point for those cases in Rust Core / State Sync; Flutter may render only the resulting authoritative and pending-view states. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: State Sync, Rust Core, Protocol Adapter, Bridge Facade, Flutter State, Verification Support -- Source SRS: SRS-023, SRS-049, SRS-054, SRS-056, SRS-057, SRS-058 -- Related SysDes: SysDes-069 -- Verification method: Architecture Review, SDD Inspection, Unit Test, Integration Test, System Test - -**SAD-096**: The software architecture shall expose an explicit Protocol Adapter command seam for leaving the current voice channel / moving the current client out of channel membership; downstream design may name the seam `leave_channel`, `move_out_of_channel`, or an equivalent verb, but it shall not require Rust Core, Bridge, Flutter, or the State Sync reducer to invent a synthetic channel id or rely on implicit `move_to_channel` behavior to realize `voice_leave()`. Rust Core shall invoke this Protocol Adapter seam only as a side effect of the State Sync reducer returning a leave action, and the Protocol Adapter shall report command lifecycle separately from authoritative membership. Authoritative current-channel membership remains owned by Rust Core / State Sync under SAD-092: a successful leave/move-out command acknowledgement is command acceptance/completion evidence only, while the membership value changes to `None` or to a server-provided replacement channel only after a live protocol self-move/client-leave delta or a reconciled snapshot confirms that state. Protocol errors, denials, timeouts, and stale outcomes shall be returned to Rust Core as user-safe error categories and sanitized diagnostics; raw protocol payloads, passwords, server addresses, and unredacted external strings shall not cross into logs or Flutter DTOs. - -- Status: Baseline Candidate -- Type: Software Architecture Item -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync, Protocol Adapter, Bridge Facade, Diagnostics, Verification Support -- Source SRS: SRS-021, SRS-023, SRS-038, SRS-054, SRS-056, SRS-057, SRS-058, SRS-204 -- Related SysDes: SysDes-069 -- Verification method: Architecture Review, Integration Test, System Test, Diagnostics Review - -### SWE.5 verification implications - -SWE.5 verification shall include evidence that channel-join pending-state behavior remains server-authoritative end to end: Flutter sends intent only, authoritative current-channel state changes only after Rust Core/protocol confirmation or snapshot reconciliation, failure/timeout keeps the prior current channel, and edge-case sequences named in SAD-095 are deterministic. Tests shall cover both UI-visible pending feedback and Rust Core / State Sync reducer behavior through bridge-level integration seams. SWE.5 shall also verify the SAD-096 leave/move-out seam end to end: `voice_leave()` / `leave_channel()` intent reduces to a single Protocol Adapter leave/move-out command side effect, no synthetic target channel id is generated by upper layers, command success alone does not clear authoritative membership, and live-delta/snapshot confirmation is required before the projection reports `current_channel = None` or a server-provided replacement. - -## 28. Updated SRS-to-SAD Coverage Matrix - -| SRS Range | SAD Coverage | -|---|---| -| SRS-001 through SRS-184 | Covered by inherited SAD baseline `SAD-001` through `SAD-060` | -| SRS-021 (client join/leave/move events reflected in channel display) | Covered specifically for current-channel leave/move-out confirmation by `SAD-096` | -| SRS-023 (channel join confirmation before authoritative UI state) | Covered specifically by `SAD-092` through `SAD-096` | -| SRS-038 (Rust Core bridge command suite) | Covered specifically for voice/channel leave command routing by `SAD-096` | -| SRS-049 (Protocol Adapter channel join success/failure reporting) | Covered specifically by `SAD-093` through `SAD-095` | -| SRS-054 (State Sync connection state model) | Covered specifically for current-channel membership by `SAD-092` through `SAD-096` | -| SRS-056, SRS-057, SRS-058 (deterministic deltas, ordering, reducers) | Covered specifically for pending-join and leave/move-out edge cases by `SAD-092`, `SAD-094`, `SAD-095`, and `SAD-096` | -| SRS-185 through SRS-194 | Covered by `SAD-061` through `SAD-070` | -| SRS-195 through SRS-199, SRS-201 through SRS-203 | Covered by `SAD-071` through `SAD-079` | -| SRS-200 | Covered by `SAD-080` | -| SRS-204 through SRS-207 | Covered by `SAD-081` through `SAD-083`; the protocol leave/move-out realization required by `voice_leave()` is covered by `SAD-096` | -| SRS-208 | Covered by `SAD-084` | -| SRS-209 | Covered by `SAD-085` | -| SRS-111 (Android foreground voice service) | Covered by `SAD-086` (Android-specific allocation; SAD-036 retains the cross-cutting diagnostics allocation for the SRS-111–124 range per §24.1 dual-allocation pattern) | -| SRS-013 (multi-platform support — macOS runtime baseline aspect) | Covered by `SAD-087` (macOS runtime baseline; counterpart to SAD-061 / SAD-063) | -| SRS-216 (realtime-audio benchmark instrumentation) | Covered by `SAD-088` (criterion-based bench harness in `chanora_audio/benches/`; extends SAD-034 audio-subsystem allocation). Cross-cutting note: this is a cross-cutting allocation per §24.1 in the sense that the harness sits in the Audio Subsystem (SAD-034 extension) but its CI consumers sit in Build/Release/Operations (SAD-037 extensions); there is no platform-specific variation because SysDes-157 fixes the host to Linux x86_64. | -| SRS-217 (baseline-JSON storage format and on-disk path) | Covered by `SAD-088` (the harness emits the JSON) and `SAD-089` (the on-disk path is pinned to `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`) | -| SRS-218 (CI advisory workflow + baseline-update isolation) | Covered by `SAD-090` (`.github/workflows/bench-advisory.yml`, advisory reader, non-blocking exit) and `SAD-091` (`.github/workflows/bench-baseline-update.yml`, `workflow_dispatch`, sole writer of SAD-089); both extend SAD-037 build/release/operations allocation | -| SRS-219 (per-metric tolerance window and merge-base-snapshot comparison methodology) | Covered by `SAD-090` (comparator step consumes the SRS-219 tolerance and the merge-base-snapshot rule; tolerance-window evaluation is the workflow's comparator-step responsibility) | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate effective date and preserved layer-specific traceability. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT software-architecture items SAD-071 through SAD-079: backend isolation behind `DesktopPttBackend` trait, Windows three-rung ladder, macOS two-rung permission-aware ladder, Linux GNOME-Wayland portal ladder, `AudioTransmitGate` object, sanitised `BridgeEvent::PttCapability`, `PttSanitizer` log-sink decorator, UI capability badge with platform-specific explanation, missed-key-up watchdog task. Strict layered sourcing preserved (`SAD -> SRS` only). | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-15 | Added `SAD-080` to close the SRS-200 coverage gap surfaced by a P0 traceability audit. The earlier baseline matrix folded SRS-200 under the `SRS-195..203 -> SAD-071..079` range without giving it a dedicated SAD item; the new entry restores the strict one-to-many SRS-to-SAD discipline (SRS-200 is now sourced by SAD-080; SAD-080 is in turn covered by the new SDD-093). No other rows mutate; the existing PTT SAD items (071..079) retain their original SRS sources. | - - -## Baseline Candidate 0.9.5 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added v1 audio + PTT lifecycle architecture items SAD-081 through SAD-083 sourced from SRS-204..207: dropped the `start_audio` / `stop_audio` bridge calls and replaced them with `voice_join(channel_id)` / `voice_leave()` keyed off implicit engine init plus `BridgeEvent::VoiceState`; added the `ReleaseTailTimer` adapter on the `DesktopPttBackend` → `AudioTransmitGate` path (default 200 ms, range 0–500 ms, key-down within window cancels the pending close); added the `TransmitModeSelector` element as the sole writer of `transmit_active` (other than the SAD-079 watchdog) with hard-mute applied as a final clamp and `VoiceActivity` mapped to `Continuous` until DEC-030 resolves. Strict layered sourcing preserved (`SAD -> SRS` only). | - - -## Baseline Candidate 0.9.6 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.6 | 2026-05-17 | Propagated reconciled P0 Android SRS updates into SAD. SAD-063 text extended in place (ID preserved) to record the API 28 minimum runtime baseline per DEC-004 (Accepted 2026-05-14, superseding the earlier API 24 recommendation), while keeping the existing SRS-187 / SRS-188 trace. Added SAD-084 (Android in-call audio mode controller in the platform audio adapter, bound to the voice-session lifecycle, sourced from SRS-208). Added SAD-085 (Android `RECORD_AUDIO` runtime permission flow on the existing Android permission adapter, naming listen-only — `capture_active = false` with output stream open per SAD-081 — as a first-class operating mode at the architecture layer, sourced from SRS-209). Added SAD-086 (`AndroidVoiceForegroundService` allocation for SRS-111, bound to `voice_join` / `voice_leave` lifecycle rather than UI lifecycle, coordinating with SAD-084 and SAD-085). SAD-018 (Android back intent, SRS-163) and the existing Android AAB allocation in §9 / SAD-037 (SRS-119) were re-read and left unchanged because they remain coherent with the reconciled SRS. Strict layered sourcing preserved (`SAD -> SRS` only). | - - -## Baseline Candidate 0.9.10 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.10 | 2026-05-18 | Added dedicated channel-join pending-state architecture items SAD-092 through SAD-095. The new items assign authoritative current-channel membership to Rust Core / State Sync, constrain Flutter to user intent plus non-authoritative pending-target rendering, preserve the prior authoritative channel on failure or timeout, require sanitized diagnostics for join lifecycle outcomes, and push deterministic duplicate/different-target/leave-race/stale-ack/reconnect-reconciliation handling into SDD under the Rust Core / State Sync ownership boundary. Added specific §28 coverage rows for SRS-023, SRS-049, SRS-054, and SRS-056 through SRS-058, with SysDes-069 recorded as a related upstream design anchor while retaining SRS as the direct SAD source. | - - -## Baseline Candidate 0.9.11 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.11 | 2026-05-19 | Added SAD-096 to close the protocol leave/move-out architecture seam blocking SDD-121 implementation. The Protocol Adapter must expose an explicit leave/move-out command seam for `voice_leave()` / `leave_channel()` side effects; upper layers must not synthesize channel ids or rely on implicit `move_to_channel` behavior. Command acknowledgement remains separate from authoritative membership: Rust Core / State Sync clear or replace `current_channel` only from authoritative live deltas or reconciled snapshots. SWE.5 implications and §28 SRS coverage rows were updated for SRS-021, SRS-023, SRS-038, SRS-054, SRS-056 through SRS-058, and SRS-204. Strict layered sourcing preserved (`SAD -> SRS` only). | - - -## Baseline Candidate 0.9.7 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.7 | 2026-05-18 | Formalized the cross-cutting + platform-specific SAD allocation pattern flagged by the traceability-auditor: added §24.1 narrative subsection describing the deliberate dual-allocation rule (cross-cutting concern + platform-specific realization both recorded), with SRS-111 / SAD-036 / SAD-086 as the worked example, and annotated the §24.2 matrix row for SRS-111..124 accordingly. Added SAD-087 (macOS runtime baseline: deployment target isolation, universal-binary `lipo` packaging, `.framework` `Versions/A` layout, hand-rolled CocoaPods podspec automation), parallel to SAD-061 (iOS runtime) and SAD-063 (Android runtime), closing the macOS-runtime anchor gap flagged by the SDD-119 detailed-designer. SAD-087 traces upward through SRS-013 (multi-platform support); a parallel macOS-runtime SysDes derivation does not yet exist and is recorded as an open follow-up for the system-architect (SysDes-133 covers iOS, SysDes-135 covers Android, macOS has no counterpart yet). §27 matrix updated with the SAD-087 row. Strict layered sourcing preserved (`SAD -> SRS` only). | -| 0.9.8 | 2026-05-18 | Retargeted SAD-087's `Source SysDes` field from the "open follow-up — no dedicated macOS-runtime SysDes anchor exists" placeholder to `SysDes-155` (macOS runtime baseline — deployment target, universal-binary `lipo` packaging, `.framework` `Versions/A` layout, CocoaPods podspec automation), authored by the system-architect in SysDes v0.9.7 as the parallel macOS-runtime anchor to SysDes-133 (iOS) / SysDes-135 (Android). This closes the open follow-up that SAD-087 carried at its 0.9.7 authoring, giving SAD-087 a proper upward SysDes trace. Surgical single-field edit: no behavioral content of SAD-087 changed; `Source SRS` retained as `SRS-013` (multi-platform support — Windows, macOS, Linux, iOS, Android), which remains the correct SRS anchor (the SRS-013 vs alternate-anchor question raised during SysDes-155 authoring referred to SysRS-013 / SysRS-002 at the system-requirements layer, not to SRS at the software-requirements layer). §27 SRS-to-SAD coverage matrix row for SRS-013 unchanged because it already cites SAD-087 and remains textually accurate. Strict layered sourcing preserved (`SAD -> SRS`, with SysDes cross-reference now resolved). | -| 0.9.9 | 2026-05-18 | Added realtime-audio benchmark-infrastructure software-architecture items SAD-088 through SAD-091 sourced from SRS-216 / SRS-217 / SRS-218 / SRS-219 (the Option B benchmark-infrastructure scope decision propagated through the Wave 1.5 benchmark chain SysRS-307/308/309 → SysDes-156/157/158 → SRS-216..219). SAD-088 allocates a `criterion`-based bench harness to the `chanora_audio` crate's `benches/` directory, extending SAD-034 (audio subsystem allocation); the harness covers the five SysDes-156 metric families (heap allocation count, per-callback wall-clock at p50/p95/p99, Opus encode latency on 960-sample/20 ms frame, Opus decode latency on the same shape, resampler throughput at 44.1→48 / 16→48 / 48→48 kHz) and emits SRS-217 baseline records. SAD-089 pins the baseline-JSON on-disk path to `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` (single deterministic file, single host architecture in scope, target-triple-keyed filename to permit future multi-host expansion without directory restructuring). SAD-090 adds the advisory CI workflow `.github/workflows/bench-advisory.yml` extending SAD-037 (build/release/operations allocation): triggers on PR-against-default + push-to-default, runs on `ubuntu-latest`, reads the merge-base baseline (never the default-tip baseline, per SRS-219 anti-retroactive-reclassification), compares using SRS-219 tolerances, posts a markdown table with 🟢/🟡/🔴 markers, and always exits success (non-blocking per SRS-218 clause 4). SAD-091 adds the separate baseline-update workflow `.github/workflows/bench-baseline-update.yml` extending SAD-037: `workflow_dispatch` trigger only, sole writer of the SAD-089 baseline file, realizing the SRS-218 clause 5 workflow-isolation property at the architecture layer (single-writer invariant). Yellow-marker semantics pinned at this SAD layer in a §26 subsection: 🟡 means "within SRS-219 tolerance relative to merge-base baseline AND delta-from-previous-default-branch-run exceeds 50% of the tolerance window"; metrics with zero-width tolerance (heap allocations) cannot be 🟡. Rationale for pinning at SAD: the choice between baseline-only vs baseline-plus-run-history as workflow input is an architectural input-set decision, not an implementation detail. §27 SRS-to-SAD coverage matrix updated with four new rows (SRS-216, SRS-217, SRS-218, SRS-219) citing SAD-088..091; the SRS-216 row also annotates the cross-cutting allocation pattern per §24.1 (harness sits in Audio Subsystem via SAD-034 extension while CI consumers sit in Build/Release/Operations via SAD-037 extensions, with no platform-specific variation because SysDes-157 fixes the host to Linux x86_64). Intentionally NOT authored consistent with the SysRS/SysDes/SRS deferral chain: (a) Dimension 3 production telemetry export (deferred to P1; SysRS-295 active); (b) build-failing hard CI gate (SysRS-308 advisory-only rule active; SAD-090 status-check always exits success); (c) multi-host benchmarking (SysDes-157 host-scope clause active; SAD-089 holds a single target-triple-keyed file); (d) IDE integration (e.g. `cargo bench` invocation from rust-analyzer in VS Code — tooling polish, not P0 architecture). Strict layered sourcing preserved (`SAD -> SRS` only per the SAD §2 rule, with SysDes cross-references recorded for completeness on each new item). | diff --git a/docs/architecture/sdd.md b/docs/architecture/sdd.md deleted file mode 100644 index ac7eab8..0000000 --- a/docs/architecture/sdd.md +++ /dev/null @@ -1,2052 +0,0 @@ - -# Chanora SDD — Software Detailed Design - -**Document type:** SDD / Software Detailed Design -**Process alignment:** ASPICE SWE.3 Software Detailed Design and Unit Construction -**Version:** 0.9.21 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Lifecycle position:** `SysRS -> SysDes -> SRS -> SAD -> SDD` - -**Repo path:** `docs/architecture/sdd.md` --- - -## 1. Purpose - -This document defines detailed software design units, APIs, data structures, and implementation-level design rules for Chanora. - -The SDD derives from the SAD only. - -## 2. Strict Traceability Rules - -```text -SDD shall link directly to SAD only. -SDD shall not use direct software-requirement source IDs. -SDD shall not use direct system-design source IDs. -SDD shall not use direct system-requirement source IDs. -``` - -## 3. Software Unit Decomposition - -| Software Unit | Responsibility | -|---|---| -| `ChanoraApp` | Root application widget, initialization, theme mode, localization initialization | -| `ChanoraThemeFactory` | Builds ThemeData, ColorScheme, TextTheme, component themes | -| `ChanoraSemanticColors` | ThemeExtension for connection, voice, latency, diagnostic, and error states | -| `ChanoraSpacing` | ThemeExtension for spacing tokens | -| `ChanoraShape` | ThemeExtension for shape tokens | -| `ChanoraMotion` | ThemeExtension for motion tokens and reduced-motion behavior | -| `ChanoraAdaptiveShell` | Window class detection and shell layout selection | -| `CompactShell` | Single-column shell | -| `MediumShell` | Navigation rail / medium-width shell | -| `ExpandedShell` | Persistent pane shell | -| `ChanoraVoiceBar` | Persistent voice control component | -| `ChanoraChannelTree` | Hierarchical channel and client browser | -| `ChanoraClientTile` | Client row component | -| `ChanoraStatusBadge` | Accessible status indicator | -| `ChanoraAudioMeter` | Input level display | -| `LocalizationService` | Product-owned string localization and fallback | -| `ContentTextAdapter` | Server-provided text pass-through and display preparation | -| `UnicodeTextBoundary` | Boundary string validation and conversion helper | -| `PlatformInsetsService` | Safe area, keyboard, cutout, and desktop inset data | -| `BackIntentService` | Android/system back intent abstraction | -| `HapticsService` | Platform-aware haptic feedback wrapper | -| `BridgeFacade` | Flutter-to-Rust command and event facade | -| `CoreEventMapper` | Core-event-to-view-model mapping | -| `DiagnosticsTextPresenter` | Localized diagnostic descriptions and language-neutral event keys | -| `ArchitectureViewDocs` | Maintains context, container, component, runtime, deployment, and ADR architecture documentation | -| `DeploymentConfig` | Platform packaging and release configuration | -| `ArchitectureTraceChecker` | Checks direct-layer traceability rules for documentation | - - -## 4. SWE.3 Detailed Design Completeness Criteria - -The detailed design shall be sufficient to support implementation and unit verification. For each software unit, the SDD shall identify where applicable: - -| Detail | Required information | -|---|---| -| Unit responsibility | Purpose and boundaries of the unit | -| Inputs | Name, type, allowed range, default value, optionality | -| Outputs | Name, type, allowed range, default value, error behavior | -| Interfaces | Internal and external software interfaces | -| Dynamic behavior | State changes, sequence behavior, asynchronous behavior | -| Error behavior | Recoverable errors, fatal errors, fallback behavior | -| Resource behavior | Buffering, time-sensitive operations, memory expectations | -| Unit verification hooks | Test seams and expected verification approach | - -## 5. Software Unit Interface Detail Catalog - -| Unit | Interface | Direction | Name | Type | Unit | Resolution | Range | Default | Error / fallback | -|---|---|---:|---|---|---|---|---|---|---| -| `ChanoraThemeFactory` | Theme creation | Input | seedColor | Color value | n/a | n/a | valid color | Chanora default seed | fallback to default theme | -| `ChanoraThemeFactory` | Theme creation | Input | brightness | enum | n/a | n/a | light/dark | system setting | fallback to light | -| `ChanoraThemeFactory` | Theme creation | Output | themeData | ThemeData | n/a | n/a | valid ThemeData | n/a | construction error treated as app initialization failure | -| `ChanoraAdaptiveShell` | Window classification | Input | widthDp | double | dp | 1dp | >=0 | current window width | compact fallback | -| `ChanoraAdaptiveShell` | Window classification | Output | windowClass | enum | n/a | n/a | compact/medium/expanded | compact | compact fallback | -| `LocalizationService` | String lookup | Input | key | string | n/a | n/a | non-empty | n/a | fallback key display or English fallback | -| `LocalizationService` | String lookup | Input | locale | locale ID | n/a | n/a | supported locale | English | English fallback | -| `LocalizationService` | String lookup | Output | localizedText | UTF-8 string | n/a | n/a | valid Unicode | English fallback | missing-key diagnostic | -| `UnicodeTextBoundary` | Text validation | Input | rawText | external string/bytes | n/a | n/a | platform/protocol dependent | n/a | boundary conversion error | -| `UnicodeTextBoundary` | Text validation | Output | contentText | UTF-8 string | n/a | n/a | valid Unicode | replacement/failure policy | conversion diagnostic | -| `BridgeFacade` | Command bridge | Input | commandDto | DTO | n/a | n/a | valid command schema | n/a | bridge error DTO | -| `BridgeFacade` | Command bridge | Output | commandResult | DTO/result | n/a | n/a | success/error | n/a | typed error | -| `CoreEventMapper` | Event mapping | Input | coreEvent | event DTO | n/a | n/a | known event type | n/a | unknown event diagnostic | -| `CoreEventMapper` | Event mapping | Output | viewModelDelta | UI model delta | n/a | n/a | valid UI state change | n/a | safe no-op + diagnostic | -| `DiagnosticsTextPresenter` | Diagnostic presentation | Input | diagnosticKey | stable key | n/a | n/a | known/unknown key | n/a | generic localized fallback | -| `DiagnosticsTextPresenter` | Diagnostic presentation | Output | diagnosticText | localized string | n/a | n/a | valid Unicode | English fallback | fallback diagnostic text | -| `ChanoraAudioMeter` | Level display | Input | level | double | normalized | 0.01 | 0.0-1.0 | 0.0 | clamp to valid range | -| `ChanoraAudioMeter` | Level display | Output | semanticValue | localized string | n/a | n/a | valid string | "No input" | localized fallback | -| `BackIntentService` | Back handling | Input | platformBackEvent | platform event | n/a | n/a | platform-defined | n/a | ignored if unsupported | -| `BackIntentService` | Back handling | Output | backIntent | enum | n/a | n/a | pop/close/ignore/exitCandidate | ignore | safe no-op | - -## 6. Detailed Design Evaluation Checklist - -| Evaluation area | Question | -|---|---| -| Interoperability | Are interfaces compatible across units and layers? | -| Interaction | Are runtime interactions and asynchronous flows defined? | -| Criticality | Are critical voice, connection, security, and diagnostics behaviors detailed? | -| Technical complexity | Are complex units decomposed and testable? | -| Risks | Are platform, audio, protocol, encoding, and localization risks addressed? | -| Testability | Can unit tests, widget tests, integration tests, and platform tests be derived from the design? | -| Traceability | Does every detailed item link directly to SAD only? | -| Consistency | Are SAD, SDD, unit interfaces, and verification expectations consistent? | - - -## 7. Detailed Design Items - -**SDD-001**: `ChanoraApp` shall initialize theme, localization, platform services, and routing before rendering feature content. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraApp` -- Source SAD: SAD-001, SAD-031 -- Verification method: Unit Test, Integration Test - -Initialization order: platform bindings -> localization resources -> theme model -> app router -> adaptive shell. - -**SDD-002**: `ChanoraThemeFactory` shall create Material 3 ThemeData for light and dark modes. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraThemeFactory` -- Source SAD: SAD-001, SAD-002, SAD-043 -- Verification method: Unit Test - -The factory returns ThemeData instances with Material 3 enabled and populated ColorScheme and TextTheme values. - -**SDD-003**: `ChanoraThemeFactory` shall support seed-color replacement without feature-screen changes. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraThemeFactory` -- Source SAD: SAD-001, SAD-002, SAD-044 -- Verification method: Unit Test - -Seed color is injected into theme construction and not referenced in feature modules. - -**SDD-004**: `ChanoraSemanticColors` shall define connection state colors independently from base ColorScheme. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraSemanticColors` -- Source SAD: SAD-004, SAD-007 -- Verification method: Unit Test - -Connection tokens include connected, connecting, reconnecting, disconnected, and error roles. - -**SDD-005**: `ChanoraSemanticColors` shall define voice state colors independently from base ColorScheme. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraSemanticColors` -- Source SAD: SAD-005, SAD-007 -- Verification method: Unit Test - -Voice tokens include speaking, muted, deafened, push-to-talk-active, and unavailable roles. - -**SDD-006**: `ChanoraSemanticColors` shall define latency, packet-loss, diagnostics, and error semantic roles. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraSemanticColors` -- Source SAD: SAD-006, SAD-007 -- Verification method: Unit Test - -Token names remain semantic and shall not embed raw color names in API names. - -**SDD-007**: `ChanoraSpacing` shall define reusable spacing values for compact, medium, and expanded layouts. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraSpacing` -- Source SAD: SAD-002, SAD-003 -- Verification method: Unit Test - -Spacing APIs expose xs, sm, md, lg, xl, and xxl values. - -**SDD-008**: `ChanoraShape` shall define reusable corner and shape values for cards, buttons, panels, badges, and sheets. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraShape` -- Source SAD: SAD-002, SAD-003 -- Verification method: Unit Test - -Shape APIs expose none, small, medium, large, extraLarge, and full values. - -**SDD-009**: `ChanoraMotion` shall define standard durations and reduced-motion behavior. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraMotion` -- Source SAD: SAD-009 -- Verification method: Unit Test - -The unit maps reduced-motion settings to no-motion or simplified-motion behavior. - -**SDD-010**: Feature widgets shall read tokens through Flutter theme accessors only. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Feature Widgets` -- Source SAD: SAD-003, SAD-007 -- Verification method: Static Inspection - -Feature code may call Theme.of(context) and extension accessors, but shall not instantiate semantic tokens. - -**SDD-011**: `ChanoraAdaptiveShell` shall classify window width into compact, medium, or expanded. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraAdaptiveShell` -- Source SAD: SAD-008 -- Verification method: Unit Test - -Classification thresholds are centralized in the shell configuration. - -**SDD-012**: `ChanoraAdaptiveShell` shall dispatch to `CompactShell`, `MediumShell`, or `ExpandedShell`. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraAdaptiveShell` -- Source SAD: SAD-008, SAD-009, SAD-010, SAD-011 -- Verification method: Widget Test - -Layout selection shall be deterministic for a given window class. - -**SDD-013**: `CompactShell` shall render single-column content and mobile navigation. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `CompactShell` -- Source SAD: SAD-009 -- Verification method: Widget Test - -Compact layout shall avoid side-by-side pane requirements. - -**SDD-014**: `MediumShell` shall render side navigation or navigation rail behavior. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `MediumShell` -- Source SAD: SAD-010 -- Verification method: Widget Test - -Medium layout shall preserve main content and primary navigation. - -**SDD-015**: `ExpandedShell` shall render persistent pane regions and persistent voice controls. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ExpandedShell` -- Source SAD: SAD-011 -- Verification method: Widget Test - -Expanded layout shall support a side pane, main pane, and persistent VoiceBar slot. - -**SDD-016**: `ConnectionStatusPresenter` shall provide non-color-only connection state presentation data. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ConnectionStatusPresenter` -- Source SAD: SAD-012, SAD-014 -- Verification method: Unit Test - -The presenter returns label, icon, severity token, and accessibility description. - -**SDD-017**: `ChanoraVoiceBar` shall expose mute, deaf, push-to-talk, input meter, current channel, and latency properties. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraVoiceBar` -- Source SAD: SAD-013 -- Verification method: Widget Test - -VoiceBar properties are supplied from view models and shall not call Rust Core directly. - -**SDD-018**: `ChanoraVoiceBar` shall remain renderable as a persistent shell slot. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraVoiceBar` -- Source SAD: SAD-007, SAD-013 -- Verification method: Widget Test - -The component shall not depend on a specific route. - -**SDD-019**: `ChanoraChannelTree` shall support hierarchical channel nodes and client rows. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraChannelTree` -- Source SAD: SAD-003, SAD-006 -- Verification method: Widget Test - -The component consumes ChannelTreeVm data and supports expansion state. - -**SDD-020**: `ChanoraChannelTree` shall support selected state, expansion state, join intent, and context-menu intent. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraChannelTree` -- Source SAD: SAD-006, SAD-015 -- Verification method: Widget Test - -UI events are emitted through callbacks and view-model intents. - -**SDD-021**: `ChanoraClientTile` shall display client status with text, icon, and semantic state cues. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraClientTile` -- Source SAD: SAD-003, SAD-014 -- Verification method: Widget Test, Accessibility Test - -Client state shall not rely on color alone. - -**SDD-022**: `ChanoraStatusBadge` shall expose visible text or icon and accessibility semantics. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraStatusBadge` -- Source SAD: SAD-012, SAD-014 -- Verification method: Widget Test, Accessibility Test - -Badge states include normal, warning, error, speaking, muted, and disconnected. - -**SDD-023**: `ChanoraAudioMeter` shall display audio input level and support reduced-motion fallback. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ChanoraAudioMeter` -- Source SAD: SAD-009, SAD-013 -- Verification method: Widget Test - -Reduced-motion mode shall use simplified or static visual behavior. - -**SDD-024**: All icon-only buttons shall provide localized semantic labels. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Design System Components` -- Source SAD: SAD-014, SAD-020 -- Verification method: Accessibility Test - -Icon-only control constructors require label keys or semantic labels. - -**SDD-025**: Focusable components shall define focus order and visible focus style. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `FocusPolicy` -- Source SAD: SAD-015 -- Verification method: Widget Test - -Focus traversal shall be testable with keyboard navigation. - -**SDD-026**: Adaptive shell panes shall support increased text scale without losing critical actions. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Adaptive Shell Components` -- Source SAD: SAD-016 -- Verification method: Accessibility Test - -Critical controls shall wrap, scroll, or remain reachable. - -**SDD-027**: `PlatformInsetsService` shall provide safe area, keyboard inset, display cutout, and desktop inset data. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `PlatformInsetsService` -- Source SAD: SAD-017 -- Verification method: Platform Test - -Insets are consumed by shell layout rather than individual feature screens. - -**SDD-028**: `BackIntentService` shall normalize Android/system back behavior into route-level intents. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `BackIntentService` -- Source SAD: SAD-018 -- Verification method: Platform Test, Widget Test - -Back handling shall be testable without direct platform branching in feature screens. - -Implementation requirements: - -1. Registration paths (Android, minSdk per SDD-073): - - On API 33+ (`Build.VERSION.SDK_INT >= TIRAMISU`), the host `MainActivity` shall register an `OnBackInvokedCallback` against `onBackInvokedDispatcher` at priority `PRIORITY_DEFAULT`. The callback shall delegate to `BackIntentService.dispatch()` and return without calling the system fallback. The callback shall be unregistered in `onDestroy`. - - On API 28–32 (pre-33 fallback), the host `MainActivity` shall add an `OnBackPressedCallback` (enabled = true) to `onBackPressedDispatcher`. The callback shall delegate to `BackIntentService.dispatch()`. When `dispatch()` returns `BackIntent.exitCandidate`, the callback shall set `isEnabled = false` and re-invoke `onBackPressed()` exactly once so the OS finishes the activity. The callback shall be removed on `onDestroy`. - - The predictive-back gesture animation provided by API 34+ is permitted; `BackIntentService` shall not depend on it and shall remain functional when predictive back is disabled by the OEM. - -2. Route-pop semantics: `BackIntentService.dispatch()` shall resolve the back intent in the following deterministic order and emit exactly one `BackIntent` per platform back event: - a. If the in-call PTT key is currently pressed (transmit_active = true via `AudioTransmitGate.load()` per SDD-089) the service shall return `BackIntent.ignore`. The platform back event shall be consumed without UI effect to prevent accidental disconnection during transmit. - b. Else if a modal or dialog route is open on the Navigator (`Navigator.canPop(context)` true AND topmost route `isDialog == true` or `fullscreenDialog == true`), the service shall return `BackIntent.close` and pop only the modal/dialog. - c. Else if the Navigator can pop a non-root route, the service shall return `BackIntent.pop` and pop one route. - d. Else (at root route, no modal, no PTT), the service shall return `BackIntent.exitCandidate` and defer to the platform fallback (system back / activity finish) per the registration rules above. - -3. Interface output enum: `BackIntent ::= { pop, close, ignore, exitCandidate }` (matches §5 interface catalog). - -4. Threading: `dispatch()` runs on the platform main thread; reads of `AudioTransmitGate` shall use the atomic load path (no blocking await on the bridge isolate). - -5. Diagnostics: each dispatch shall emit a structured event with the resolved intent and the route depth; the event shall not include route arguments, user content, or PTT key identifiers (per SAD-077 / SDD-090 sanitiser rules). - -6. Non-Android platforms: `BackIntentService` shall expose the same Dart interface but the registration path shall no-op; feature screens shall remain unchanged across platforms (single back-intent abstraction). - -**SDD-029**: `HapticsService` shall expose platform-aware haptic feedback operations. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `HapticsService` -- Source SAD: SAD-019 -- Verification method: Platform Test - -Haptics calls are optional and shall no-op where unsupported. - -**SDD-030**: `KeyboardAvoidancePolicy` shall prevent critical controls from being covered by virtual keyboards. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `KeyboardAvoidancePolicy` -- Source SAD: SAD-017, SAD-019 -- Verification method: Platform Test - -Inputs and primary actions remain reachable when the virtual keyboard appears. - -**SDD-031**: `LocalizationService` shall load product string resources for the active locale. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `LocalizationService` -- Source SAD: SAD-020 -- Verification method: Unit Test - -The unit returns localized strings by key. - -**SDD-032**: `LocalizationService` shall fall back to the baseline English locale when a key is missing. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `LocalizationService` -- Source SAD: SAD-020 -- Verification method: Unit Test - -Fallback behavior is deterministic and logged for diagnostics. - -**SDD-033**: `LocalizationService` shall allow new locale resources without changes to protocol, audio, state, or storage modules. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `LocalizationService` -- Source SAD: SAD-020 -- Verification method: Inspection - -Locale resource registration is separated from non-UI software modules. - -**SDD-034**: `ContentTextAdapter` shall pass through server-provided names and messages without translation. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ContentTextAdapter` -- Source SAD: SAD-021 -- Verification method: Integration Test - -Server content is treated as user/server content rather than product copy. - -**SDD-035**: `UnicodeTextBoundary` shall validate cross-layer text DTOs as UTF-8 compatible strings. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `UnicodeTextBoundary` -- Source SAD: SAD-022, SAD-023 -- Verification method: Unit Test, Integration Test - -Invalid external encodings are handled at boundaries. - -**SDD-036**: Protocol-boundary conversion shall be implemented only in protocol adapter code. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Protocol Adapter Text Boundary` -- Source SAD: SAD-023 -- Verification method: Inspection - -No general Flutter feature code may perform protocol encoding conversion. - -**SDD-037**: Platform-boundary conversion shall be implemented only in platform adapter code. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Platform Adapter Text Boundary` -- Source SAD: SAD-023 -- Verification method: Inspection - -Platform-specific string conversion remains explicit and localized. - -**SDD-038**: Diagnostics export shall preserve Unicode after redaction. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `DiagnosticsTextPresenter` -- Source SAD: SAD-024 -- Verification method: Test, Audit - -Redaction removes secrets, not arbitrary multilingual content. - -**SDD-039**: Bidi text rendering shall use Flutter text widgets and directionality behavior compatible with platform support. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Flutter Text Presentation` -- Source SAD: SAD-025 -- Verification method: Localization Test - -Text rendering allows LTR and RTL content where supported. - -**SDD-040**: Locale-aware formatting shall be centralized in localization utilities. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `LocalizationFormatting` -- Source SAD: SAD-026 -- Verification method: Unit Test - -Dates, times, numbers, and timestamps are formatted by locale-aware helpers. - -**SDD-041**: Diagnostics event keys shall remain stable and language-neutral. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `DiagnosticsTextPresenter` -- Source SAD: SAD-027 -- Verification method: Unit Test - -User-facing descriptions are separate from machine-readable event keys. - -**SDD-042**: UI/UX supporting documents shall be versioned with the software architecture baseline. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Documentation Set` -- Source SAD: SAD-028 -- Verification method: Review - -Guidelines, token docs, component docs, adaptive docs, and platform docs are maintained as supporting baselines. - -**SDD-043**: SAD source validation shall reject direct lower-layer source fields. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Traceability Checker` -- Source SAD: SAD-029 -- Verification method: Inspection - -Automated or manual review checks SAD source fields. - -**SDD-044**: SDD source validation shall reject direct non-SAD source fields. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Traceability Checker` -- Source SAD: SAD-030, SAD-045 -- Verification method: Inspection - -Automated or manual review checks SDD source fields. - -**SDD-045**: Theme/localization/platform initialization shall be tested before first feature render. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `App Initialization Tests` -- Source SAD: SAD-031 -- Verification method: Integration Test - -The app shell is tested for initialization order. - -**SDD-046**: Bridge facade DTOs shall expose only stable UI-safe data structures. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `BridgeFacade` -- Source SAD: SAD-040, SAD-041 -- Verification method: Integration Test - -Flutter must not depend on Rust internal types. - -**SDD-047**: Core event mapping shall convert Rust Core events into feature view models. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `CoreEventMapper` -- Source SAD: SAD-041 -- Verification method: Unit Test - -Event mapping is deterministic and testable. - -**SDD-048**: Audio state view models shall separate UI state from real-time audio processing. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `VoiceViewModel` -- Source SAD: SAD-034, SAD-039 -- Verification method: Unit Test - -Voice UI receives status values without performing DSP. - -**SDD-049**: Storage access shall be isolated from feature widgets behind repository or service APIs. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `StorageFacade` -- Source SAD: SAD-035 -- Verification method: Inspection - -Feature widgets shall not call database APIs directly. - -**SDD-050**: Diagnostics UI shall obtain localized display text from diagnostics presentation services. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `DiagnosticsTextPresenter` -- Source SAD: SAD-027, SAD-036, SAD-050 -- Verification method: Widget Test - -Diagnostics UI consumes display models. - -**SDD-051**: `ArchitectureViewDocs` shall maintain context, container, component, runtime, deployment, data, security, diagnostics, UI, audio, protocol, and i18n views. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `ArchitectureViewDocs` -- Source SAD: SAD-046, SAD-048, SAD-049, SAD-050 -- Verification method: Review - -Architecture views are updated when architecture-affecting changes occur. - -**SDD-052**: `ArchitectureViewDocs` shall maintain an ADR index for accepted, deprecated, and superseded architectural decisions. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `ArchitectureViewDocs` -- Source SAD: SAD-047 -- Verification method: Review - -ADR entries include decision, rationale, status, and impact. - -**SDD-053**: `DeploymentConfig` shall define platform-specific packaging and release configuration units. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `DeploymentConfig` -- Source SAD: SAD-049 -- Verification method: Inspection - -Deployment configuration separates platform package metadata from feature code. - -**SDD-054**: `DiagnosticsArchitecture` shall centralize logging, event keys, localized descriptions, redaction, and export presentation. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `DiagnosticsArchitecture` -- Source SAD: SAD-050 -- Verification method: Unit Test, Audit - -Diagnostics behavior is implemented through centralized services. - -**SDD-055**: `ArchitectureTraceChecker` shall check that SDD items reference only SAD IDs. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `ArchitectureTraceChecker` -- Source SAD: SAD-030, SAD-045 -- Verification method: Inspection - -A documentation check fails when non-SAD source IDs appear in SDD item source fields. - -**SDD-056**: `ArchitectureTraceChecker` shall check that SAD items reference only SRS IDs. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `ArchitectureTraceChecker` -- Source SAD: SAD-029 -- Verification method: Inspection - -A documentation check fails when non-SRS source IDs appear in SAD item source fields. - - - -**SDD-057**: `ArchitectureViewDocs` shall define reviewable architecture views for context, containers, components, runtime behavior, deployment, data, security, diagnostics, UI, audio, protocol, and i18n. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `ArchitectureViewDocs` -- Source SAD: SAD-046, SAD-051 -- Verification method: Review - -Each architecture view is maintained as part of the SAD baseline and referenced by the affected detailed design units. - -**SDD-058**: `ArchitectureViewDocs` shall define an ADR record structure with ID, title, status, decision, rationale, consequences, affected units, and change history. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `ArchitectureViewDocs` -- Source SAD: SAD-047 -- Verification method: Review - -ADR records support architecture communication and change impact analysis. - -**SDD-059**: `InterfaceDetailCatalog` shall refine SAD architectural interfaces into unit-level interface entries. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `InterfaceDetailCatalog` -- Source SAD: SAD-052, SAD-057 -- Verification method: Inspection - -Each entry includes name, type, unit, resolution, range, default value, and error/fallback behavior where applicable. - -**SDD-060**: `InterfaceDetailCatalog` shall define command, event, localization, Unicode, diagnostics, adaptive layout, audio meter, and platform-intent interfaces. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `InterfaceDetailCatalog` -- Source SAD: SAD-052, SAD-056, SAD-057 -- Verification method: Inspection - -The catalog supports integration and unit verification planning. - -**SDD-061**: `PerformanceDesignNotes` shall record UI responsiveness, audio latency, memory growth, reconnect, localization, and diagnostics resource considerations. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `PerformanceDesignNotes` -- Source SAD: SAD-053 -- Verification method: Review, Analysis - -Performance notes identify design mechanisms and verification hooks. - -**SDD-062**: `AssumptionRegister` shall record software design assumptions and dependencies that affect feasibility. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `AssumptionRegister` -- Source SAD: SAD-054 -- Verification method: Review - -Assumptions are reviewed during change impact analysis. - -**SDD-063**: `ArchitectureGlossary` shall provide definitions for architecture and detailed design terms. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P2 / Production -- Software unit: `ArchitectureGlossary` -- Source SAD: SAD-055 -- Verification method: Review - -The glossary reduces ambiguity across software architecture, detailed design, and verification. - -**SDD-064**: Each software unit detailed design shall include responsibility, inputs, outputs, interfaces, dynamic behavior, error behavior, resource behavior, and verification hooks where applicable. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `SoftwareUnitDesignTemplate` -- Source SAD: SAD-058, SAD-059 -- Verification method: Review, Inspection - -The template defines the minimum expected detail for unit construction and unit verification. - -**SDD-065**: `UnitConstructionGuideline` shall state that software units are constructed according to the SDD rather than reverse-documented from code. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `UnitConstructionGuideline` -- Source SAD: SAD-059 -- Verification method: Review - -The unit construction guideline preserves design-to-code traceability. - -**SDD-066**: `SoftwareUnitTraceChecker` shall verify that SDD items link directly to SAD IDs only. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `SoftwareUnitTraceChecker` -- Source SAD: SAD-030, SAD-045, SAD-060 -- Verification method: Inspection - -The checker supports traceability rule enforcement. - -**SDD-067**: `SoftwareUnitTraceChecker` shall support impact analysis from changed SAD items to affected SDD items. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `SoftwareUnitTraceChecker` -- Source SAD: SAD-060 -- Verification method: Inspection - -Impact analysis output identifies affected detailed design units. - -**SDD-068**: `DetailedDesignReviewRecord` shall capture review evidence for SDD completeness, testability, and consistency with SAD. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `DetailedDesignReviewRecord` -- Source SAD: SAD-059, SAD-060 -- Verification method: Review - -Review records support baseline approval and communication. - -**SDD-069**: `UnitVerificationHandoff` shall identify verification method candidates for each software unit. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `UnitVerificationHandoff` -- Source SAD: SAD-059 -- Verification method: Review - -The handoff supports unit verification planning. - -**SDD-070**: `SoftwareUnitRegistry` shall maintain the list of software units, their owning component, source SAD items, and implementation status. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `SoftwareUnitRegistry` -- Source SAD: SAD-058, SAD-060 -- Verification method: Inspection - -The registry supports consistency between architecture, detailed design, implementation, and verification. - - -## 8. SAD-to-SDD Coverage Matrix - -| SAD Range | SDD Coverage | -|---|---| -| SAD-001 through SAD-007 | SDD-001 through SDD-010 | -| SAD-008 through SAD-011 | SDD-011 through SDD-015 | -| SAD-012 through SAD-016 | SDD-016 through SDD-026 | -| SAD-017 through SAD-019 | SDD-027 through SDD-030 | -| SAD-020 through SAD-027 | SDD-031 through SDD-041 | -| SAD-028 through SAD-031 | SDD-042 through SDD-045 | -| SAD-032 through SAD-038 | SDD-046 through SDD-050 | -| SAD-039 through SAD-045 | SDD-046 through SDD-050, SDD-055, SDD-056 | -| SAD-046 through SAD-050 | SDD-051 through SDD-058, SDD-061 | -| SAD-051 through SAD-060 | SDD-057 through SDD-070 | - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial SDD baseline covering SAD-001 through SAD-045 and enforcing SAD-only direct traceability. | -| 0.2.0 | 2026-05-14 | Updated SDD coverage for expanded SAD v0.2 architecture views, ADRs, deployment architecture, diagnostics architecture, and traceability checker units. | -| 0.3.0 | 2026-05-14 | Added SWE.3 detailed-design completeness criteria, unit interface detail catalog, evaluation checklist, unit construction guideline, and additional SAD coverage. | - ---- - -## 10. Platform Baseline and Product Decision Detailed Design Addendum - -**SDD-071**: `IOSBuildConfig` shall define the iOS minimum runtime deployment target as iOS 13 unless an approved platform change raises it. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `IOSBuildConfig` -- Source SAD: SAD-061 -- Verification method: Inspection, Platform Test - -**SDD-072**: `IOSReleaseGate` shall verify that App Store Connect upload builds use Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later on or after 2026-04-28 unless Apple publishes a newer applicable upload requirement. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `IOSReleaseGate` -- Source SAD: SAD-062 -- Verification method: Release Inspection - -**SDD-073**: `AndroidBuildConfig` shall define Android API 28 (Android 9.0 Pie) as the minimum Android runtime baseline per DEC-004 and shall expose target SDK configuration for release inspection. This supersedes the prior API 24 recommendation and is reconciled with SRS-187 / SysRS-288 / SAD-063. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AndroidBuildConfig` -- Source SAD: SAD-063 -- Verification method: Platform Test, Release Inspection, Build Test - -Implementation requirements (Gradle / `apps/chanora_flutter/android/app/build.gradle.kts`): - -1. `minSdk = 28`. The value shall be sourced from a single `gradle.properties` (or equivalent) constant `chanora.android.minSdk` so that release-inspection tooling can assert it without parsing Kotlin DSL. -2. `targetSdk` policy: `targetSdk` shall be set to the Android API level required by Google Play on the upload date per SRS-188. The build shall not pin `targetSdk` below the Play-required floor. Release inspection shall verify `targetSdk >= ` at build time and fail the build otherwise. -3. `compileSdk` shall be `>= targetSdk` and shall track the latest stable Android SDK supported by the configured Android Gradle Plugin. -4. NDK ABIs: `ndk.abiFilters` shall include exactly `arm64-v8a`, `armeabi-v7a`, and `x86_64`. Other ABIs (e.g., `x86`, `mips`) shall not be packaged. The AAB output (see SDD-107) shall rely on Play's per-ABI delivery rather than a fat APK. -5. Release signing config: release builds shall use a non-debug signing configuration. `AndroidBuildConfig` shall not embed key material in the repository; signing credentials shall be supplied at CI time via environment variables (e.g., `CHANORA_ANDROID_KEYSTORE_PATH`, `CHANORA_ANDROID_KEYSTORE_PASSWORD`, `CHANORA_ANDROID_KEY_ALIAS`, `CHANORA_ANDROID_KEY_PASSWORD`) or a CI secret manager. CI shall fail the release pipeline if any of these variables is unset, if `signingConfig` resolves to `debug`, or if `signingConfig.storeFile` points to a path matching `**/debug.keystore`. Local developer builds may skip the assertion when the Gradle property `chanora.release.signing.required` is false. -6. R8 / ProGuard stance: release builds shall enable R8 (`isMinifyEnabled = true`, `isShrinkResources = true`) with the default Android optimization rules plus a project `proguard-rules.pro` that keeps: - - JNI entry classes for `chanora_bridge` (covered by SDD-105 `AndroidJniBootstrap`), - - Flutter and FRB generated bindings, - - any class referenced solely via reflection from native code. - Debug builds shall set `isMinifyEnabled = false`. -7. AAB output format: the release deliverable shall be the Android App Bundle (`.aab`) produced by `bundleRelease` per SRS-119. APKs shall be produced only for internal QA distribution. See SDD-107 (`AndroidAaBuildPipeline`) for the packaging-pipeline detail. -8. Manifest preconditions: `uses-sdk` shall not override `minSdkVersion` below 28; tooling shall reject any module-level manifest that lowers it. - -**SDD-074**: `ConnectionSessionManager` shall enforce a single active server connection in MVP. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `ConnectionSessionManager` -- Source SAD: SAD-064 -- Verification method: Unit Test, System Test - -**SDD-075**: `AudioProcessingSettings` shall default AEC, AGC, Noise Suppression, and High-Pass Filter to enabled where supported and stable. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AudioProcessingSettings` -- Source SAD: SAD-065 -- Verification method: Unit Test, Audio Test - -**SDD-076**: `AudioProcessingBackendSelector` shall select platform-native audio processing first where available and stable and isolate any fallback backend behind the audio subsystem interface. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `AudioProcessingBackendSelector` -- Source SAD: SAD-066 -- Verification method: Unit Test, Audio Test - -**SDD-077**: `LocalDatabaseRepository` shall persist non-secret local state through SQLite or an equivalent embedded database abstraction. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `LocalDatabaseRepository` -- Source SAD: SAD-067 -- Verification method: Unit Test, Storage Test - -**SDD-078**: `SecretStorageRepository` shall persist secrets only through platform secure storage service interfaces. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `SecretStorageRepository` -- Source SAD: SAD-067 -- Verification method: Unit Test, Security Audit - -**SDD-079**: `TypedBridgeFacade` shall define generated or schema-controlled DTOs for Flutter/Rust commands, results, and events. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `TypedBridgeFacade` -- Source SAD: SAD-068 -- Verification method: Integration Test, Inspection - -**SDD-080**: `DiagnosticsPrivacyGate` shall disable automatic diagnostic upload, telemetry upload, and crash reporting in MVP release configuration unless an approved decision enables them. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `DiagnosticsPrivacyGate` -- Source SAD: SAD-069, SAD-070 -- Verification method: Privacy Review, Security Audit - -**SDD-081**: `DesktopPttBackend` shall be a Rust trait in `chanora_audio::ptt` exposing `fn capability(&self) -> PttCapabilityLevel`, `fn backend_id(&self) -> &'static str`, `fn start(&mut self, gate: Arc, binding: PttBinding) -> Result<(), PttError>`, `fn stop(&mut self)`, and `fn rebind(&mut self, binding: PttBinding) -> Result<(), PttError>`. Implementations shall be Send and stop on Drop. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `DesktopPttBackend` -- Source SAD: SAD-071 -- Verification method: Unit Test, Inspection - -**SDD-082**: `PttCapabilityLevel` shall be a plain Rust enum (`L0Focused`, `L1GlobalShortcut`, `L2GlobalHoldToTalk`, `L3GlobalWithMouseButtons`, `L4DeviceAware`) with a public `as_str(&self) -> &'static str` mapping for diagnostics. `L4DeviceAware` is reserved and shall not be produced by any MVP implementation. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `PttCapabilityLevel` -- Source SAD: SAD-071 -- Verification method: Unit Test - -**SDD-083**: `WindowsRawInputBackend` shall use the `RegisterRawInputDevices` Win32 API targeting `HID_USAGE_PAGE_GENERIC` keyboard and mouse usages, run a dedicated message-only window on its own OS thread, and forward only sanitised binding-match results to the `AudioTransmitGate`. Raw `RAWINPUT` payloads shall never cross the backend boundary. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `WindowsRawInputBackend` -- Source SAD: SAD-072 -- Verification method: Platform Test (Windows), Unit Test - -**SDD-084**: `WindowsHookBackend` shall be used only when Raw Input registration fails. It installs `WH_KEYBOARD_LL` and `WH_MOUSE_LL` hooks on its dedicated thread; the hook callbacks compare against the active binding and call `AudioTransmitGate::set` only, never logging key data. The hook is uninstalled on Drop. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `WindowsHookBackend` -- Source SAD: SAD-072 -- Verification method: Platform Test (Windows), Unit Test - -**SDD-085**: `MacOSEventTapBackend` shall create a `CGEventTap` filtered to keyboard and mouse-button events, attached to the main run loop with an explicit retain. The tap callback shall consult the active binding and call `AudioTransmitGate::set` only. The backend shall expose `permission_state() -> Granted | Denied | Undetermined` via `IOHIDCheckAccess` (or the macOS-version-appropriate equivalent) and shall return `PttCapabilityLevel::L0Focused` when permission is not Granted. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `MacOSEventTapBackend` -- Source SAD: SAD-073 -- Verification method: Platform Test (macOS), User Acceptance Test - -**SDD-086**: `LinuxGnomeWaylandBackend` shall call `CreateSession`, `BindShortcuts`, and listen for `Activated` / `Deactivated` signals on the freedesktop `org.freedesktop.portal.GlobalShortcuts` D-Bus interface. Binding capture shall use the portal's own configuration dialog; Chanora itself does not read raw key events. Missing D-Bus or missing portal interface resolves to `PttCapabilityLevel::L0Focused`. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `LinuxGnomeWaylandBackend` -- Source SAD: SAD-074 -- Verification method: Platform Test (Linux, GNOME Wayland), Unit Test - -**SDD-087**: `FocusedPttBackend` shall integrate with Flutter's keyboard / pointer event stream via the existing `Listener` widget path and the bridge `set_ptt` command. Reports `PttCapabilityLevel::L0Focused` and `backend_id = "focused"`. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `FocusedPttBackend` -- Source SAD: SAD-071, SAD-072, SAD-073, SAD-074 -- Verification method: Unit Test, UI Review - -**SDD-088**: `PttController` shall sit in `chanora_core::ptt` and own a `Box`, a clone of `AudioTransmitGate`, a `watch::Sender` for live publication to the bridge, and a `tokio::sync::Mutex` over the active `PttBinding`. Public surface: `set_binding`, `current_capability`, `subscribe_capability`. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `PttController` -- Source SAD: SAD-071, SAD-076 -- Verification method: Unit Test, Integration Test - -**SDD-089**: `AudioTransmitGate` shall be `Arc` wrapping a `tokio::sync::watch::Sender` and an internal `AtomicBool`. `set(v)` updates both atomically; `load()` reads the atomic; `subscribe()` hands out a `watch::Receiver` for the missed-key-up watchdog task. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AudioTransmitGate` -- Source SAD: SAD-075 -- Verification method: Unit Test - -**SDD-090**: `PttSanitizer` shall implement `tracing_subscriber::Layer` and decorate the existing `RedactingLogLayer`. Records whose field names match any of the following banned field names shall be dropped before `on_event` reaches the wrapped sink: `key_code`, `scan_code`, `virtual_key`, `vk`, `keysym`, `keysym_string`, `key_sequence` (7 fields required by SAD-077) and `key_press_history`, `key_timing` (2 defensive additions for future PTT diagnostic fields that might carry raw key data). The implementation shall be allocation-free on the success path (the typical "no banned field" case). - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `PttSanitizer` -- Source SAD: SAD-077 -- Verification method: Unit Test, Privacy Review - -**SDD-091**: `PttCapabilityBadge` shall be a Flutter widget rendered inside the Voice Bar, subscribed to the FRB stream of `BridgeEvent::PttCapability`. The widget shall map each enum value to a short user-facing label and shall render an info icon that opens a per-platform explanation sheet when the resolved capability is `L0Focused`. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `PttCapabilityBadge` -- Source SAD: SAD-078 -- Verification method: UI Review, User Acceptance Test - -**SDD-092**: `MissedKeyUpWatchdog` shall be a tokio task spawned by the audio engine that holds the `watch::Receiver` from `AudioTransmitGate::subscribe()`. On each transition from `false` to `true` the task records the timestamp; on each `true -> false` transition the task clears the timestamp. If the transition timeline shows `true` for longer than the configured timeout the task calls `AudioTransmitGate::set(false)` and emits a sanitised diagnostic record. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `MissedKeyUpWatchdog` -- Source SAD: SAD-079 -- Verification method: Unit Test, Integration Test - -**SDD-093**: `PttInputClass` shall be a Rust enum in `chanora_audio::ptt_backends` with variants `None`, `Keyboard`, and `MouseSideButton`. The enum is the only carrier of the user's bound input class across the audio + bridge + Flutter boundary; its `as_str(&self) -> &'static str` mapping returns the diagnostic-safe label (`""` / `"keyboard"` / `"mouse-side-button"`) consumed by `PttBackendDescriptor::bound_input_class`. The Windows backend ladder and the macOS event-tap backend shall observe the `MouseSideButton` variant on their binding-rebind path and translate it into the platform's native side-button identifier internally; the Linux GNOME-Wayland portal backend shall accept whatever input class the portal returns from `BindShortcuts` and apply the same classifier already documented in `desktop-ptt-architecture.md` §5.3. The Flutter binding-capture dialog shall capture mouse side-button presses through the `PointerEvent.buttons` bitmask (back = `0x08`, forward = `0x10`) and never forward the raw bitmask beyond the dialog — the bridge `set_ptt_binding` call carries only the enum variant. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `PttInputClass`, `WindowsRawInputBackend`, `WindowsHookBackend`, `MacOSEventTapBackend`, `LinuxGnomeWaylandBackend`, `_PttBindingCaptureDialog` -- Source SAD: SAD-080 -- Verification method: Unit Test, Platform Test (Windows / macOS / Linux), UI Review - -**SDD-094**: `chanora_bridge::voice::voice_join(channel_id: ChannelId) -> Result<(), VoiceError>` and `chanora_bridge::voice::voice_leave() -> Result<(), VoiceError>` shall be the only public-bridge voice lifecycle calls. Internally `chanora_audio::engine::AudioEngine::ensure_running()` shall be idempotent and shall open the cpal input and output streams on the first call of the session; `chanora_audio::engine::AudioEngine::shutdown_if_idle()` shall be called from `voice_leave` and shall close both streams when no voice channels remain. The Flutter widget tree shall subscribe to `BridgeEvent::VoiceState { in_channel, transmit_mode, mute, release_tail_ms }` through the existing FRB stream and shall render the Voice Bar from that stream. The pre-existing `start_audio` and `stop_audio` FRB symbols shall be deleted from `crates/chanora_bridge/src/api.rs` together with their generated bindings; the corresponding caller in `apps/chanora_flutter/lib/main.dart` shall be removed. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `chanora_bridge::voice`, `chanora_audio::engine::AudioEngine`, `BridgeEvent::VoiceState`, `apps/chanora_flutter/lib/main.dart` -- Source SAD: SAD-081 -- Verification method: Integration Test, UI Review - -**SDD-095**: `chanora_audio::TransmitMode` shall be a `#[repr(u8)]` Rust enum with variants `Ptt = 0`, `Continuous = 1`, `VoiceActivity = 2`. Persistence shall be provided by `chanora_storage::IdentityStore::set_transmit_mode(&self, mode: TransmitMode)` and `chanora_storage::IdentityStore::get_transmit_mode(&self) -> TransmitMode`, the latter returning `TransmitMode::Ptt` on first read for a fresh install. The bridge surface shall carry the enum across the FFI boundary via `mirror` codegen as `BridgeTransmitMode`. The Flutter settings page in `apps/chanora_flutter/lib/widgets/voice_settings.dart` shall render three radio rows; the `VoiceActivity` row shall be rendered with `enabled: false` and a "Coming soon" trailing label until DEC-030 is resolved and an implementation is allocated. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `chanora_audio::TransmitMode`, `chanora_storage::IdentityStore::{set_transmit_mode, get_transmit_mode}`, `BridgeTransmitMode`, `apps/chanora_flutter/lib/widgets/voice_settings.dart` -- Source SAD: SAD-083 -- Verification method: Unit Test, UI Review - -**SDD-096**: `chanora_audio::release_tail::ReleaseTailTimer` shall be a tokio-task-owning struct exposing `arm(&self, gate: AudioTransmitGate, tail_ms: u32)`, `key_down(&self)`, `key_up(&self)`, and `cancel(&self)`. Internally the struct shall hold a `tokio::sync::watch::Sender` plus a `JoinHandle<()>` for the pending close. `key_down` shall cancel any pending close by aborting the `JoinHandle` (`cancel_pending()`) and shall set `transmit_active = true` via the gate; `key_up` shall abort the prior close handle via `JoinHandle::abort()` and shall spawn a new task that sleeps for `tail_ms` milliseconds and then sets `transmit_active = false`. Cancellation is performed by aborting the pending `JoinHandle`; the watch channel enables cooperative early exit — the spawned task races `cancel_rx.changed()` against the tail sleep so that it can exit without writing to the gate when the sender is replaced or dropped. The struct shall use no `unsafe`. No `std::sync::Mutex` — interior mutability shall use `std::sync::RwLock` for brief edge-transition writes (`arm`, `key_down`, `key_up`, `cancel`); concurrent reads are uncontended. The watch handle shall be shared via atomic refcounts. The configuration value `release_tail_ms` shall live in the identity store next to `transmit_mode`, with a default of 200 and validated range 0–500 inclusive on every write. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `chanora_audio::release_tail::ReleaseTailTimer`, `chanora_storage::IdentityStore` (`release_tail_ms`) -- Source SAD: SAD-082 -- Verification method: Unit Test, Integration Test - -**SDD-097**: `apps/chanora_flutter/lib/widgets/voice_bar.dart` shall replace the existing `_AudioControls` widget in `apps/chanora_flutter/lib/main.dart` as the rendering surface for voice state. Its input shall be the `BridgeEvent::VoiceState` stream; its children, in render order, shall be: the channel-name pill (visible only when `in_channel` is true); the mode badge (`PTT: ` / `Continuous` / `Voice activity (coming soon)`); the hard-mute toggle button; the release-tail and threshold disclosure; the level meter; and the PTT capability badge already specified in SDD-091. The "Start audio" button shall be removed from the widget tree. The settings dialog in `apps/chanora_flutter/lib/widgets/voice_settings.dart` shall render the `TransmitMode` radio group, the bind-key button, and a release-tail slider over the range 0–500 ms with step 25 ms; the dialog shall never expose a "Start audio" affordance. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `apps/chanora_flutter/lib/widgets/voice_bar.dart`, `apps/chanora_flutter/lib/widgets/voice_settings.dart`, `apps/chanora_flutter/lib/main.dart` -- Source SAD: SAD-081, SAD-083 -- Verification method: UI Review, Widget Test - -**SDD-098**: `IOSAudioSessionConfig` shall be a Swift unit that configures `AVAudioSession` with category `.playAndRecord`, mode `.default`, and options `.defaultToSpeaker | .allowBluetoothHFP | .allowBluetoothA2DP`. `setCategory` shall be called from `didFinishLaunching` in the app delegate; `setActive` shall be called from the `UIApplication.didBecomeActiveNotification` observer. The actual session state shall be read back after both calls and logged for verification. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `IOSAudioSessionConfig` -- Source SAD: SAD-061, SAD-064 -- Verification method: Platform Test, Release Inspection - -**SDD-099**: `IOSPermissionRequester` shall call `AVAudioSession.sharedInstance().requestRecordPermission` approximately 1 second after app launch. The permission result shall be logged. A denied permission shall surface as an audio engine failure at `voice_join` time with a user-safe message; the UI shall not crash or hang. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `IOSPermissionRequester` -- Source SAD: SAD-061 -- Verification method: Platform Test, Demo - -**SDD-100**: Swift shall observe `AVAudioSession.routeChangeNotification`. On route change where `reason == .oldDeviceUnavailable` or `reason == .newDeviceAvailable`, Swift shall call the Rust bridge method `handleRouteChange()`. The Rust side shall invoke the `ios_voice_unit` restart path, uninitialising then reinitialising per `ios_voice_unit.rs` comments §5. Audio shall continue after rebind. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `IOSRouteChangeHandler`, `ios_voice_unit` -- Source SAD: SAD-061, SAD-064 -- Verification method: Platform Test TC-9.3 - -**SDD-101**: Swift shall observe `AVAudioSession.interruptionNotification`. On `.began` the audio shall pause via `VPIO.stop()`. On `.ended` with `shouldResume == true` the audio shall resume via `VPIO.start()`. A phone call shall yield the audio session; the end of the call shall resume audio without user action. The interruption state shall be communicated to Flutter via `BridgeEvent`. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `IOSInterruptionRecovery`, `BridgeEvent` -- Source SAD: SAD-061 -- Verification method: Platform Test TC-9.1, TC-9.2 - -> **Design note (shouldResume == false):** When iOS signals interruption end with `shouldResume == false`, the VPIO unit remains paused and the `BridgeEvent_InterruptionState` carries `shouldResume: false` to Flutter. The Flutter UI surfaces a snackbar indicating the interruption. The user must manually rejoin the voice channel or the app must implement a "resume audio" action in a future release. This is a known limitation for P0. -> -> **Design note (lifecycle interleaving):** The current iOS audio lifecycle handlers (route change, interruption began/ended) are individually serialized by the session mutex and `_ios_voice_unit` mutex, but do not track an explicit lifecycle state (e.g., `Running`, `Interrupted`, `Restarting`). This means that a route change arriving during an active interruption will restart the VPIO unit even though the app should remain paused. A future release should introduce an explicit iOS audio lifecycle state model that gates restart/resume decisions accordingly. For P0, the risk is mitigated by iOS serializing these notifications on the main thread and the low probability of interleaving in practice. - -**SDD-102**: `Info.plist` shall contain `UIBackgroundModes = [audio]`. The VPIO unit shall continue running when the app backgrounds. iOS shall show the red microphone indicator in the status bar while background audio is active. `AVAudioSession` shall remain active. On iOS lock screen, audio shall continue if the network remains available. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `Info.plist`, `VPIOUnit` -- Source SAD: SAD-061 -- Verification method: Platform Test TC-8 - -**SDD-103**: iOS P0 shall use `FocusedPttBackend` only. There shall be no `DesktopPttBackend` ladder on iOS. `PttCapabilityLevel` shall always be `L0Focused`. The UI shall render an on-screen PTT button. A capability badge shall explain the iOS limitation. Users shall bind a key through the in-app dialog only when the app is in the foreground. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `FocusedPttBackend`, `PttCapabilityLevel`, `FocusedPttBindingDialog` -- Source SAD: SAD-061, SAD-071 -- Verification method: Platform Test TC-3, TC-12 - -**SDD-104**: `VoiceProcessingIO` AudioUnit shall provide hardware AEC, AGC, and noise suppression. These shall always be engaged and shall not be user-disableable. The Flutter audio processing settings UI shall display these as hardware-enabled with switches disabled and a "Hardware-enabled" label. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `VoiceProcessingIO`, `AudioProcessingSettings` (Flutter) -- Source SAD: SAD-061, SAD-065 -- Verification method: Platform Test, Audio Test - ---- - -### Android P0 Platform Detailed Design (SDD-105 through SDD-110) - -**SDD-105**: `AndroidJniBootstrap` shall own the JNI initialisation surface for `chanora_bridge` on Android, covering native library load, `JNI_OnLoad` `JavaVM*` capture, and `initChanoraContext(Context)` invocation. This item back-fills the existing implementation in `crates/chanora_bridge/src/android_init.rs` and the Kotlin caller currently in `MainActivity.kt`; no implementation work is created by this item, only the design constraints under which the back-filled code shall stabilise. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AndroidJniBootstrap` (`crates/chanora_bridge/src/android_init.rs`, `crates/chanora_bridge/build.rs`, `apps/chanora_flutter/android/app/src/main/kotlin/.../ChanoraApplication.kt`) -- Source SAD: SAD-081, SAD-086 -- Verification method: Platform Test (Android), Inspection -- Back-fill: yes (existing code in `crates/chanora_bridge/src/android_init.rs`, `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/ChanoraApplication.kt` (System.loadLibrary), and `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt` (initChanoraContext invocation)) -- Cross-trace: See SDD-118 item 6 (extended) for the runtime staging of `libc++_shared.so` that the `System.loadLibrary` preload depends on; see `crates/chanora_bridge/build.rs` for the DT_NEEDED emission (`cargo:rustc-link-lib=dylib=c++_shared`) that makes the namespace-isolated Android dynamic linker resolve C++ runtime symbols correctly. - -Implementation requirements: - -1. Loader location: `System.loadLibrary("chanora_bridge")` shall be invoked from an `android.app.Application` subclass (e.g., `ChanoraApplication.onCreate()`), not from `MainActivity`. Rationale: `Application.onCreate` runs before any `Activity` is instantiated, guaranteeing the native library is available to early FRB calls, foreground-service callbacks (SDD-107), and any background-trigger paths. The manifest `` attribute shall be set. If a future refactor reintroduces `Activity`-only load, it shall be justified in an ADR. -2. `JNI_OnLoad` (Rust side): on first load the function shall (a) capture `JavaVM*` into a `OnceCell` for later use by audio-engine and foreground-service JNI calls, (b) initialise the `ndk_context` `AndroidContext` with the captured `JavaVM` and a null `Context` placeholder, and (c) return `JNI_VERSION_1_6`. The function shall never panic; any error shall be logged via `android_log` and shall return `JNI_ERR`. -3. `initChanoraContext(context: Context)` shall be called from `ChanoraApplication.onCreate()` exactly once, AFTER `System.loadLibrary` and BEFORE the first FRB call. The Kotlin side shall pass the application `Context` (not an `Activity` context) to avoid leaking activity references into the long-lived JNI singleton. The Rust function shall convert the local-ref `jobject` into a global ref, store it in the `ndk_context::AndroidContext`, and return on success; on failure it shall log and return without crashing. -4. Ordering guarantee: any caller of `chanora_bridge` (FRB-generated bindings, foreground service via SDD-107, audio mode controller via SDD-108) shall be entitled to assume both `JNI_OnLoad` and `initChanoraContext` have completed. The bridge shall expose a debug-only assertion that panics with a clear message if a bridge call observes an uninitialised context. -5. Threading: `initChanoraContext` runs on the Android main thread; subsequent bridge calls may run on any thread. The captured `JavaVM` is process-global and thread-safe; per-thread `JNIEnv` shall be acquired via `JavaVM::attach_current_thread` and released on thread exit (deferred to standard `jni` crate guards). -6. Error / panic surface: Rust panics inside JNI callbacks shall be caught at the FFI boundary (`catch_unwind`) and converted to a logged error plus a returned error code or null; they shall never unwind into the JVM. A panic during bootstrap is treated as a fatal initialisation failure and shall be reported through the existing diagnostics layer. -7. Library name: the canonical library name shall be `chanora_bridge` (resulting `.so` is `libchanora_bridge.so`). Any rename requires an ADR and a coordinated update to this SDD item. - -**SDD-106**: `AndroidPermissionRequester` shall own the Android runtime acquisition of `RECORD_AUDIO` on behalf of the audio subsystem and shall expose the current permission state to the audio engine and to Flutter through the existing `BridgeEvent` stream. Listen-only operation (`capture_active = false` with the output stream open per SAD-081) is a first-class mode, not an error condition, and shall be selected automatically when the permission is not granted. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AndroidPermissionRequester` (Android platform permission adapter) -- Source SAD: SAD-085 -- Verification method: Platform Test (Android), Integration Test, UI Review - -Implementation requirements: - -1. Request timing: the requester shall attempt to acquire `RECORD_AUDIO` at or before the first `voice_join` of the session. The trigger shall fire from the `voice_join` bridge handler before the audio engine opens the input stream, NOT at app launch. Rationale: per Android guidance, runtime permissions should be requested in-context. -2. Denial UX (first-time denial, not "do not ask again"): the audio engine shall clamp `capture_active = false` and `TransmitModeSelector` (per SAD-083 / SDD-095) shall clamp `transmit_active = false`. The output mix path defined in SAD-081 / SDD-094 shall remain open (listen-only). The Voice Bar shall surface a non-blocking affordance "Enable microphone" that re-invokes the requester. -3. Permanent denial path (`shouldShowRequestPermissionRationale` returns false AND permission is denied): the affordance shall switch to "Open settings" and shall launch an `Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)` deep-linked to the Chanora app entry. The requester shall NOT auto-retry beyond Android platform conventions; the user must explicitly re-grant. -4. Mid-session revocation: Android may revoke `RECORD_AUDIO` while the app is running (system kills and restarts the process). On process resume the requester shall re-query `ContextCompat.checkSelfPermission` before resuming capture; on revocation it shall behave identically to first-time denial — clamp `capture_active = false`, keep listen-only, surface the affordance. The active voice session shall not be torn down; only capture is suspended. -5. Bridge event surface: the requester shall publish a `BridgeEvent::PermissionState { permission: "RECORD_AUDIO", state: Granted | Denied | DeniedPermanent | Undetermined }` whenever the resolved state changes. The Flutter UI shall subscribe to this stream alongside `BridgeEvent::VoiceState` (SDD-094) and render the Voice Bar accordingly. -6. Interaction with `TransmitModeSelector` (SAD-083 / SDD-095): the selector shall treat `PermissionState != Granted` as a final clamp identical to hard-mute — `transmit_active = false` regardless of PTT key state, transmit mode, or mute state. When the permission transitions to `Granted`, the selector shall resume normal evaluation on the next state tick; no re-bind of PTT is required. -7. Thread safety: the requester runs on the Android main thread for the request dialog and on the bridge isolate / audio thread for state queries. The cached permission state shall be held in an `AtomicU8` mirroring the four-state enum. -8. Single-flight: concurrent `voice_join` calls (defensive — SRS-189 forbids it but the design must compose) shall coalesce into a single Android permission request; the second caller shall observe the result of the first. -9. Manifest declaration: `` (already required for capture) shall be present; see SDD-107 for the foreground-service permission set. - -**SDD-107**: `AndroidVoiceForegroundService` shall own the Android foreground service lifecycle for active voice sessions. It shall be started by the audio engine on first `voice_join` and stopped on the last `voice_leave` or on engine `shutdown_if_idle` (per SDD-094), shall declare foreground service type `microphone` on API 30+, and shall coordinate with `AndroidAudioModeController` (SDD-108) and `AndroidPermissionRequester` (SDD-106) so capture and SCO routing survive UI backgrounding and process trimming. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AndroidVoiceForegroundService` (Android platform services container) -- Source SAD: SAD-086 -- Verification method: Platform Test (Android), Integration Test, Release Inspection - -Implementation requirements: - -1. Service class: `ChanoraVoiceForegroundService extends android.app.Service`, located in the Android app module under `apps/chanora_flutter/android/app/src/main/kotlin//voice/`. The class shall be `final` and shall not export bindings beyond what is required by the bridge (`onBind` returns null; the service is start-only). -2. Manifest entry: - ```xml - - ``` - The `foregroundServiceType="microphone"` attribute is required by API 30+ (Android 11) and is read by the platform to gate background microphone access. On API 28–29 the attribute is ignored; capture is permitted without it. -3. Required manifest permissions: - - `android.permission.FOREGROUND_SERVICE` (required on API 28+). - - `android.permission.FOREGROUND_SERVICE_MICROPHONE` (required on API 34+ for type=microphone). - - `android.permission.POST_NOTIFICATIONS` (required to display the notification on API 33+; runtime-requested per item 6 below). - - `android.permission.RECORD_AUDIO` (already declared per SDD-106). -4. Notification channel: on first service start the service shall create a notification channel with: - - `id = "chanora.voice.session"` - - `name = "Voice session"` (localised via product strings; not server content) - - `importance = NotificationManager.IMPORTANCE_LOW` (no sound; non-intrusive ongoing indicator) - - description text: "Shown while a Chanora voice session is active." (localised) - The channel is created once via `NotificationManager.createNotificationChannel`; repeated creates are no-ops per Android contract. -5. Ongoing notification: `startForeground(notificationId = 0x4348414E /* "CHAN" */, notification)` shall be called within 5 seconds of `Service.onStartCommand` to satisfy Android's foreground promotion deadline. The notification shall: - - Use the channel from item 4. - - Carry a small icon (`ic_chanora_voice`) and content title "Chanora — Voice session active". - - Carry a content intent that re-opens the host `MainActivity` (`PendingIntent.FLAG_IMMUTABLE` set). - - NOT carry server-provided channel names, user names, or message content (per privacy posture; localised product strings only). - - Be marked `ongoing = true` and `category = CATEGORY_CALL` to encourage the system to keep it visible. -6. `POST_NOTIFICATIONS` (API 33+): the requester pattern in SDD-106 shall be reused. The permission shall be requested when the foreground service is first started in a session; denial shall NOT block the service (the service still runs without a visible notification; Android allows this but UX is degraded). The bridge shall publish a `BridgeEvent::PermissionState { permission: "POST_NOTIFICATIONS", … }` so the UI can prompt the user to grant it. -7. Lifecycle: - - Start: from the `voice_join` handler (after `AndroidPermissionRequester` resolves RECORD_AUDIO state — listen-only IS allowed to start the service so the user can hear audio while backgrounded), call `ContextCompat.startForegroundService(context, intent)`. - - Stop: from the `voice_leave` handler when no voice sessions remain, AND from the engine `shutdown_if_idle()` path (per SDD-094), call `service.stopForeground(STOP_FOREGROUND_REMOVE)` followed by `service.stopSelf()`. The stop shall be idempotent. - - On process death: Android may kill the service. The service shall return `START_NOT_STICKY` from `onStartCommand` so it is not auto-restarted; the next `voice_join` re-starts it explicitly. State is rebuilt from the audio engine, not from the service. - - On user removing the notification: API 34+ allows dismissal of ongoing FGS notifications. Removal shall NOT stop the voice session (only the user explicitly leaving a channel via the UI does that). The service shall re-post the notification on next state tick if still active. -8. Coordination: - - With `AndroidAudioModeController` (SDD-108): the service start happens BEFORE `AudioManager.setMode(MODE_IN_COMMUNICATION)`; the mode controller engages after the service is foreground. On stop, the mode controller restores prior mode BEFORE the service stops. - - With `AndroidPermissionRequester` (SDD-106): the service may start in listen-only mode (RECORD_AUDIO not granted); the foreground-service-type=microphone declaration is still required so that capture can resume immediately when the user grants the permission, without restarting the service. -9. Thread: service lifecycle methods run on the main thread; the service shall not perform audio work itself — the Rust audio engine owns the streams, the service exists purely to keep the process foregrounded. -10. Bridge call path: `voice_join` / `voice_leave` are bridge calls; their Rust handlers shall invoke a Kotlin static method `ChanoraVoiceForegroundService.start(Context)` / `.stop(Context)` via JNI (using the captured `JavaVM` from SDD-105) to avoid coupling the service to a Dart MethodChannel hop. - -**SDD-108**: `AndroidAudioModeController` shall own engagement and release of Android's in-call audio mode for the voice subsystem. It shall snapshot the prior `AudioManager.getMode()` on first engage and restore it on last release, shall be reference-counted across composed sessions (P0 = single session per SRS-189 but design must compose for P1), and shall be the only writer of the Android audio mode within the application. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AndroidAudioModeController` (Android platform audio adapter) -- Source SAD: SAD-084 -- Verification method: Platform Test (Android), Unit Test, Audio Test -- Back-fill: yes (back-fills the v0.9.8 product-decision-register entry for Android in-call audio mode) - -Implementation requirements: - -1. Engagement API (Rust-facing): `AndroidAudioModeController` is a Kotlin singleton with a JNI surface: - - `fn engage() -> Result<(), AudioModeError>`: increments the internal reference count; on the 0 → 1 transition it shall snapshot the current mode (`prior_mode = audioManager.mode`) and call `audioManager.setMode(MODE_IN_COMMUNICATION)`. On counts ≥ 1, it is a no-op success. - - `fn release()`: decrements the reference count; on the 1 → 0 transition it shall call `audioManager.setMode(prior_mode)` and clear `prior_mode`. On counts ≥ 1 after decrement, it is a no-op. On underflow (release without engage) it shall log and clamp at 0 without crashing. - - `fn is_engaged() -> bool`: reads the reference count (debugging / diagnostics only). -2. Reference-count semantics: the count is an `AtomicI32` guarded by a Kotlin `Mutex` for the snapshot/restore critical section. P0 only ever observes counts in `{0, 1}` per SRS-189, but the design must compose for future multi-session use. Any two-engages-one-release sequence shall keep `prior_mode` from the FIRST engage; a release at count 1 restores that original mode. -3. Lifecycle binding: `engage()` shall be called from the audio engine's `ensure_running()` path (per SDD-094) AFTER `AndroidVoiceForegroundService.start` succeeds. `release()` shall be called from `shutdown_if_idle()` BEFORE `AndroidVoiceForegroundService.stop`. The controller is bound to the voice-session lifecycle, NOT to any UI screen lifecycle. -4. JNI surface from Rust audio engine: the Rust audio engine shall hold a `OnceCell` for the Kotlin singleton, populated during `AndroidJniBootstrap` (SDD-105). The Rust-side helpers `android_audio_mode_engage()` / `android_audio_mode_release()` shall acquire `JNIEnv` via `JavaVM::attach_current_thread`, invoke the static methods, and translate any thrown `Exception` into `AudioModeError`. -5. Error paths: - - `AudioManager` unavailable (`context.getSystemService(AUDIO_SERVICE)` returns null — exceedingly rare): `engage()` shall return `AudioModeError::ManagerUnavailable`. The audio engine shall proceed in fallback path (media-mode capture) and shall emit a diagnostic; voice quality may degrade but the session shall not abort. - - `setMode` throws `SecurityException` or `IllegalStateException`: log, return `AudioModeError::SetModeFailed`, leave `prior_mode = null`, do NOT increment the reference count. Subsequent engages may retry. - - Restore failure on `release()`: log; do not retry; do not throw across the JNI boundary. -6. Exclusivity: no other code path in the Android app — Flutter, bridge surface, feature screens — shall call `AudioManager.setMode` directly. A CI lint rule shall flag any direct `setMode` call outside this controller. -7. Thread: all `audioManager.setMode` calls run on the calling JNI thread; Android `AudioManager` is thread-safe for `setMode`. -8. Diagnostics: each engage/release transition shall emit a structured event `{ event: "android.audio_mode.transition", prior: , new: , refcount: }`. No user content; safe under the SAD-077 / SDD-090 sanitiser. - -**SDD-109**: `AndroidAaBuildPipeline` shall define the Android App Bundle (`.aab`) packaging pipeline used for release builds, covering bundletool configuration, ABI splits, signing assertions in CI, and version-code / version-name derivation. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P1 / Beta -- Software unit: `AndroidAaBuildPipeline` (CI scripts + Gradle release configuration) -- Source SAD: SAD-037, SAD-063 -- Verification method: Build Test, Release Inspection - -Implementation requirements: - -1. Output artefact: `bundleRelease` Gradle task produces `app-release.aab` at `apps/chanora_flutter/build/app/outputs/bundle/release/app-release.aab`. This artefact is the only Play Console upload candidate. -2. Bundle config (`bundle { … }` in `build.gradle.kts`): - - `language { enableSplit = true }` — per-language asset delivery. - - `density { enableSplit = true }` — per-density resource delivery. - - `abi { enableSplit = true }` — per-ABI native-lib delivery; combined with the SDD-073 `ndk.abiFilters` set this yields three native splits (`arm64-v8a`, `armeabi-v7a`, `x86_64`). -3. bundletool integration: CI shall invoke `bundletool build-apks --bundle=app-release.aab --mode=universal` once per pipeline to produce a universal APK for smoke testing on a known device; this universal APK is not shipped to users. -4. Signing assertions (CI step `assert-android-release-signing`): - - Fail if `signingConfig.storeFile` is unset or resolves to a debug keystore (matches SDD-073 item 5). - - Fail if `jarsigner -verify -verbose -certs app-release.aab` reports the certificate fingerprint does not match the expected production cert pinned in the CI secret store. - - Fail if `bundletool validate --bundle=app-release.aab` reports any error. -5. Version code derivation: `versionCode` shall be derived from the build number, computed as `(MAJOR * 10_000_000) + (MINOR * 100_000) + (PATCH * 1_000) + BUILD_COUNTER`, where MAJOR/MINOR/PATCH come from the workspace `version` field and BUILD_COUNTER is the CI-monotonic counter. The derivation shall be implemented in a Gradle helper so local builds can reproduce the value given the inputs. `versionCode` is a 32-bit signed int; the scheme yields headroom through MAJOR=99. -6. Version name derivation: `versionName = "${MAJOR}.${MINOR}.${PATCH}"` for release builds; `"${MAJOR}.${MINOR}.${PATCH}-rc${BUILD_COUNTER}"` for release-candidate builds; `"${MAJOR}.${MINOR}.${PATCH}-dev"` for local builds. -7. ABI split verification: release inspection shall extract the AAB manifest and assert exactly the three abiFilters from SDD-073 appear in the `` element, and no other ABI directories are present in `BUNDLE-METADATA/native.pb`. -8. Reproducibility: the release pipeline shall record the toolchain identifiers (AGP version, Kotlin version, NDK version, Flutter version, Rust toolchain) into a `build-manifest.json` attached to the release artefact. - -**SDD-110**: `AndroidPttCapability` shall pin Android P0 to `FocusedPttBackend` only. There shall be no `DesktopPttBackend` ladder on Android, no system-wide global key hook, and no global accessibility-service-based PTT. `PttCapabilityLevel` shall always be `L0Focused` on Android, and the capability badge (per SDD-091) shall render the Android-specific explanation text. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `FocusedPttBackend`, `PttCapabilityLevel`, `PttCapabilityBadge` -- Source SAD: SAD-071 (PTT-backend isolation behind trait + factory-selected implementation + published capability level — the architectural source of the "Android pins to `FocusedPttBackend` / `L0Focused`" decision), SAD-076 (`BridgeEvent::PttCapability { level, backend_id }` — the capability-event surface feeding the Android capability badge per SDD-091) -- Verification method: Platform Test (Android), UI Review - -Implementation requirements: - -1. Backend selection: on Android, `PttController` (per SDD-088) shall instantiate `FocusedPttBackend` only. The Windows / macOS / Linux backends (SDD-083 through SDD-086) shall not be compiled into the Android target; build configuration shall gate them behind `#[cfg(not(target_os = "android"))]`. -2. Capability report: `current_capability()` shall return `PttCapabilityLevel::L0Focused` unconditionally on Android. `backend_id` shall return `"focused"`. -3. UI rendering: `PttCapabilityBadge` (SDD-091) on Android shall display the short label "PTT (in-app)" and, when the user taps the info icon, shall present an explanation sheet with the localised text: "Push-to-talk on Android works while Chanora is in the foreground. To keep transmitting while another app is on screen, use the on-screen PTT button in the notification or switch to Continuous mode." (Product strings; not server content.) -4. On-screen PTT control: the Voice Bar shall expose a touchscreen PTT button when transmit mode is `Ptt`, sized for thumb reach. The button shall drive the `AudioTransmitGate` (per SDD-089) via the bridge `set_ptt(true|false)` call. Release-tail (SDD-096) applies identically. -5. No accessibility-service request: Chanora shall NOT declare or request `BIND_ACCESSIBILITY_SERVICE` on Android. Any future P1+ proposal to enable global PTT via the accessibility framework shall require an ADR and explicit user-consent UX, and shall NOT default-on. -6. No global media-button capture for PTT: media-button intents (`MediaSessionCompat`) are reserved for transport controls; they shall not be repurposed as a PTT input on Android in P0. -7. Capability badge cross-platform consistency: the badge widget itself is shared per SDD-091; only the per-platform explanation text differs. Android explanation text is owned by `LocalizationService` (SDD-031) under the key `ptt.capability.android.l0`. - -### Android Voice Audio Backend Detailed Design (SDD-111 through SDD-116) - -**SDD-111**: `AndroidVoiceAudioBackend` shall be the Android-side implementation of a new platform-abstracted voice-audio capture+playback element. The cross-platform abstraction shall be expressed as a Rust trait — provisionally `MobileVoiceAudioBackend` — that owns the full lifetime of a paired input/output low-latency voice stream pair (open, start, stop, close, error/disconnect signalling). The Android implementation shall live in a new module within `crates/chanora_audio` (module name `android_voice_unit`; the exact filename is an implementation detail), and shall be selected by `#[cfg(target_os = "android")]` from the audio engine. The iOS module `ios_voice_unit` (per SDD-104) shall be the trait's iOS implementation; back-filling the existing `ios_voice_unit.rs` to conform to `MobileVoiceAudioBackend` is out of scope of this SDD and is deferred to a separate follow-up unit (SDD-117 candidate). Desktop platforms (Windows / macOS / Linux) do not implement `MobileVoiceAudioBackend`; `cpal` continues to own capture and playback on desktop per the existing audio engine design. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `MobileVoiceAudioBackend` (trait, in `chanora_audio`), `android_voice_unit` (module, in `chanora_audio`), `AudioEngine` (existing; selects backend by `cfg`) -- Source SAD: SAD-077 (PTT/voice audio component), SAD-081 (audio engine lifecycle) -- Verification method: Unit Test (Rust), Platform Test (Android), Build Verification (cross-platform `cargo build` for android / ios / desktop targets) - -Implementation requirements: - -1. Trait surface (Rust): `MobileVoiceAudioBackend` shall expose, at minimum: `open(config: MobileVoiceStreamConfig) -> Result` (where `MobileVoiceStreamConfig` is the structure defined by SDD-112), `start(&mut self) -> Result<(), BackendError>`, `stop(&mut self) -> Result<(), BackendError>`, `close(self) -> Result<(), BackendError>`, `session_id(&self) -> Option` (for SDD-113 hardware-effect binding), `achieved_performance_mode(&self) -> AchievedPerformanceMode`, `achieved_sharing_mode(&self) -> AchievedSharingMode`, and an error/disconnect callback surfaced through a bounded channel or watch handle that the audio engine polls. The trait shall be object-safe-or-not at implementation discretion; the engine shall instantiate it as a concrete generic, not via `dyn`. -2. Android crate selection (primary): the Android implementation shall be built on `oboe-rs` (version pin: `0.6.x` family; `0.6.1` is the working pin at SDD authoring time). Rationale: `oboe-rs` is a thin Rust wrapper around Google's Oboe C++ library, which is the platform-recommended path for low-latency voice audio on Android (selects AAudio on API 27+ and falls back to OpenSL ES below that, though Chanora's `minSdk = 28` per SDD-073 means the OpenSL ES path is not in scope). -3. Android crate fallback (contingency, NOT to be selected unless required): if `oboe-sys`'s C++ stdlib pull (`libc++_shared.so`) conflicts with the existing `cargo-ndk` + `flutter_rust_bridge` build chain in ways that cannot be resolved by standard `libc++_shared` packaging, the contingency shall be a direct `ndk::audio` (AAudio) binding. The contingency shall NOT be exercised based on developer preference; it shall be exercised only on a documented build-system failure reported by codex-builder. The trait `MobileVoiceAudioBackend` is unchanged by this contingency — only the implementation behind it differs. -4. Engine selection: `AudioEngine` shall, on Android, instantiate `android_voice_unit::AndroidVoiceUnit` (the `MobileVoiceAudioBackend` impl) in place of the existing `cpal` capture+playback pair. The `cpal` code paths shall remain compiled in for desktop targets but shall not be reachable on Android. -5. Mobile-vs-desktop selection sites: the audio engine shall have exactly one `cfg` decision site (a typed alias such as `type PlatformVoice = `). The engine's session lifecycle code (per SAD-081) shall be written against the trait, not against any concrete backend. -6. Error surface: `BackendError` shall be a `chanora_audio`-local error enum carrying at least: `OpenFailed { reason: String }`, `StartFailed { reason: String }`, `ErrorDisconnected`, `InvalidConfig { reason: String }`. The engine shall map `ErrorDisconnected` to its existing retry/reopen path per SDD-094 `ensure_running`; the backend itself shall NOT loop on retries (single-responsibility: the engine owns retries). -7. Tracing / diagnostics: each lifecycle transition (`open`, `start`, `stop`, `close`, `ErrorDisconnected`) shall emit a `tracing` event under the `chanora_audio` target with the achieved performance mode, achieved sharing mode, and (where available) `session_id`. These fields feed SRS-210 verification analysis. - -Notes: - -- SAD anchor caveat: SAD-077 (the PTT/voice audio component) and SAD-081 (the audio engine lifecycle) are the closest existing SAD anchors. There is no dedicated SAD item that names a platform-abstracted "mobile voice audio backend" element by itself; this SDD is sourced from those two anchors. A SAD revision that adds a dedicated allocation item for the mobile-voice-audio-backend trait should be considered as a follow-up so that `Source SAD` for SDD-111 can be tightened beyond the SAD-077 / SAD-081 pairing. - -**SDD-112**: `AndroidVoiceStreamConfig` shall be the immutable, validated configuration passed by the audio engine into `android_voice_unit::AndroidVoiceUnit::open()` (per SDD-111). It shall encode the AAudio / Oboe stream-construction parameters that SRS-210, SRS-211, SRS-213, and SRS-214 obligate the client to request, and shall expose the corresponding "achieved" values after the stream is opened so that the engine and diagnostics can record what the platform actually granted. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `MobileVoiceStreamConfig` (struct), `AchievedPerformanceMode` (enum), `AchievedSharingMode` (enum), `AchievedInputPreset` (enum), `AndroidVoiceUnit::open` (consumer) -- Source SAD: SAD-077, SAD-081 -- Verification method: Unit Test (Rust, config-validation paths), Platform Test (Android, achieved-value recording) - -Implementation requirements: - -1. Sample rate: the configuration shall pin the requested sample rate to `48_000` Hz, matching the existing `chanora_audio` `SAMPLE_RATE` engine constant. The Android implementation shall request 48 kHz on both input and output streams; if the platform refuses 48 kHz and offers a different native rate, the implementation shall accept the native rate and the backend shall surface it via `achieved_sample_rate()`. Resampling, if required, shall be performed by the existing cross-platform audio engine path, not inside the backend. -2. Channel layout: both input and output streams shall be opened as mono (1 channel), consistent with the existing Opus 20 ms framing in the cross-platform engine. Stereo is out of scope for P0 voice. -3. Frame size / burst: the implementation shall NOT hard-code a frame size. After stream open, the implementation shall query the stream's `framesPerBurst` (Oboe `AudioStream::getFramesPerBurst()` / AAudio `AAudioStream_getFramesPerBurst`) and shall set the audio callback's processing block size to a multiple of that burst that also satisfies the engine's 20 ms framing (the engine's existing Opus-frame buffering shall absorb the mismatch). -4. Performance mode: the requested performance mode shall be `LowLatency` (`AAUDIO_PERFORMANCE_MODE_LOW_LATENCY`) on both input and output. After open, the implementation shall record `getPerformanceMode()` and expose it as `AchievedPerformanceMode::{LowLatency, None, PowerSaving}`. Per SRS-210, the achieved mode determines which mouth-to-ear latency bound (≤150 ms vs ≤250 ms) applies; the backend itself does not enforce the bound but exposes the data SRS-210 verification requires. -5. Output usage / content type (SRS-213): the output stream shall be opened with usage = `VoiceCommunication` (`AAUDIO_USAGE_VOICE_COMMUNICATION`) and content type = `Speech` (`AAUDIO_CONTENT_TYPE_SPEECH`). These shall NOT be configurable from the engine for P0; they are fixed by SRS-213. -6. Input preset (SRS-211): the input stream shall be opened with input preset = `VoiceCommunication` (`AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION`). If the open call fails specifically due to preset rejection, the implementation shall retry once with `VoicePerformance` (`AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE`). If that also fails for preset reasons, the implementation shall retry with `Generic` (`AAUDIO_INPUT_PRESET_GENERIC`) and log a `warn`-level diagnostic. The achieved preset shall be recorded via `AchievedInputPreset` and exposed to diagnostics. Failures unrelated to preset (e.g., device busy) shall bubble up as `BackendError::OpenFailed` without preset retries. -7. Sharing mode (SRS-214): both input and output streams shall request `Exclusive` (`AAUDIO_SHARING_MODE_EXCLUSIVE`) on a best-effort basis. If the platform returns `Shared` (or refuses Exclusive open with a sharing-mode-specific error), the implementation shall retry once with `Shared` and record the achieved sharing mode via `AchievedSharingMode::{Exclusive, Shared}`. The fall-back to Shared shall NOT be reported to the user as a failure (per SRS-214) and shall not prevent voice session establishment. -8. Error / disconnect callback: the implementation shall register an Oboe `AudioStreamErrorCallback` (or AAudio `AAudioStream_setErrorCallback` equivalent on the contingency path). On `ErrorDisconnected` (e.g., headset unplugged, USB audio interface removed, route invalidated), the callback shall NOT attempt to reopen the stream from inside the callback (Oboe documents this as forbidden). It shall instead enqueue a `BackendError::ErrorDisconnected` onto the engine-visible channel; the audio engine's state machine (per SDD-094 / SAD-081) shall own the reopen retry. -9. Validation: `MobileVoiceStreamConfig::new(...)` shall return `Err(BackendError::InvalidConfig { reason })` for: sample rate outside `{8_000, 16_000, 24_000, 32_000, 44_100, 48_000}`, channel count not equal to 1, or any field deliberately outside the documented enums above. The default constructor used by the audio engine shall always produce a valid config; the validator exists for defence-in-depth and for unit testing. -10. Diagnostics record: after a successful pair of opens, the backend shall emit a single `tracing` event with all achieved values (sample rate, frames-per-burst, performance mode, sharing mode, input preset) so that SRS-210 / SRS-211 / SRS-213 / SRS-214 verification can be performed from logs. - -**SDD-113**: `AndroidHardwareAudioEffects` shall be the element responsible for engaging the Android platform hardware voice-audio effects — `AcousticEchoCanceler`, `NoiseSuppressor`, `AutomaticGainControl` — on the active microphone capture session, and for triggering the cross-platform software fallback when one or more effects are unavailable on the device. It shall close the prior silent no-op gap explicitly called out in SRS-212. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AndroidHardwareAudioEffects` (Rust+JNI shim), Java/Kotlin `android.media.audiofx.AcousticEchoCanceler` / `NoiseSuppressor` / `AutomaticGainControl` consumers, `AudioEngine` (consumer) -- Source SAD: SAD-077, SAD-084 (composes with `AndroidAudioModeController` per SDD-108) -- Verification method: Platform Test (Android, device-matrix from SDD-116), Unit Test (Rust, fallback-path branch coverage) - -Implementation requirements: - -1. Session id acquisition: after `android_voice_unit::AndroidVoiceUnit::open()` (per SDD-111) opens the input stream, the implementation shall call `oboe::AudioStream::getSessionId()` (or the AAudio equivalent `AAudioStream_getSessionId` on the contingency path) to obtain the platform audio session id of the input stream. The input stream MUST be opened with a session id that allows effect attachment (Oboe `setSessionId(SessionId::Allocate)` or AAudio `AAUDIO_SESSION_ID_ALLOCATE`); SDD-112 item 6 is amended by this SDD to also require session-id allocation on the input stream. -2. Effect attachment: with a valid session id, the implementation shall, via JNI (using the captured `JavaVM` from SDD-105), construct each of the three Java effect classes — `AcousticEchoCanceler`, `NoiseSuppressor`, `AutomaticGainControl` — using the static `create(int audioSession)` factory, and shall call `setEnabled(true)` on each successfully constructed effect. The Java `GlobalRef`s shall be retained for the lifetime of the input stream and shall be released via `release()` on stream close. -3. Availability probing: before construction, the implementation shall call the static `isAvailable()` method on each effect class. Effects reported as unavailable shall NOT be constructed; the implementation shall proceed to fallback handling for that specific effect. -4. Construction-failure handling: if `isAvailable()` returns true but `create()` throws or returns null, the implementation shall log a `warn`-level diagnostic that includes the effect name and the exception class (sanitised — no PII), and shall fall back for that effect. -5. Software fallback: where one or more hardware effects are unavailable or fail to construct, the implementation shall signal the cross-platform engine to engage the existing software AEC / NS / AGC path that the engine already exposes via `AudioEngineConfig.effects.aec` / `.noise_suppression`. The engine's Android `#[cfg]` branch at `crates/chanora_audio/src/engine.rs:316-323` shall no longer emit the prior "engagement depends on device AEC/NS support under MODE_IN_COMMUNICATION" log line as a no-op rationale; the rationale is superseded by this SDD, and the branch shall actually engage either hardware (via this SDD) or software (via the existing engine path). The codex-builder shall remove the no-op rationale comment as part of SDD-111..SDD-115 implementation. -6. Composition with SDD-108: hardware-effect engagement requires `AudioManager.setMode(MODE_IN_COMMUNICATION)` to be active for the platform voice-effect routing to engage correctly. The lifecycle order (per SDD-115) shall therefore be: SDD-108 mode engage → SDD-111 stream open → SDD-113 effect attach → start. Effect attach on a stream opened before `MODE_IN_COMMUNICATION` is engaged is not specified by Android and shall be treated as undefined behaviour to be avoided by sequencing, not by retry. See SDD-115 step ordering 4–6 for the canonical implementation sequence (mode engage → streams open → effect attach); this SDD unit (SDD-113 item 6) and SDD-115 are the joint authority on the ordering, and any future amendment to the ordering shall update both units in the same revision. -7. Diagnostics: the implementation shall emit a `tracing` event with three boolean fields — `aec_engaged_hardware`, `ns_engaged_hardware`, `agc_engaged_hardware` — and three corresponding `*_engaged_software` booleans for the fallback path. SRS-212 verification reads these fields from sanitised logs / diagnostics. -8. Failure isolation: failure to engage any single effect shall NOT fail the voice session. Effect engagement is best-effort with software fallback; the only fatal failure path is stream open itself. - -**SDD-114**: `AndroidVoiceManifestRequirements` shall enumerate, at the SDD layer, the Android manifest declarations required for the voice audio backend (SDD-111..SDD-113) and the foreground-service hosting (SDD-107). This unit is a back-fill of declarations already landed by Wave 2B-1; it records the design contract so that future manifest edits do not silently regress the voice subsystem. - -- Status: Draft (back-fill — implementation precedes documentation; see notes) -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `apps/chanora_flutter/android/app/src/main/AndroidManifest.xml` -- Source SAD: SAD-085 (permission adapter), SAD-086 (foreground service) -- Verification method: Manifest Inspection (CI), Platform Test (Android) - -Implementation requirements: - -1. Required `` declarations (canonical set for voice audio + foreground service): - - `android.permission.INTERNET` — required by the network stack (already declared at the workspace baseline). - - `android.permission.RECORD_AUDIO` — required for microphone capture (per SDD-106). - - `android.permission.FOREGROUND_SERVICE` — required to start any foreground service. - - `android.permission.FOREGROUND_SERVICE_MICROPHONE` — required by API 34+ for `foregroundServiceType="microphone"` (per SDD-107). - - `android.permission.POST_NOTIFICATIONS` — required for the ongoing foreground-service notification on API 33+; this permission is declared in the manifest and is requested at runtime per SDD-106's runtime-request pattern (SDD-107 item 6). - - `android.permission.MODIFY_AUDIO_SETTINGS` — required for `AudioManager.setMode(MODE_IN_COMMUNICATION)` per SDD-108. - - `android.permission.BLUETOOTH_CONNECT` — required on API 31+ for Bluetooth SCO routing; declared with `android:usesPermissionFlags="neverForLocation"` if required by future Play Store policy review. -2. Required `` declaration: the Android manifest shall declare exactly one `` element for the voice foreground service, with attributes: - - `android:name="app.chanora.chanora_flutter.AndroidVoiceForegroundService"` - - `android:exported="false"` - - `android:foregroundServiceType="microphone"` - The fully-qualified class name shall match the Kotlin class introduced by SDD-107; if the application package id changes, the manifest entry and the SDD-107 JNI call site shall be updated together. -3. SDK-gated declarations: SDK-version-conditional declarations (`` / `tools:targetApi`) are NOT required for the canonical set in item 1 under the SDD-073 `minSdk = 28` baseline. The set above is the minimum set required across the SDD-073 SDK range and shall be present unconditionally. -4. CI manifest assertion: a CI manifest-inspection step shall fail the build if any of the permissions or the `` entry in item 1 / item 2 is missing, or if `foregroundServiceType` on the `AndroidVoiceForegroundService` entry is anything other than `microphone` (or a strict superset thereof, e.g., `microphone|connectedDevice` if a future feature legitimately requires it; the CI rule shall use a contains-check, not equality). -5. No additional permissions: the manifest shall NOT declare `BIND_ACCESSIBILITY_SERVICE`, `SYSTEM_ALERT_WINDOW`, or any media-button-related capture permissions for the voice subsystem (consistent with SDD-110 item 5 / item 6). - -Notes: - -- Documentation-after-code situation: the manifest entries described in items 1 and 2 were implemented in Wave 2B-1 (the Android voice foreground service landing wave) before this SDD unit was authored. This SDD unit back-fills the design contract; no new manifest work is created by this unit. Future regressions against item 1 / item 2 shall be treated as SDD-114 violations and shall be caught by the CI assertion in item 4. - -**SDD-115**: `AndroidVoiceLifecycleSequencing` shall fix the sequencing of voice-session lifecycle operations across the elements introduced in SDD-107 (foreground service), SDD-108 (audio mode controller), SDD-111 (voice audio backend), and SDD-113 (hardware audio effects). It shall also specify the responses to Android-level audio events that can interrupt or reshape an active voice session. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `AudioEngine` (lifecycle orchestrator), `AndroidVoiceForegroundService` (SDD-107), `AndroidAudioModeController` (SDD-108), `AndroidVoiceUnit` (SDD-111), `AndroidHardwareAudioEffects` (SDD-113), Java `AudioManager.OnAudioFocusChangeListener` -- Source SAD: SAD-081 (engine lifecycle), SAD-084 (mode controller), SAD-086 (foreground service) -- Verification method: Integration Test (Rust + Android), Platform Test (Android, device-matrix from SDD-116) - -Implementation requirements: - -1. Voice-join sequencing (forward order, on first `voice_join`): - 1. Dart calls the bridge `voice_join(channel_id)` per SDD-094. - 2. The Rust bridge handler invokes the JNI helper for SDD-107 to start `AndroidVoiceForegroundService` (Kotlin static method invocation via the captured `JavaVM`). - 3. `Service.onStartCommand` calls `startForeground(notificationId, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE)` within Android's 5-second deadline (SDD-107). - 4. Rust calls SDD-108 to engage `AudioManager.setMode(MODE_IN_COMMUNICATION)` (snapshot prior mode, write new mode). **Mode engagement precedes stream open** so that AAudio's stream construction observes the in-call audio mode and routes to the voice-communication path from the outset. - 5. Rust opens the AAudio input and output streams via SDD-111 (`AndroidVoiceUnit::open(MobileVoiceStreamConfig)`), with the input stream opened with `SessionId::Allocate` (SDD-113 item 1 amends SDD-112). - 6. Rust binds SDD-113 hardware effects against the input stream's session id (with software-AEC fallback on per-effect failure). - 7. Rust calls `AndroidVoiceUnit::start()` on both streams. Active voice session. - - Mode-first ordering note: the AudioManager mode is engaged BEFORE AAudio streams open so that AAudio's stream configuration sees the in-call audio mode at construction time, per SDD-113 item 6. Earlier drafts of this step list had stream open before mode engage (the order was swapped in SDD v0.9.14 — see change history); that ordering was unsafe because some devices route streams to the wrong destination if the mode is set after stream construction, and AEC/NS/AGC effect attachment on a stream constructed under the prior (non-voice) mode is not specified by Android. -2. Voice-leave sequencing (reverse order, on last `voice_leave` or `shutdown_if_idle`): - 1. Rust calls `AndroidVoiceUnit::stop()` on both streams. - 2. Rust releases SDD-113 hardware effects (`release()` on each `GlobalRef`). - 3. Rust calls `AndroidVoiceUnit::close()` on both streams. - 4. Rust calls SDD-108 to restore the prior audio mode. **Mode restore follows stream close** (mirror of the forward order's mode-first rule): the streams are torn down under `MODE_IN_COMMUNICATION` before the mode is reverted, so no live stream observes a mid-flight mode change. - 5. Rust invokes the JNI helper for SDD-107 to call `Service.stopForeground` and `Service.stopSelf`. - The reverse order is mandatory; releasing effects after mode restore, or closing streams after mode restore, is undefined and shall be avoided. -3. Justification for sequencing: step 4 (mode engage) before step 5 (stream open) before step 6 (effect attach) is required because Android platform voice-effect routing only engages correctly under `MODE_IN_COMMUNICATION` (SDD-113 item 6), and AAudio stream construction binds routing decisions based on the audio mode observed at open time. Steps 2/3 (service start before stream open) is required to ensure the foreground-service-type=microphone hosting is in place before any background-eligible capture occurs (SRS-215). -4. Route-change callback handling: the Oboe `AudioStreamDataCallback` does not surface route changes directly; the implementation shall additionally observe `android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY` (BroadcastReceiver) and, where available on API 30+, `AudioDeviceCallback` for device add/remove. On route change, the implementation shall: - - Log the new route at `info` level (sanitised — device type only, no serial numbers). - - Re-evaluate exclusive-vs-shared mode on the next reopen (no in-place sharing-mode change; an actual change requires close + open). - - Not tear down the session for transient routes (e.g., USB headset hot-plug during call) — the engine's `ErrorDisconnected` retry path (SDD-094) handles stream invalidation if it occurs. -5. Audio focus loss handling: the implementation shall request audio focus via `AudioManager.requestAudioFocus(AudioFocusRequest.Builder(USAGE_VOICE_COMMUNICATION).setAcceptsDelayedFocusGain(false).build())` at voice-join (step 4, alongside the SDD-108 mode engage) and shall register an `OnAudioFocusChangeListener`. Listener responses: - - `AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK`: continue capture and playback at full gain (voice call is privileged content; ducking on the voice stream is not appropriate). No state change. - - `AUDIOFOCUS_LOSS_TRANSIENT`: pause capture (set `transmit_active = false` via the existing `TransmitModeSelector` clamp) and pause playback. On subsequent `AUDIOFOCUS_GAIN`, resume both. - - `AUDIOFOCUS_LOSS` (permanent): tear down the voice session — `AndroidVoiceUnit::stop()` and `close()`, release effects, restore mode, stop service. Emit `BridgeEvent::VoiceState { in_channel: false, ... }` so the Flutter UI surfaces "left channel — interrupted by another app." Manual rejoin is required (no auto-rejoin). -6. Bluetooth SCO connection-state-change handling (P0 stance): the implementation shall register a `BluetoothHeadset` connection-state-change `BroadcastReceiver` and shall NOT crash on connect/disconnect events. P0 acceptance is "no crash on connection-state-change during an active voice session." Full SCO route correctness — i.e., guaranteeing that capture and playback routes follow the headset across connect/disconnect during a session — is explicitly deferred to P1 and shall be tracked as a follow-up. The platform `MODE_IN_COMMUNICATION` engagement (SDD-108) typically yields correct SCO routing on most devices; P0 relies on that platform behaviour. -7. Concurrency assumption: all lifecycle transitions in items 1 and 2 are serialised on the audio engine's single lifecycle task (per SDD-094). The JNI helpers for SDD-107 and SDD-108 attach to the current thread on demand (per SDD-108 item 4). The Oboe callbacks (data callback, error callback) run on Oboe's audio thread; they shall NOT call back into the engine lifecycle directly — they shall enqueue events onto a bounded channel that the engine lifecycle task drains. - -**SDD-116**: `AndroidVoiceVerificationMatrix` shall specify the minimum Android device matrix that the SDD-111..SDD-115 implementation must be exercised against before the implementation can be declared verified for the purposes of closing risk RISK-AUDIO-MOBILE-001 and the audio-quality gate G-A5. It shall enumerate the per-device observations that must be recorded so that SRS-210 (latency tier), SRS-211 (input preset), SRS-212 (hardware effects), SRS-213 (output usage), SRS-214 (sharing mode), and SRS-215 (foreground service longevity) verification cases can be evaluated from collected evidence. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: Verification artefact contract for SWE.4 / SWE.5 / SWE.6 Android voice cases -- Source SAD: SAD-077, SAD-081, SAD-084, SAD-085, SAD-086 -- Verification method: Aggregation — this SDD is itself a contract for verification engineers; the per-case verification is owned by SWE4-UV / SWE5-IV / SWE6-SV ranges cross-linked below. - -Implementation requirements: - -1. Minimum API-level matrix: implementation evidence shall be collected on at least one device at each of the following Android API levels: - - API 28 (Android 9) — the SDD-073 / DEC-004 minimum baseline. Validates that AAudio low-latency mode and `foregroundServiceType="microphone"` (which becomes mandatory only on API 30+) behave correctly when only the older permission-and-service model is enforced. - - API 31 (Android 12) — Bluetooth permission changes (`BLUETOOTH_CONNECT` runtime permission); validates SDD-114 item 1 Bluetooth-permission declaration. - - API 34 (Android 14) — `FOREGROUND_SERVICE_MICROPHONE` permission and `foregroundServiceType="microphone"` enforcement; validates SDD-107 and SDD-114 together. -2. Minimum vendor diversity: the matrix shall include at least one Google Pixel device AND at least one non-Pixel device, with Samsung Galaxy preferred for the non-Pixel slot. Rationale: Samsung's pre-One UI 5 AAudio HAL has historical quirks (specifically, performance-mode downgrades and shared-mode coercions that Pixel devices do not exhibit) that have caused SRS-210-class regressions in comparable Android voice apps. -3. Per-device observations recorded (each device, per voice-session run): - - `getPerformanceMode()` return value for the input stream and the output stream (SDD-112 item 4 / SRS-210). - - `getSharingMode()` return value for the input stream and the output stream (SDD-112 item 7 / SRS-214). - - `getInputPreset()` (or the closest equivalent observable) and the preset attempt sequence (SDD-112 item 6 / SRS-211). - - `AcousticEchoCanceler.isAvailable()`, `NoiseSuppressor.isAvailable()`, `AutomaticGainControl.isAvailable()` return values, and whether each effect's `create()` succeeded and `setEnabled(true)` did not throw (SDD-113 / SRS-212). - - Measured glass-to-glass (mouth-to-ear) latency in milliseconds, using a procedure to be documented by verification-engineer (procedure is out of scope of this SDD; SDD-116 only contracts that the measurement is recorded). SRS-210 is satisfied if the measurement is ≤150 ms on devices where `getPerformanceMode()` returned `LowLatency`, or ≤250 ms otherwise. - - Foreground-service longevity: the voice session shall run continuously for ≥10 minutes with the device screen off and shall not be terminated by Android background-execution restrictions during that window (SRS-215, SWE6-SV-018 precedent). -4. Evidence handling: per-device observations shall be captured by the existing sanitised audio-diagnostics path (per SDD-095 conventions) plus a verification-engineer-owned latency-measurement attachment. Device serial numbers and Bluetooth peer MAC addresses are NOT permitted in the evidence per SDD-077 / PII conventions. -5. Closure rule for gate G-A5 / RISK-AUDIO-MOBILE-001: the gate may be closed when, for every device in the matrix (items 1 and 2), every observation in item 3 is recorded AND every SRS bound (SRS-210..SRS-215) is met on that device. A single device failing the SRS-210 latency bound shall block gate closure for the gate's affected platform tier; a device failing only the SRS-214 sharing-mode bound (i.e., achieving Shared rather than Exclusive) shall NOT block closure (graceful fallback is explicitly permitted by SRS-214). -6. Verification ID cross-link: this SDD is the design-layer counterpart to the following verification ranges (cross-link only; verification IDs are owned by the verification documents): - - SWE.4 unit verification: SWE4-UV-040..046 (Android audio backend unit cases). - - SWE.5 integration verification: SWE5-IV-016..020 (Android audio engine + foreground service integration cases). - - SWE.6 software qualification: SWE6-SV-018..024 (Android voice session longevity, latency, effect engagement, sharing-mode fallback). - - SYS.4 system integration: cross-link to SYS4-SIV cases for Android voice end-to-end where applicable. - -### Chanora Bridge Build Automation Detailed Design (SDD-118, SDD-119) - -ID allocation note: SDD-117 is reserved (per the SDD-111 trait-back-fill note) for a future `ios_voice_unit` adapter onto `MobileVoiceAudioBackend` and is intentionally left unauthored at this revision. The next two free IDs are therefore SDD-118 and SDD-119; this revision allocates both for the `chanora_bridge` Rust cdylib build-automation pair. - -**SDD-118**: `AndroidBridgeBuildAutomation` shall specify how the `chanora_bridge` Rust cdylib is produced and staged for the Android build automatically, without manual `cargo-ndk` invocations and without environment mutation. This unit complements SDD-073 (Android build config), SDD-109 (AAB packaging pipeline), and SDD-105 (JNI bootstrap — the same `libchanora_bridge.so` is the one that `System.loadLibrary` resolves at process start). The Android pattern intentionally diverges from the always-`--release` iOS / macOS automation pattern (SDD-119) on the iteration-time profile axis only; the release-build safety property (release Android build always uses release Rust) is preserved. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: Gradle task set in `apps/chanora_flutter/android/app/build.gradle.kts` driving `cargo-ndk` against `crates/chanora_bridge`, and the resulting per-ABI `.so` staging under `apps/chanora_flutter/android/app/src/main/jniLibs/` -- Source SAD: SAD-063 (Android runtime / build-configuration isolation) -- Cross-trace SDD: SDD-073 (Android build config — minSdk, ABI filters), SDD-105 (JNI bootstrap — consumer of the produced `.so`), SDD-109 (AAB pipeline — downstream packaging consumer of the staged jniLibs) -- Verification method: Build-system Test (Gradle task wiring, up-to-date semantics), Platform Test (Android — verify per-ABI `.so` present in produced AAB / APK and loadable per SDD-105), Unit Test (preflight failure-mode messages) - -Implementation requirements: - -1. Gradle task registration: a Gradle task or task set shall be registered in `apps/chanora_flutter/android/app/build.gradle.kts` that invokes `cargo-ndk` (a single invocation; see item 13) to build the `chanora_bridge` cdylib for the configured ABI set. The task shall be a Kotlin DSL registration on the Android app module, not a standalone plugin and not an external script. -2. Minimum API source of truth: the API level passed to `cargo ndk --platform $minSdk` shall be sourced from the `chanora.android.minSdk` Gradle property mandated by SDD-073 item 1, defaulting to `28` per DEC-004, overridable via `-Pchanora.android.minSdk=…` on the command line or via `gradle.properties`. The task shall NOT hard-code a numeric API level and shall NOT introduce a second source of truth. -3. ABI set: the ABI set shall be `arm64-v8a`, `armeabi-v7a`, `x86_64`. The list shall be derived at task-configuration time from the existing `android.defaultConfig.ndk.abiFilters` declaration owned by SDD-073 item 4 so that the build-automation list and the AGP packaging list are guaranteed in sync. No `x86` (32-bit) ABI shall be built — Android x86 32-bit is explicitly out of scope per the stakeholder decision recorded by this SDD. "Universal" on Android means an APK/AAB containing all three per-ABI `.so` files; Android does NOT lipo (this is the fundamental mechanism divergence from SDD-119 macOS). -4. Profile mapping (divergence from SDD-119): the cargo profile shall be selected from the active Gradle build variant — Gradle `debug` variant invokes `cargo build` (no `--release`), Gradle `release` variant invokes `cargo build --release`. This diverges from the SDD-119 iOS / macOS always-`--release` pattern. Rationale: Android developer-iteration UX (a clean debug build of `chanora_bridge` in release profile adds a multi-minute wall-clock cost per iteration that iOS / macOS users do not pay because Xcode's debug build is similarly already release-bridged). Safety property preserved: a Gradle `release` build is observably guaranteed to ship a `--release` Rust cdylib (item 10 release-inspection assertion enforces this). -5. Environment variables on the `cargo-ndk` invocation: the task shall set, on the child-process environment only (no parent-shell mutation), `LIBOPUS_STATIC=1`, `LIBOPUS_NO_PKG=1`, and `CMAKE_POLICY_VERSION_MINIMUM=3.5`. Rationale: the Android NDK sysroot ships no libopus, so the `audiopus_sys` crate must build libopus from source statically (mirrors SDD-119 macOS env). `ANDROID_NDK_HOME` shall be propagated from the Flutter / AGP-resolved NDK location (`flutter.ndkVersion` / `android.ndkVersion` resolution) if and only if not already present in the process environment; the task shall NOT override an externally provided `ANDROID_NDK_HOME`. -6. Output staging (per-ABI plain copy, no symlinks, no fat binary): after a successful `cargo-ndk` build, each per-ABI artefact shall be copied to its Android-ABI-named jniLibs directory using the following Rust-triple ↔ Android-ABI mapping: - - `target/aarch64-linux-android//libchanora_bridge.so` → `apps/chanora_flutter/android/app/src/main/jniLibs/arm64-v8a/libchanora_bridge.so` - - `target/armv7-linux-androideabi//libchanora_bridge.so` → `apps/chanora_flutter/android/app/src/main/jniLibs/armeabi-v7a/libchanora_bridge.so` - - `target/x86_64-linux-android//libchanora_bridge.so` → `apps/chanora_flutter/android/app/src/main/jniLibs/x86_64/libchanora_bridge.so` - where `` is `debug` or `release` per item 4. Each `.so` is independent; there is no fat-binary equivalent. The copy shall overwrite any prior staged `.so` at the destination. - - Item 6 (extended): in addition to staging `libchanora_bridge.so`, the build automation shall co-stage `libc++_shared.so` from the active NDK sysroot into the same per-ABI `jniLibs//` directory. The source path pattern shall be `$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib//libc++_shared.so`, with the following sysroot-triple ↔ Android-ABI mapping (note this mapping differs from the cargo Rust-triple mapping in item 6 — specifically, `armeabi-v7a` maps to `arm-linux-androideabi` for the NDK sysroot path, NOT `armv7-linux-androideabi`): - - `arm64-v8a` → sysroot triple `aarch64-linux-android` - - `armeabi-v7a` → sysroot triple `arm-linux-androideabi` (NOT `armv7-linux-androideabi`) - - `x86_64` → sysroot triple `x86_64-linux-android` - - Rationale: SDD-105's `System.loadLibrary("c++_shared")` preload (performed by `ChanoraApplication.onCreate()` before `System.loadLibrary("chanora_bridge")`) combined with the `crates/chanora_bridge/build.rs` directive `cargo:rustc-link-lib=dylib=c++_shared` together ensure that `DT_NEEDED libc++_shared.so` is baked into `libchanora_bridge.so`; the runtime `.so` must therefore be co-staged into `jniLibs//` so Android's per-library namespace linker (API 24+) can resolve `__cxa_pure_virtual` and other C++ runtime symbols at load time. Without co-staging, `System.loadLibrary("chanora_bridge")` fails with an unresolved-symbol error on devices where the system libc++ is not visible to the app's linker namespace. Cross-trace: SDD-105 (load order — `c++_shared` must be loaded BEFORE `chanora_bridge`), SDD-111 (oboe-rs C++ dependency that introduces the C++ runtime requirement), SDD-118 item 10 (release-inspection assertion shall include `libc++_shared.so` as well as `libchanora_bridge.so`). -7. Task-graph wiring: the build task(s) shall execute before AGP's jniLib merge step, wired via `tasks.matching { it.name.startsWith("merge") && it.name.endsWith("JniLibFolders") }.configureEach { dependsOn() }`. The task shall NOT be wired via `preBuild.dependsOn(...)` (preBuild fires too early in the AGP graph and runs even for non-build configurations such as IDE sync, which would force unnecessary cargo invocations). -8. Gradle up-to-date semantics: the task shall declare, for Gradle incremental-build correctness: - - `inputs.dir("$rootProject/crates")` — Rust source tree - - `inputs.file("$rootProject/Cargo.toml")` — workspace manifest - - `inputs.file("$rootProject/Cargo.lock")` — dependency-version pin - - `outputs.files()` - Cargo's own incremental cache layers on top; both Gradle and cargo must independently agree that nothing has changed for the task to skip cleanly. (Path roots in this item are illustrative; the implementation shall resolve them against the actual workspace layout rather than hard-coding the literal `$rootProject` string.) -9. Preflight (no auto-install): at task-configuration or task-action time, the task shall check that `cargo` is present, that `cargo-ndk` is present, and that the three rustup targets `aarch64-linux-android`, `armv7-linux-androideabi`, `x86_64-linux-android` are installed. On any missing prerequisite the task shall fail with an actionable error message that includes the exact remediation commands — at minimum `cargo install cargo-ndk` and `rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android`. The task shall NOT auto-install any of these tools and shall NOT mutate the user's PATH, `~/.cargo/`, or `~/.rustup/` state. -10. Release-inspection assertion: immediately before the AGP `bundleRelease` or `bundleDebug` task runs (wired via the same `mergeXxxJniLibFolders` graph node as item 7, or by a sibling `doFirst` on the bundle task), each expected `.so` destination from item 6 shall be asserted to exist and to have a size greater than 1 KiB. If any `.so` is missing or trivially small, the build shall fail with a clear message naming the missing ABI and the expected path. Rationale: catches silent cargo-ndk task skips or empty-link-output regressions before they ship into an AAB. -11. Idempotency: if all three staged `.so` files are newer than every declared input file (item 8) AND cargo's own incremental cache confirms no Rust input changed, both the `cargo-ndk` invocation and the per-ABI copy step shall be skipped. The interaction model is layered — Gradle's `inputs`/`outputs` gating decides whether the task runs at all; if the task does run, cargo's own incremental decides whether it actually relinks. Both must agree on "no change" for the full no-op path. -12. Caching across clean builds: the cargo `target/` directory lives at the repository root (outside `apps/chanora_flutter/android/`) and is OUTSIDE the Gradle `clean` scope. `./gradlew clean` MUST NOT remove the cargo `target/` cache. The task shall NOT register `target/` (or any subpath of it) as a Gradle build output, since doing so would make Gradle's `clean` delete it. The implementation shall document this constraint inline in the build script for future maintainers. -13. Parallelism stance: the baseline implementation shall use a single `cargo-ndk` invocation with `-t arm64-v8a -t armeabi-v7a -t x86_64` (cargo-ndk iterates ABIs sequentially internally), matching the single-shot model used by the SDD-119 iOS / macOS automation. The implementation shall NOT split per-ABI into parallel Gradle tasks at this revision. Revisit only if dev-cycle wall-clock cost becomes observably painful; a future SDD revision may relax this stance. -14. Cross-platform contract scope: SDD-118 is Android-only. iOS and macOS bridge-build automation is owned by SDD-119. The two units share no files and no tasks; their only shared contract is the principle that the `chanora_bridge` Rust cdylib is auto-built and embedded by the platform's native build system without manual developer steps. The mechanisms (Gradle Exec task + cargo-ndk + jniLibs copy here, vs. CocoaPods podspec + cargo + `lipo` + framework-layout shell there) reflect platform conventions and are intentionally independent. - -Notes: - -- The Android automation is hand-rolled in the same spirit as the iOS / macOS podspecs (SDD-119): no cargokit, no rinf, no custom xtask wrapper at this revision. A future SDD revision may unify all three platforms under one cross-platform Rust-cdylib build tool; the explicit decision at this revision is to match the existing iOS / macOS pattern so that a single mental model covers all three platforms. -- The Android profile-mapping divergence from the iOS / macOS always-`--release` pattern (item 4) is deliberate and is the only material design divergence between SDD-118 and SDD-119. It is documented here as a known asymmetry rather than as a latent inconsistency. - -**SDD-119**: `iOSAndMacOSBridgeBuildAutomation` shall record, as a documentation-after-code back-fill, the existing CocoaPods-podspec-driven automation that builds the `chanora_bridge` Rust cdylib for iOS and macOS and embeds the result as an `@rpath`-based `.framework` consumed by the Flutter Runner via `vendored_frameworks`. The implementation already exists in code under `apps/chanora_flutter/ios/chanora_bridge.podspec` and `apps/chanora_flutter/macos/chanora_bridge.podspec`; this SDD unit anchors the design contract that has lived in code without an SDD / SAD anchor since landing. - -- Status: Draft (back-fill — implementation already exists) -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `apps/chanora_flutter/ios/chanora_bridge.podspec` (iOS — single arch `aarch64-apple-ios`, flat framework), `apps/chanora_flutter/macos/chanora_bridge.podspec` (macOS — dual arch `aarch64-apple-darwin` + `x86_64-apple-darwin` joined via `lipo`, `Versions/A` framework layout), plus their Podfile entries (iOS Podfile line 41; macOS Podfile line 34). -- Source SAD: SAD-061 (iOS runtime), SAD-062 (App Store / packaging). No dedicated macOS-runtime SAD anchor exists; the macOS half of this unit is sourced by parallelism from SAD-061 / SAD-062 pending a SAD revision that adds a macOS-runtime allocation item (flagged in §11 coverage matrix). -- Cross-trace SDD: SDD-104 (`ios_voice_unit` / VPIO — consumer of the produced iOS framework), and any iOS audio-related SDD downstream of SDD-104 by transitive use of the same `.framework`. -- Verification method: Build-system Test (CocoaPods integration on a clean derived-data state), Platform Test (iOS device build, macOS desktop build, both with `chanora_bridge` symbols resolving at runtime). - -Implementation requirements (back-fill of existing podspec automation): - -1. iOS pattern — `apps/chanora_flutter/ios/chanora_bridge.podspec` (file ranges per the researcher's report): - - Hand-rolled podspec wired into the iOS app via the Podfile (iOS Podfile line 41). - - Dual-hook automation: `prepare_command` (podspec lines 51–97) runs at `pod install` time; `script_phase :before_compile` (podspec lines 114–147) runs at every Xcode build. Both hooks call into `cargo build --release --target aarch64-apple-ios -p chanora_bridge`. - - Single-architecture build: `aarch64-apple-ios` only (real arm64 devices). The simulator slice (`aarch64-apple-ios-sim`) is NOT actually built by the script despite a comment in the podspec referring to it (see item 4 doc-drift note). - - Always `--release` profile (the SDD-118 Android variant-driven profile mapping is NOT used here). - - Environment on the cargo invocation: `IPHONEOS_DEPLOYMENT_TARGET=13.0`, `CMAKE_POLICY_VERSION_MINIMUM=3.5`, `CMAKE_OSX_DEPLOYMENT_TARGET=13.0` (the last is set because the cargo cmake bridge keys off the OSX variant when building from a macOS host even for an iOS target). - - Output staging: `libchanora_bridge.dylib` is copied into a flat (non-versioned) `.framework` bundle. A hand-written `Info.plist` is emitted into the framework. `install_name_tool -id @rpath/chanora_bridge.framework/chanora_bridge` rewrites the `LC_ID_DYLIB` so the framework is `@rpath`-relocatable. - - CocoaPods `vendored_frameworks` directive auto-embeds the produced `.framework` into the Runner.app target via the standard CocoaPods embed-frameworks build phase; no additional Xcode-project edits are required. - - Caching: cargo's own incremental cache in `target/` plus a timestamp guard inside the `script_phase` skips rebuild when sources are unchanged. - -2. macOS pattern — `apps/chanora_flutter/macos/chanora_bridge.podspec` (file ranges per the researcher's report): - - Parallel hand-rolled podspec wired into the macOS app via the Podfile (macOS Podfile line 34). - - Same dual-hook structure (`prepare_command` + `script_phase :before_compile`). - - Dual-architecture build: `aarch64-apple-darwin` AND `x86_64-apple-darwin`, then `lipo -create` joined into a single universal binary. This is the "universal" mechanism — a single fat binary at the dylib layer. (This is the fundamental mechanism divergence from SDD-118 Android, where there is no `lipo`.) - - Always `--release` profile. - - Environment on the cargo invocation: `MACOSX_DEPLOYMENT_TARGET=10.15`, `LIBOPUS_STATIC=1`, `LIBOPUS_NO_PKG=1`, `CMAKE_POLICY_VERSION_MINIMUM=3.5`. Rationale for `LIBOPUS_STATIC=1` / `LIBOPUS_NO_PKG=1`: avoid relying on a Homebrew-installed `libopus` and `pkg-config` on the build host (developer-machine variance); also matches the SDD-118 Android stance for the same reason (NDK sysroot has no libopus). - - Output staging: the universal `libchanora_bridge.dylib` is placed inside a macOS-style `Versions/A` framework layout (`chanora_bridge.framework/Versions/A/chanora_bridge` plus the standard `Current` / top-level symlinks). `install_name_tool -id @rpath/chanora_bridge.framework/Versions/A/chanora_bridge` sets the install name to the versioned framework path. - - CocoaPods `vendored_frameworks` integration is identical to iOS in mechanism. - - Caching: cargo incremental + per-platform timestamp guard inside the `script_phase`, identical to iOS. - -3. Deployment-target source-of-truth — RESOLVED for macOS (v0.9.17 amendment): the macOS bridge deployment-target floor (`10.15`) is now sourced from a single Ruby constant `MACOS_BRIDGE_DEPLOYMENT_TARGET` declared in `apps/chanora_flutter/macos/macos_deployment_target.rb` and `require_relative`-loaded by both `apps/chanora_flutter/macos/Podfile` (consumed as the argument to `platform :osx, ...`) and `apps/chanora_flutter/macos/chanora_bridge.podspec` (consumed by `s.platform :osx, ...`, by the four `MACOSX_DEPLOYMENT_TARGET=...` env exports inside the `prepare_command` and `script_phase` heredocs via Ruby `#{...}` interpolation, and by the two embedded framework `Info.plist` `MinimumOSVersion` entries that are emitted inside the same heredocs). This realizes SAD-087(a)'s "single macOS build-configuration location" mandate as Option B (Ruby constant, scoped narrowly to the chanora_bridge Rust-cdylib baseline), selected over Option A (`.xcconfig`) because the bridge baseline is consumed by the podspec's `prepare_command` BEFORE any xcconfig is applied — a Ruby-evaluation-time constant is the only mechanism that reaches every consumer site without indirection — and over Option C (versioned text file) on the grounds that the bridge consumers are all already Ruby files, so a Ruby constant adds zero new file-format burden. The pbxproj `MACOSX_DEPLOYMENT_TARGET = 10.15` occurrences at `Runner.xcodeproj/project.pbxproj` lines 565, 666, 717 are explicitly OUT OF SCOPE for this SoT: those three lines belong to the PBXProject "Runner" build-configuration list (i.e. the project-default config that Flutter's `flutter create` template emits) and are independently overridden to `11.0` at the Runner PBXNativeTarget level (project.pbxproj lines 756, 782, 614) — they are the Runner app's project-default floor, not the bridge cdylib's floor; the matching `10.15` value is coincidental and the two values can legitimately diverge in the future (e.g., raising the bridge to `11.0` while leaving the Runner app's project-default at `10.15`, or vice versa). To bump the bridge floor, edit ONLY `macos_deployment_target.rb`; do not introduce any other literal occurrence of the floor string under `apps/chanora_flutter/macos/`. The iOS half of this follow-up (`IPHONEOS_DEPLOYMENT_TARGET=13.0` hard-coded in the iOS podspec) is intentionally NOT addressed by this amendment — the iOS podspec is a separate Ruby file with no Podfile-shared baseline (the iOS Podfile uses a Flutter-template-generated `platform :ios, ...` line that already lives in its own configuration scope) and a parallel SoT consolidation for iOS is recorded as a follow-up SDD revision. - -4. iOS simulator slice — RESOLVED (decision: Option α, drop the misleading comment): P0 scope intentionally excludes `aarch64-apple-ios-sim`; the iOS podspec comment at `apps/chanora_flutter/ios/chanora_bridge.podspec:9-10` referencing simulator support is to be removed in a follow-up commit so the in-file docstring matches the actual cargo invocation (which builds only `aarch64-apple-ios`). Rationale for choosing Option α over adding the sim slice: P0 minimalism — simulator support is a P1 concern; expanding the iOS build matrix at P0 expands scope without serving a P0 verification need. Implication for downstream: building the Runner for an iOS simulator currently relies on Xcode's own handling of an arm64-device-only framework on Apple-silicon hosts; Intel-host iOS simulator builds are not supported by this automation as written. A future SDD revision (P1) may add the simulator slice; until then, the podspec comment shall be dropped to eliminate the doc-drift defect. - -5. Caching mechanism (unified across iOS / macOS): cargo's incremental cache in `target/` provides Rust-source-level caching; a per-platform timestamp guard inside each `script_phase` provides the outer CocoaPods-script-level skip. As with SDD-118 item 12, the `target/` directory lives at the repository root and is OUTSIDE both Xcode's derived-data cleanup and `pod deintegrate`'s footprint; neither should remove cargo's cache. - -6. Preconditions and failure modes: - - `cargo` is expected at `$HOME/.cargo/bin/cargo` (the rustup default). The podspec adds `$HOME/.cargo/bin` to PATH for the script's child process; it does NOT mutate the developer's shell profile. - - The rustup targets `aarch64-apple-ios`, `aarch64-apple-darwin`, and `x86_64-apple-darwin` MUST be installed (`rustup target add ...`). Missing targets surface as cargo errors during the prepare_command / script_phase. - - A CMake 4.x toolchain MUST be present on the build host because `CMAKE_POLICY_VERSION_MINIMUM=3.5` is the workaround for CMake-4-introduced policy strictness in the `audiopus_sys` / libopus build chain; on a CMake 3.x host the env var is a no-op and the build still succeeds, but the variable's documented purpose only applies to CMake 4.x. - - The same `LIBOPUS_STATIC` / `LIBOPUS_NO_PKG` rationale as SDD-118 item 5 applies on macOS (and is set in the macOS podspec env); on iOS, the audiopus_sys build path for the iOS target also statically links libopus from source by default. - -7. Why hand-rolled and not Cargokit: per the podspec's own header comment, this automation is "written by hand … to avoid the Cargokit vendoring footprint we previously dropped." Maintenance posture: the podspec is project-maintained; there is no upstream-tracked build helper to follow. Bit-rot risk is currently low (the surface area is small — cargo invocation + lipo + install_name_tool + framework layout) but will rise if Apple changes framework-embedding conventions or if `audiopus_sys` changes its build-script interface. The risk is accepted at this revision. - -8. Relationship to SDD-118 (Android counterpart): SDD-118 and SDD-119 implement the same principle — the `chanora_bridge` Rust cdylib is auto-built and embedded by the platform's native build system without manual developer steps — through different mechanisms. SDD-118 uses Gradle + `cargo-ndk` + per-ABI plain-copy into `jniLibs/`; SDD-119 uses CocoaPods podspec + `cargo` (+ `lipo` on macOS) + framework-layout shell. The pair is intentionally not unified at this revision (open follow-up: a future SDD may collapse them under one cross-platform tool). The Android profile-mapping divergence (SDD-118 item 4) and the macOS multi-arch / lipo divergence (item 2 above) are the two material design differences between the units; both are documented as deliberate. - -Notes: - -- This is a back-fill SDD. No new implementation work is created by SDD-119; the code already exists and ships. A builder agent does NOT need to act on SDD-119. The doc-drift defect in item 4 is RESOLVED (v0.9.13). The macOS deployment-target single-source-of-truth follow-up in item 3 is RESOLVED for macOS (v0.9.17); the iOS half remains an open follow-up for a future SDD revision. -- SAD-side anchoring of the build-automation pattern at the architectural layer is NOT performed by this SDD unit; a software-architect dispatch is required if the orchestrator wants a SAD-layer build-automation item. - -**SDD-120 — Realtime audio benchmark harness and advisory CI infrastructure** - -- Source SAD: SAD-088 (criterion-based bench harness allocated to `chanora_audio` `benches/` directory, extending SAD-034 audio-subsystem allocation), SAD-089 (baseline-JSON on-disk path pinned to `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`), SAD-090 (advisory CI workflow `.github/workflows/bench-advisory.yml` — PR-triggered, non-blocking, comment-posting reader of SAD-089), SAD-091 (baseline-update CI workflow `.github/workflows/bench-baseline-update.yml` — `workflow_dispatch`-only, sole writer of SAD-089). -- Allocated to: Audio Subsystem (`crates/chanora_audio/benches/` for criterion bench targets; `crates/chanora_audio/examples/` for the post-processor binaries — see §2 rationale) + Build/Release/Operations (`.github/workflows/bench-advisory.yml`, `.github/workflows/bench-baseline-update.yml`). -- Software units (new): `crates/chanora_audio/benches/realtime_capture.rs`, `crates/chanora_audio/benches/opus_codec.rs`, `crates/chanora_audio/benches/resampler.rs`, `crates/chanora_audio/benches/common.rs` (shared synthetic-input helper module), `crates/chanora_audio/examples/emit_baseline.rs` (post-bench JSON aggregator binary), `crates/chanora_audio/examples/compare_baseline.rs` (PR-vs-baseline comparator binary), `crates/chanora_audio/Cargo.toml` (dev-dependency additions and `[[bench]]` entries), `.github/workflows/bench-advisory.yml`, `.github/workflows/bench-baseline-update.yml`, `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` (seeded SAD-089 baseline file). -- Cross-trace: SDD-094 (the `chanora_audio::engine::AudioEngine` capture path that the §3 bench seam exercises is the same audio engine whose `ensure_running` / `shutdown_if_idle` lifecycle is specified by SDD-094; the harness measures the steady-state callback that runs while `ensure_running` has opened the cpal input stream, so the bench seam is part of the engine's verification surface). No cross-trace to SDD-076..SDD-080 / SDD-118: the bench targets the realtime audio path and not the PTT capability surface; the Android-bridge build automation is unrelated to the Linux-host bench workflow. - -§1 — Crate selection and version pin. - -1. Add `criterion = "0.5"` to `crates/chanora_audio/Cargo.toml` `[dev-dependencies]`. The `0.5` series is the current stable major and is compatible with the workspace `rust-version = "1.95"` pin. Default features are kept; `html_reports` is left at its default (criterion only emits HTML when invoked with `--save-baseline`/`--load-baseline` against the local user, and CI consumes the per-bench `estimates.json` files directly from `target/criterion/`, so an HTML feature toggle is not load-bearing for the workflow). Rationale: criterion is the de-facto statistical benchmark harness for Rust; it emits a stable JSON estimates file under `target/criterion///estimates.json` that the §5 post-processor parses. -2. Add `dhat = "0.3"` to `crates/chanora_audio/Cargo.toml` `[dev-dependencies]`. `dhat` is used inside `bench_capture_alloc_count` to install a `#[global_allocator] static ALLOC: dhat::Alloc = dhat::Alloc;` profiler at bench-binary scope and to compare `dhat::HeapStats::get().total_blocks` (or the equivalent v0.3 API name) before and after the measurement window. Rationale: `dhat` is the de-facto heap profiler for Rust, has zero-cost when disabled, and is the lowest-friction way to obtain a steady-state heap-allocation count for the SRS-219 clause-a zero-allocation invariant (which carries `tolerance = 0`). -3. Add three `[[bench]]` entries to `crates/chanora_audio/Cargo.toml`, one per bench file enumerated in §2. Each entry shall set `harness = false` only if the bench file calls `criterion::criterion_main!` directly (criterion's `main!` macro replaces the cargo test harness); the §3 signatures use `criterion_main!` so `harness = false` is required. -4. Add two `[[example]]` entries pointing at `examples/emit_baseline.rs` and `examples/compare_baseline.rs` so that `cargo run --example emit_baseline` and `cargo run --example compare_baseline` resolve correctly. The §6 / §7 workflow steps invoke these tools via the `--example` flag (not `--bin`). Cargo auto-discovers files under `examples/` as example targets, so explicit `[[example]]` blocks in `Cargo.toml` are optional; the `path = "examples/.rs"` field is only required if the file lives outside the conventional location. - -§2 — Bench file layout. - -1. `crates/chanora_audio/benches/realtime_capture.rs` — declares `bench_capture_alloc_count` and `bench_capture_callback_wall_clock`. Uses `criterion_group!(realtime_capture, bench_capture_alloc_count, bench_capture_callback_wall_clock);` and `criterion_main!(realtime_capture);`. -2. `crates/chanora_audio/benches/opus_codec.rs` — declares `bench_opus_encode_latency` and `bench_opus_decode_latency`. Uses `criterion_group!(opus_codec, bench_opus_encode_latency, bench_opus_decode_latency);` and `criterion_main!(opus_codec);`. -3. `crates/chanora_audio/benches/resampler.rs` — declares `bench_resampler_throughput`. Uses `criterion_group!(resampler, bench_resampler_throughput);` and `criterion_main!(resampler);`. -4. `crates/chanora_audio/benches/common.rs` — shared synthetic-input helpers per §4. Included from each bench file with `mod common;` (criterion bench files compile as standalone binaries, so `common.rs` is included by relative module declaration in each `realtime_capture.rs` / `opus_codec.rs` / `resampler.rs`; do NOT add it as a fourth `[[bench]]` entry). -5. `crates/chanora_audio/examples/emit_baseline.rs` and `crates/chanora_audio/examples/compare_baseline.rs` — the two post-processor tools enumerated in §1 item 4 and detailed in §5 / §8. Placement rationale: emit_baseline and compare_baseline are placed under `examples/` rather than `benches/` or `src/bin/`. Cargo's dependency resolver only routes `[dev-dependencies]` to `[[test]]`, `[[bench]]`, and `[[example]]` targets; binaries under `src/bin/` would force `serde_json` and other CI-only crates into the production `[dependencies]` block, contaminating the release build. The `examples/` placement keeps these tools strictly dev-only — they are excluded from `cargo build --release` and from `flutter build apk/aab/ipa --release`. Co-locating them under `benches/` would also work mechanically for dev-dep routing but conflates the criterion bench-target surface with the auxiliary post-processor surface; `examples/` keeps the two concerns syntactically distinct while preserving the same dev-only isolation property. - -§3 — Bench function signatures and warmup phase. - -1. `fn bench_capture_alloc_count(c: &mut Criterion)` — the bench installs a `dhat::Profiler::builder().testing().build()` once at the start of the function, runs the §4 `synthetic_capture_buffer(960, 1)` through `CaptureState::ingest(&buf)` 100 times as a warm-up (this primes any first-call allocations from the cpal capture-state machine — ring-buffer growth, resampler-state init, opus-encoder-handle init via the existing engine code path), then samples `dhat::HeapStats::get()` to capture the `total_blocks` count `B_warm`, runs 1000 additional `ingest` calls inside `c.bench_function("capture_alloc_count", |b| b.iter(|| ingest_one()))`, samples `dhat::HeapStats::get()` again to obtain `B_final`, and the criterion-reported metric value shall be `(B_final - B_warm)` (the post-warmup allocation count). The function additionally `assert_eq!(B_final - B_warm, 0)` so a regression also fails the bench process at the local-developer surface; the CI advisory comparator in `compare_baseline.rs` carries the SRS-219 clause-a `tolerance = 0` zero-allocation rule independently. Bench seam: the function exercises the `CaptureState::ingest(&mut self, buf: &[T])` signature located at `crates/chanora_audio/src/engine.rs:1207` per the §“State” reading; the bench obtains a `CaptureState` instance by calling the engine's existing test-mode constructor (the same path `tests/ptt_privacy.rs` uses today). No new public API surface is created on `CaptureState`. -2. `fn bench_capture_callback_wall_clock(c: &mut Criterion)` — uses criterion's default `c.bench_function("capture_callback_wall_clock", |b| b.iter(|| capture_state.ingest(black_box(&buf))));` over the same `synthetic_capture_buffer(960, 1)` input. Criterion's internal warmup (default 3 s, configurable but not overridden here) precedes the measurement window; the harness emits `mean`, `median`, and the 95 % and 99 % bootstrap-confidence-interval percentiles into `target/criterion/capture_callback_wall_clock/.../estimates.json`. The §5 post-processor extracts p50 (median), p95, and p99 from that file and writes the three values into the SRS-217 record's `value` triplet. -3. `fn bench_opus_encode_latency(c: &mut Criterion)` — constructs an `audiopus::coder::Encoder::new(SampleRate::Hz48000, Channels::Mono, Application::Voip)` once outside the measurement loop (per criterion best practice; encoder construction is dominated by libopus state allocation and is not part of the per-frame latency), pre-builds a `synthetic_opus_frame()` PCM buffer (exactly `FRAME_SAMPLES = 960` samples per SAD-088 / SysDes-156), and measures `encoder.encode_float(&pcm, &mut opus_out)` per iteration. The bench reports p50/p95/p99 as in item 2. -4. `fn bench_opus_decode_latency(c: &mut Criterion)` — same pattern as item 3 but with `audiopus::coder::Decoder::decode_float(&opus_bytes, &mut pcm_out, false)`. The SDD explicitly pins the bench target to the `audiopus` direct decoder call rather than `tsclientlib::AudioHandler::fill_buffer`, because `AudioHandler::fill_buffer` performs jitter-buffer dequeue + Opus decode + PCM mix in a single call and the wall-clock measurement would conflate three distinct concerns. The canonical SRS-217 metric `opus_decode_latency` therefore refers to the codec-level decode of a single 20 ms / 960-sample frame, not the full AudioHandler call. (Future revision may add a separate `audio_handler_fill_buffer_latency` metric covering the composite call; that metric is out of scope at this SDD revision.) -5. `fn bench_resampler_throughput(c: &mut Criterion)` — opens one `criterion::BenchmarkGroup` named `resampler_throughput` and registers three sub-benches: `c.bench_function("44100_to_48000", ...)`, `c.bench_function("16000_to_48000", ...)`, and `c.bench_function("48000_passthrough", ...)`. Each sub-bench feeds a 1-second synthetic-sine input (length is 44100 / 16000 / 48000 frames respectively) through the existing engine's resampler entry point and reports `samples_per_second = input_len / measured_duration_secs`. The bench uses `group.throughput(Throughput::Elements(input_len as u64))` so criterion's report exposes the throughput estimate directly in `estimates.json`. - -§4 — Synthetic input generation. - -1. `crates/chanora_audio/benches/common.rs` exposes two functions, both deterministic (no RNG, no time-of-day input): `pub fn synthetic_capture_buffer(frames: usize, channels: usize) -> Vec` and `pub fn synthetic_opus_frame() -> Vec` (the latter is the special case `synthetic_capture_buffer(960, 1)`). -2. Sample generation: a 440 Hz sine at amplitude 0.5 over the 48 kHz playback rate (matching the audio engine's mixer rate per SAD-034). For frame index `n` the sample value is `0.5 * (2.0 * PI * 440.0 * (n as f32) / 48_000.0).sin()`. For multi-channel buffers the same scalar value is replicated across all channels at the same frame index (interleaved layout, matching cpal's `Stream` data layout). No randomness, no fade-in, no DC offset — the same input produces the same bytes across runs and the same bytes across hosts. -3. Determinism is load-bearing for §5 baseline stability: if the synthetic input drifts between runs the criterion `estimates.json` would also drift and the comparator would emit false-positive 🔴 markers. The §5 emit-baseline binary and the §6 comparator both assume byte-stable input. - -§5 — JSON post-processing. - -1. After each bench file runs, criterion writes `target/criterion///estimates.json` per benchmark group. The §5 binary `crates/chanora_audio/examples/emit_baseline.rs` reads the five expected estimates files (one per §3 bench function, with the resampler bench contributing three sub-bench estimate files that are aggregated into the single SRS-217 `resampler_throughput` record by averaging the three throughput estimates into a per-mode triplet, NOT a single scalar — the SRS-217 schema carries a per-mode record). Invocation pattern: `cargo run --example emit_baseline` (NOT `cargo run --bin emit_baseline`); see §2 item 5 rationale for the `examples/` placement. -2. The binary parses each `estimates.json` (a stable criterion-emitted JSON shape: `mean`, `median`, `std_dev`, `confidence_interval`) and projects each metric into an SRS-217 record with fields `{ metric: , value: , unit: , tolerance_pct: , host: "x86_64-unknown-linux-gnu", timestamp_utc: }`. The full output is a single JSON document with one top-level array `metrics`. -3. The binary writes the document to `./current.json` in the workspace root (not the SAD-089 path — that path is the comparator's input on advisory runs and the writer's output target on baseline-update runs; §6 step 7 reads SAD-089 from git, §7 step 5 writes SAD-089 by copy). -4. Rationale for the Rust-binary approach over a `tools/bench-emit.sh` script: same toolchain as the bench files (no separate `jq` / `python` / `bash` dependency on the runner), same `serde_json` already pulled by the workspace as a `[dev-dependencies]` entry (routed to the `examples/` targets per §2 item 5), and the example can share types with `compare_baseline.rs` via a small shared module under `examples/` (both examples use the same SRS-217 struct definitions). - -§6 — `.github/workflows/bench-advisory.yml` structure (SAD-090 realization). - -1. Triggers: `pull_request: { types: [opened, synchronize, reopened], branches: [main] }` and `push: { branches: [main] }`. (The default branch is `main` per the existing `.github/workflows/ci.yml` convention; if the repository default branch ever renames, both YAML files in this SDD unit must update in lockstep.) -2. Job name: `bench-advisory`. `runs-on: ubuntu-latest`. `permissions: { pull-requests: write, contents: read }` — `pull-requests: write` is required by step 9 (PR-comment posting); `contents: read` is the minimum for `actions/checkout`. -3. Step 1: `actions/checkout@v4` with `fetch-depth: 0`. Full history is required because step 6 resolves the PR merge-base via `git merge-base origin/main HEAD` and step 7 reads the baseline file from that merge-base via `git show`. -4. Step 2: install Rust toolchain via `dtolnay/rust-toolchain@stable` (matching the existing `.github/workflows/ci.yml` pattern). The workspace `rust-version = "1.95"` floor is satisfied by `@stable` at the time of authoring; if a future workspace pin moves above the public stable channel, both this file and `ci.yml` must update. -5. Step 3: `Swatinem/rust-cache@v2` (matching existing `.github/workflows/ci.yml`). Reuses the bench target directory across runs. -6. Step 4: install the same system audio deps `ci.yml` installs (`libasound2-dev libpulse-dev pkg-config libopus-dev`). Required because the `chanora_audio` crate links `libopus` and the cpal Linux backend pulls ALSA headers at build time. -7. Step 5: `cargo bench --bench realtime_capture --bench opus_codec --bench resampler`. (`cargo bench` without `--benches` would build doctests; the explicit `--bench ` list bypasses that and matches the three `[[bench]]` entries from §1 item 3.) No `-- --output-format json` flag is required because §5 reads `target/criterion/.../estimates.json` files directly; criterion writes those unconditionally. -8. Step 6: `cargo run --example emit_baseline` → writes `./current.json` to the workspace root. (Invocation flag is `--example`, not `--bin`; see §2 item 5 rationale.) -9. Step 7: `MERGE_BASE=$(git merge-base origin/main HEAD)` and `git show $MERGE_BASE:crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json > baseline.json`. If the merge-base predates the introduction of SAD-089 (i.e. the file did not exist at that commit), `git show` exits non-zero; the step shall handle the missing-baseline case by writing an empty `baseline.json` placeholder and emitting a single advisory comment `Baseline not yet established at merge-base; first run on default branch will establish.` instead of running the comparator. This is the only branch where the workflow short-circuits before the comparator step. (The `push: branches: [main]` trigger never hits this short-circuit after the first baseline lands.) -10. Step 8: `cargo run --example compare_baseline -- --current ./current.json --baseline ./baseline.json --output ./report.md`. The example applies the SRS-219 per-metric tolerance table and the §8 marker logic, then writes a markdown table to `./report.md`. The example shall always exit 0 (per SRS-218 clause 4); regression detection is rendered as a 🔴 marker inside the comment, not as a non-zero exit code. -11. Step 9: post the markdown as a PR comment via `actions/github-script@v7`, gated on `if: github.event_name == 'pull_request'` (the `push` trigger has no PR to comment on; for `push` runs the workflow still writes `./report.md` as a workflow artifact via `actions/upload-artifact@v4` so the default-branch trend is inspectable from the Actions tab). Comment body is `body: require('fs').readFileSync('report.md', 'utf8')`. The script shall also de-duplicate prior comments by the same `github-actions[bot]` identifier carrying a sentinel marker line (e.g. ``) at the head of the body — on each run the existing comment is updated in place rather than appended, so a long-lived PR does not accumulate one comment per push. The de-duplication query uses `octokit.rest.issues.listComments` filtered on `user.login === 'github-actions[bot]'` and body-startsWith the sentinel. -12. Step 10: `if: always()` and a final `exit 0` — no step in the job sets `continue-on-error: false` against a regression-detecting predicate, so the SRS-218 clause 4 non-blocking property is realized by absence of a failing step rather than by an explicit override. -13. Status-check name registered with the branch-protection ruleset (if any): `bench-advisory`. The SDD does not mandate adding this to the required-checks list; SRS-218 clause 4 explicitly prohibits making it required. - -§7 — `.github/workflows/bench-baseline-update.yml` structure (SAD-091 realization). - -1. Trigger: `workflow_dispatch: {}` only. No `pull_request`, no `push`, no `schedule`, no tag triggers. SAD-091 is invariant on this property. -2. Job name: `bench-baseline-update`. `runs-on: ubuntu-latest` (byte-comparable to SAD-090 per SAD-091). `permissions: { contents: write, pull-requests: write }` — write on both because step 6 opens a PR via `peter-evans/create-pull-request@v6`. -3. Step 1: `actions/checkout@v4` with default ref (no `fetch-depth: 0` needed; the workflow does not resolve merge-bases). -4. Step 2: install Rust toolchain (same shape as §6 step 2). -5. Step 3: install audio system deps (same shape as §6 step 4). -6. Step 4: `cargo bench --bench realtime_capture --bench opus_codec --bench resampler` (same shape as §6 step 5). -7. Step 5: `cargo run --example emit_baseline` (same shape as §6 step 6; invocation flag is `--example`, not `--bin`). -8. Step 6: `cp ./current.json crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`. -9. Step 7: `peter-evans/create-pull-request@v6` with `title: "chore(bench): update baselines on $(date -u +%Y-%m-%d)"`, `branch: bench/baseline-update-$(date -u +%Y%m%d)`, `commit-message: "chore(bench): refresh x86_64-unknown-linux-gnu baseline"`, `body: `, and `add-paths: crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`. Rationale for opening a PR rather than direct-pushing to `main`: baseline updates should be reviewable in case of accidental triggering (a contributor clicks the dispatch button by mistake), runner pollution (an unrelated process on the GitHub-hosted runner skewed the measurement), or a legitimate regression that should not silently move the floor. The PR is then merged by a reviewer using the normal branch-protection flow; this preserves the SAD-091 invariant that this workflow is the **sole writer** of the SAD-089 file (the PR-merge commit is also written by this workflow's PR, not by a human directly editing the JSON). - -§8 — Yellow-marker realization (simpler-form selection per SAD-090). - -1. Per SAD-090's yellow-marker pin, the SDD selects the simpler operationalization: the committed SAD-089 baseline JSON IS treated as the most recent default-branch run, and is the comparator for both the green/red tolerance evaluation AND the yellow trending evaluation. No separate run-history artifact is maintained. -2. `compare_baseline.rs` logic — for each metric `m` in the SRS-217 record set: - - Let `c = current.metrics[m].value`, `b = baseline.metrics[m].value`, `t = SRS-219 tolerance for m`. - - If `m` is a zero-tolerance metric (SRS-219 clause a — `capture_alloc_count`): emit 🔴 if `c != 0`, 🟢 if `c == 0`. Yellow does not apply. - - Otherwise (`t > 0`): compute `delta_pct = (c - b) / b` when `b > 0`, or `delta_pct = 0.0` when `b == 0` (a degenerate baseline). Then: - - 🔴 if `delta_pct > t` (regression beyond tolerance). - - 🟡 if `0.5 * t < delta_pct ≤ t` (within tolerance but trending up; the SAD-090 yellow-marker semantics). - - 🟢 otherwise (`delta_pct ≤ 0.5 * t`, including all improvements where `delta_pct < 0`). -3. The markdown report's table carries columns: `metric | unit | baseline | current | delta_pct | tolerance | marker`. Marker column uses the literal emoji characters 🟢 / 🟡 / 🔴. A header line cites the merge-base SHA from §6 step 7 so the reviewer can confirm which baseline the comparison used. - -§9 — Cross-traces (informational, not derivation). - -1. SDD-094 (cross-platform audio engine `voice_join` / `voice_leave` lifecycle): the §3 bench seam targets `CaptureState::ingest`, which is part of the engine's running-state surface exposed by `AudioEngine::ensure_running`. The harness measures the steady-state callback path that runs while the engine is in the `ensure_running == true` state; this places the bench inside SDD-094's verification surface. The bench does NOT construct a full `AudioEngine` (no cpal stream is opened — the bench drives `CaptureState::ingest` directly with synthetic input), so the §3 bench seam is isolated from cpal device enumeration and from JNI / oboe-rs concerns. -2. SDD-118 (Android `chanora_bridge` build automation): explicitly NOT cross-traced. The bench harness runs only on the `ubuntu-latest` host with the `x86_64-unknora-linux-gnu` target per SysDes-157; Android cross-compilation is not exercised by either workflow file in this SDD unit. -3. SDD-076..SDD-080 (PTT capability surface): explicitly NOT cross-traced. The realtime callback being benched is downstream of these — a PTT key event ultimately gates the audio engine's transmit path — but the bench specifically targets the audio capture / codec / resampler path, not the PTT event-routing path. Adding PTT events would conflate the measurement. - -§10 — Out of scope (deferrals preserved through Wave 1.5). - -1. No production telemetry export — the bench is a CI-only artifact; no runtime metric is exported from a shipping `chanora_audio` build. The `examples/` placement of the post-processor binaries (per §2 item 5 rationale) is the mechanism that enforces this release-artifact isolation: `[dev-dependencies]` (including `serde_json`, `criterion`, `dhat`) are excluded from `cargo build --release` by Cargo design, so neither the criterion bench targets nor the `emit_baseline` / `compare_baseline` examples — and none of their transitive dev-only deps — can be reached by a release build of the production cdylib or the Flutter `--release` artifacts. -2. No hard CI gate — SRS-218 clause 4 is invariant; the advisory workflow never fails a check on regression. -3. No multi-host benchmarking — SysDes-157 pins the host to `x86_64-unknown-linux-gnu`; the SAD-089 filename is target-triple-keyed to permit future multi-host expansion without directory restructuring, but adding a second host (e.g. `aarch64-apple-darwin` for macOS measurement) is out of scope at this revision. -4. No IDE integration — no VS Code task, no IntelliJ run configuration, no flutter-tool wrapper is authored. -5. No benchmark of the Dart-side `flutter_rust_bridge` round-trip — deferred (researcher Tier B4). Measuring the FRB serialization overhead would require a separate `package:benchmark_harness` setup on the Flutter side and a synthetic Dart harness; the Rust-side bench in this SDD unit does not exercise that path. - -§11 — Verification matrix (forward-allocation, not authoritative). - -1. The new SDD unit traces to suggested SWE.4 verification IDs `SWE4-UV-058` through `SWE4-UV-062` covering the five §3 bench functions (`bench_capture_alloc_count`, `bench_capture_callback_wall_clock`, `bench_opus_encode_latency`, `bench_opus_decode_latency`, `bench_resampler_throughput`). These IDs are SUGGESTED forward allocations only; verification-engineer authors the actual SWE.4 entries in a follow-up dispatch per the SAD-090 verification-method field (CI Dry Run + Inspection). The SDD does not author SWE.4 entries. -2. Verification method per SAD-088 / SAD-089 / SAD-090 / SAD-091: Inspection of the bench-file structure and YAML structure against this SDD unit; Test (manual local `cargo bench --bench …` invocation) for the §3 bench functions; CI Dry Run (manual dispatch of `bench-baseline-update.yml`) for the §7 baseline-update path; PR-comment-posting validation via the §6 step 9 sentinel-marker round-trip on a synthetic PR. - -Notes: - -- This is a forward-looking SDD unit. The bench files, the Cargo.toml additions, the two workflow YAML files, the `emit_baseline.rs` / `compare_baseline.rs` binaries, and the initial seed of `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` are NEW implementation work for a builder agent. The seed baseline file is generated by manually dispatching `bench-baseline-update.yml` once after the builder lands the rest of the unit; that first dispatch is the bootstrap that the §6 step 9 short-circuit branch will then no longer take on subsequent PR runs. -- The `tsclientlib::AudioHandler::fill_buffer` decode-side bench was explicitly NOT selected as the canonical `opus_decode_latency` target (see §3 item 4 rationale). A future SDD revision may add `audio_handler_fill_buffer_latency` as a separate composite-call metric without modifying the canonical Opus codec metric. - -### Channel Join Pending-State Detailed Design (SDD-121) - -**SDD-121**: `chanora_state::channel_join` shall own the single deterministic reducer for user-initiated channel-join pending state, authoritative current-channel membership, and reconnect/snapshot reconciliation. Flutter and `chanora_bridge` shall send join/leave intent and render the reducer output only; neither layer shall create, overwrite, or finalize authoritative current-channel membership. - -- Status: Draft -- Type: Software Detailed Design Item -- Stage: P0 / MVP -- Software unit: `chanora_state::channel_join` reducer, `chanora_protocol::adapter` join/move command reporting, `chanora_bridge` command/event DTOs, Flutter channel tree / voice view models -- Source SAD: SAD-092, SAD-093, SAD-094, SAD-095, SAD-096 -- Upstream software requirements are traced only through SAD coverage; SDD-121 shall not directly source or enumerate SRS identifiers. -- Cross-trace SDD: SDD-020 (`ChanoraChannelTree` join intent callbacks), SDD-094 (`voice_join` / `voice_leave` lifecycle bridge naming), SDD-097 (`ChanoraVoiceBar` current-channel rendering) -- Verification method: Unit Test (reducer transition table), Integration Test (bridge + protocol adapter seams), Widget Test (pending visual state), Fault-Injection Test (timeout/reconnect/stale outcome) - -Implementation requirements: - -1. Concrete Rust module/API surface owned by `chanora_state::channel_join`: - - The crate root shall expose `pub mod channel_join;` and shall not hide join-pending state in `chanora_core` or Flutter-local models. - - Type aliases/newtypes shall be declared in the module, or imported from an existing shared state-id module if one exists at implementation time: `ChannelId`, `ConnectionEpoch`, `JoinGeneration`, `JoinRequestId`, and `LeaveRequestId`. If existing repository types already define channel/request identifiers, the module shall use those concrete types rather than invent parallel identifiers; otherwise minimal `#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]` newtypes are authorized for the reducer seam. - - `AuthoritativeMembership` shall contain `current_channel: Option` and `confirmed_epoch: ConnectionEpoch`. `None` represents no confirmed voice-channel membership. - - `JoinPending` shall contain `target_channel: ChannelId`, `previous_confirmed_channel: Option`, `request_id: Option`, `generation: JoinGeneration`, `started_at: Instant`, and `connection_epoch: ConnectionEpoch`. - - `ChannelJoinState` shall contain `authoritative: AuthoritativeMembership`, `pending: Option`, `sync_state: ChannelJoinSyncState`, and `next_generation: JoinGeneration`. - - `ChannelJoinSyncState` shall be `Ready` or `Synchronizing { reason: SyncReason, epoch: ConnectionEpoch }`; `SyncReason` shall include `InitialSnapshot` and `Reconnect`. - - `JoinOutcomeKey` shall contain `connection_epoch: ConnectionEpoch`, `generation: JoinGeneration`, and `request_id: Option`. `request_id: None` is valid only before command-send acceptance; protocol success/failure/timeout outcomes shall carry `Some(request_id)`. `JoinRequestId` shall be unique within a connection epoch. The reducer shall treat `(connection_epoch, generation, request_id)` as the outcome-correlation key. Generation shall increment for every user join request, pending-canceling leave request, reconnect epoch change, and fresh snapshot reconciliation. - - `LeaveOutcomeKey` shall contain `connection_epoch: ConnectionEpoch`, `generation: JoinGeneration`, and `request_id: LeaveRequestId`. `LeaveRequestId` shall be unique within a connection epoch. Leave command success/failure/timeout events shall carry this key; it correlates command lifecycle only and shall not be treated as authoritative membership evidence. - - `ChannelJoinProjection` shall be the only reducer view-model shape consumed by core/bridge mapping. It shall contain `current_channel: Option`, `pending_target: Option`, `pending_since: Option`, `pending_generation: Option`, `can_join: bool`, `can_leave: bool`, `sync_state: ChannelJoinSyncState`, and `last_join_error: Option`. Bridge DTOs may convert `pending_since` to elapsed milliseconds or a timestamp but shall preserve the same semantics. -2. Concrete reducer event, action, outcome, and function signatures: - - `ChannelJoinEvent` variants shall be: `UserJoinRequested { target_channel: ChannelId, now: Instant }`; `JoinCommandAccepted { generation: JoinGeneration, request_id: JoinRequestId }`; `JoinCommandRejectedBeforeSend { generation: JoinGeneration, error: JoinFailureKind }`; `ProtocolJoinSucceeded { key: JoinOutcomeKey }`; `ProtocolJoinFailed { key: JoinOutcomeKey, failure: JoinFailureKind }`; `JoinTimeout { key: JoinOutcomeKey, now: Instant }`; `AuthoritativeSelfMove { channel: Option, epoch: ConnectionEpoch, source: AuthoritativeSource }`; `UserLeaveRequested { now: Instant }`; `LeaveCommandAccepted { generation: JoinGeneration, request_id: LeaveRequestId }`; `ProtocolLeaveSucceeded { key: LeaveOutcomeKey }`; `ProtocolLeaveFailed { key: LeaveOutcomeKey, failure: JoinFailureKind }`; `LeaveTimeout { key: LeaveOutcomeKey, now: Instant }`; `ReconnectStarted { new_epoch: ConnectionEpoch, now: Instant }`; and `SnapshotReady { current_channel: Option, epoch: ConnectionEpoch, now: Instant }`. - - `AuthoritativeSource` shall include `LiveDelta` and `Snapshot`. - - `ChannelJoinAction` variants shall be: `SendJoinCommand { target_channel: ChannelId, generation: JoinGeneration, epoch: ConnectionEpoch }`; `StartJoinTimeout { key: JoinOutcomeKey, started_at: Instant }`; `CancelJoinTimeout { key: JoinOutcomeKey }`; `SendLeaveCommand { generation: JoinGeneration, epoch: ConnectionEpoch }`; `StartLeaveTimeout { key: LeaveOutcomeKey, started_at: Instant }`; `CancelLeaveTimeout { key: LeaveOutcomeKey }`; `PublishProjection(ChannelJoinProjection)`; and `EmitDiagnostic { key: JoinDiagnosticKey, code: Option }`. `SendLeaveCommand` deliberately carries no target `ChannelId`; any implementation that requires a dummy or synthetic channel id is non-conformant. - - `JoinReduceStatus` shall be `Accepted`, `CoalescedSameTarget`, `Rejected(JoinIntentRejected)`, `StaleOutcomeIgnored`, `Confirmed`, `Failed(JoinFailureKind)`, `TimedOut`, `SupersededByLeave`, `LeaveCommandAccepted`, `LeaveCommandCompleted`, `LeaveCommandFailed(JoinFailureKind)`, `LeaveTimedOut`, or `ReconciledBySnapshot`. - - `JoinIntentRejected` shall include `JoinAlreadyPendingDifferentTarget` and `CannotJoinWhileSynchronizing`. - - `JoinFailureKind` shall include `Denied`, `Network`, `Protocol`, `Timeout`, and `Unknown`. - - `JoinErrorCode` shall include stable names required by bridge/UI mapping: `DuplicateSameTargetCoalesced`, `JoinAlreadyPendingDifferentTarget`, `JoinDenied`, `JoinProtocolFailure`, `JoinNetworkFailure`, `JoinTimeout`, `JoinSupersededByLeave`, `JoinStaleOutcomeIgnored`, `JoinReconciledDifferentChannel`, `JoinCommandRejectedBeforeSend`, `JoinCannotStartWhileSynchronizing`, `LeaveProtocolFailure`, `LeaveNetworkFailure`, `LeaveTimeout`, `LeaveStaleOutcomeIgnored`, and `LeaveCommandRejectedBeforeSend`. - - Reducer signatures shall be implementation-compatible with: `ChannelJoinState::new(epoch: ConnectionEpoch) -> ChannelJoinState`; `fn reduce(state: &mut ChannelJoinState, event: ChannelJoinEvent) -> ChannelJoinReduction`; `fn project(state: &ChannelJoinState) -> ChannelJoinProjection`; and `struct ChannelJoinReduction { status: JoinReduceStatus, projection: ChannelJoinProjection, actions: Vec }`. The reducer shall be deterministic for a given state/event; all wall-clock values enter through event `now` or `started_at` fields, not through hidden calls inside the reducer. - - `StaleJoinOutcome` shall not be accepted from outside the reducer; it is the reducer's diagnostic classification when an incoming success/failure/timeout key does not match the active pending key. -3. User join request behavior: - - If no join is pending, `UserJoinRequested` shall create `JoinPending` with the target channel, the current `authoritative.current_channel` as `previous_confirmed_channel`, a new generation, `started_at` from the event `now`, and no request id until the protocol command is accepted for send. The emitted actions shall include `PublishProjection(project(state))` immediately followed by `SendJoinCommand { target_channel, generation, epoch }`; the owning runtime shall publish the pending projection before starting protocol I/O so Flutter can render the non-authoritative pending target during the send attempt. - - `JoinCommandAccepted` shall attach the protocol request id to the active pending entry only when its generation matches the active pending generation, then emit `StartJoinTimeout { key: JoinOutcomeKey { connection_epoch, generation, request_id: Some(request_id) }, started_at }` and `PublishProjection(project(state))`. If the command-send path fails before a request id exists, `JoinCommandRejectedBeforeSend` shall clear pending, retain `previous_confirmed_channel` as authoritative, and publish the resulting projection. - - Duplicate same-target `UserJoinRequested` while an active pending entry has the same `target_channel` shall coalesce: no new protocol command, generation, timeout, or diagnostic error shall be produced. The reducer shall return the current pending view state and may emit a sanitized `join_duplicate_coalesced` diagnostic. - - Different-target `UserJoinRequested` while pending shall be rejected/serialized for P0: keep the existing pending entry, emit no new protocol command, and return `JoinIntentRejected::JoinAlreadyPendingDifferentTarget`. Flutter shall keep the original target marked pending and shall surface a user-safe "finish or cancel the current join first" message. Automatic switch/cancel-on-new-target is deliberately not selected in this revision. -4. Confirmation behavior: - - Authoritative membership changes only on `AuthoritativeSelfMove` or `SnapshotReady`. `ProtocolJoinSucceeded` is not by itself final membership; it clears neither pending nor `previous_confirmed_channel` unless paired with a matching authoritative self-move/snapshot confirmation. This prevents optimistic finalization when the protocol command returns before the server delta is reduced. - - If `AuthoritativeSelfMove { channel: Some(target) }` or `SnapshotReady { current_channel: Some(target) }` matches the active pending `target_channel` in the same connection epoch, the reducer shall set `authoritative.current_channel = Some(target)`, clear `pending`, and emit `JoinViewState::Confirmed { current_channel: target }` plus a sanitized `join_confirmed` diagnostic. - - If the server authoritatively moves the user to a different channel while a join is pending, the reducer shall accept the authoritative channel as current, clear pending as superseded, and emit `JoinViewState::FailedOrSuperseded { prior_or_server_channel }` with diagnostic key `join_reconciled_different_channel`. The pending target shall never become current unless it is the authoritative value. -5. Failure and timeout behavior: - - `ProtocolJoinFailed` with a matching active key shall clear `pending`, leave `authoritative.current_channel` equal to `previous_confirmed_channel`, and return `JoinFailure::Denied | Network | Protocol | Unknown` mapped to a user-safe localized message. Raw protocol payloads, passwords, server addresses, and permission tokens shall not enter diagnostics. - - `JoinTimeout` with a matching active key shall clear `pending`, preserve `previous_confirmed_channel` as authoritative, and emit `JoinFailure::Timeout`. The timeout duration is configuration-owned by Rust Core; the SDD requires a deterministic timer seam but does not mandate a product-visible duration. - - Success, failure, or timeout with a non-matching `(connection_epoch, generation, request_id)` shall be ignored for state mutation and shall emit only sanitized diagnostic key `join_stale_outcome_ignored` with the stale/current generations and no raw protocol payload. -6. Leave/switch race behavior: - - `UserLeaveRequested` while no join is pending shall emit `SendLeaveCommand { generation, epoch }` when `authoritative.current_channel` is `Some(_)`. The action is a current-client leave/move-out request with no target channel and no channel password. If `authoritative.current_channel` is already `None`, the reducer shall publish the unchanged projection and shall not emit a protocol command. - - `UserLeaveRequested` while a join is pending shall supersede the pending join locally: increment generation, clear pending view state, emit a best-effort cancellation diagnostic `join_pending_superseded_by_leave`, and dispatch `SendLeaveCommand { generation, epoch }` only if the current authoritative channel is `Some(_)`. The reducer shall ignore later matching command success/failure for the superseded join as stale. If a live authoritative self-move to the former pending target arrives before the leave is confirmed, the reducer shall accept that server-authoritative current channel and the in-flight leave shall then be responsible for moving to `None` or the server-provided post-leave state. - - `LeaveCommandAccepted` shall attach a `LeaveOutcomeKey` for timeout and stale-outcome correlation and may emit `StartLeaveTimeout`; it shall not mutate `authoritative.current_channel` or clear `current_channel` in the projection. `ProtocolLeaveSucceeded` with a matching key records command completion only and may cancel the leave timeout and emit a sanitized diagnostic; it shall not change authoritative membership. `ProtocolLeaveFailed` with a matching key and `LeaveTimeout` with a matching key shall leave `authoritative.current_channel` unchanged, set `last_join_error` to the corresponding leave-safe code, and publish the unchanged authoritative projection. Stale leave success/failure/timeout keys shall be ignored for state mutation and may emit `leave_stale_outcome_ignored`. - - Authoritative leave completion is represented only by `AuthoritativeSelfMove { channel: None, source: LiveDelta }`, `AuthoritativeSelfMove { channel: Some(server_channel), source: LiveDelta }`, or `SnapshotReady { current_channel: None | Some(server_channel), ... }`. These events update the projection to `current_channel = None` or to the server-provided replacement channel. Command acknowledgement is never an authoritative membership confirmation. - - Different-target switch while pending is not a leave; it follows item 3 rejection semantics. A future SDD may define explicit "cancel then join new target" behavior, but P0 serializes it. -7. Reconnect and snapshot reconciliation: - - `ReconnectStarted` shall move `sync_state` to `Synchronizing`, increment the connection epoch/generation, and mark any active pending entry as non-authoritative and stale. The UI may continue to display the last confirmed `authoritative.current_channel` as "last known" but shall disable channel actions requiring a ready connection. - - `SnapshotReady` shall replace `authoritative.current_channel` with the snapshot's self-channel value for that epoch. If the snapshot channel equals the former pending target, the result is confirmed by snapshot; otherwise the pending target is cleared and the snapshot value wins. If the snapshot contains no current channel, authoritative current becomes `None`. - - Live deltas from an old epoch shall be ignored for membership mutation after reconnect epoch advancement; live deltas in the new epoch shall be reduced in arrival order after the snapshot-ready boundary. -8. Bridge/core/protocol integration seams: - - On bridge `voice_join(channel_id)` / `join_channel(target_channel)` intent, `chanora_core` shall enqueue `ChannelJoinEvent::UserJoinRequested { target_channel, now }` into the per-connection State Sync reducer task before sending any protocol command. If the reduction returns `SendJoinCommand`, core shall call the existing protocol join/move command seam and then feed either `JoinCommandAccepted { generation, request_id }` or `JoinCommandRejectedBeforeSend { generation, error }` back through the same reducer queue. Duplicate same-target reductions return command-accepted/coalesced semantics to the bridge without sending a second protocol command. Different-target pending reductions map to `JoinIntentRejected::JoinAlreadyPendingDifferentTarget`. - - Phase B request-id allocation rule: the protocol adapter shall pass through a transport request id when the underlying protocol exposes one. If the adapter accepts/sends a join command but exposes no transport request id, `chanora_core` shall allocate a core-local `JoinRequestId` in the protocol side-effect handler after the reducer action has been captured and the session-state lock has been released, immediately before enqueuing `JoinCommandAccepted`. A monotonically incremented unsigned counter scoped to the current `ConnectionEpoch` is an approved substitute for P0; the counter shall reset or be namespaced on epoch change and shall never be reused within one epoch. The allocated id shall be written only through `JoinCommandAccepted { generation, request_id }`; all subsequent protocol success/failure callbacks and timeout tasks created for that accepted command shall carry `JoinOutcomeKey { connection_epoch: epoch, generation, request_id: Some(request_id) }`. Outcomes without a matching accepted id, generation, and epoch shall reduce to stale/no-op behavior. - - On protocol command result, the Protocol Adapter shall report command lifecycle separately from authoritative membership: command accepted/sent, command success, command failure. `ProtocolJoinSucceeded { key }` confirms only that the command completed; it shall not update `authoritative.current_channel`. `ProtocolJoinFailed { key, failure }` and `JoinTimeout { key, now }` may clear pending only when the key matches the active pending entry. - - On authoritative self move or live membership delta, `chanora_core` / State Sync shall enqueue `AuthoritativeSelfMove { channel, epoch, source: LiveDelta }`. On initial or reconnect snapshot completion, it shall enqueue `SnapshotReady { current_channel, epoch, now }`. These are the only events that may finalize or replace `authoritative.current_channel`. - - On reconnect start, `chanora_core` shall enqueue `ReconnectStarted { new_epoch, now }` before accepting live deltas for the new connection. Protocol outcomes and live deltas carrying older epochs shall be reduced as stale/no-op for membership mutation. - - Protocol Adapter shall expose an explicit leave/move-out API seam. Preferred public Rust signature, compatible with the existing `ProtocolClient` async method style, is `pub async fn leave_channel(&self) -> Result<(), ProtocolError>`; `move_out_of_channel(&self)` is an acceptable equivalent if used consistently. The corresponding internal request shape shall have no `channel_id` field, for example `Request::LeaveChannel { reply: oneshot::Sender> }`. The seam may internally call the protocol library's native leave/current-client-move-out primitive; if the protocol library represents leave with an optional target, that mapping is owned only by `chanora_protocol::adapter` and shall not leak to Rust Core, Bridge, Flutter, or the reducer. - - On bridge `voice_leave()` / `leave_channel()` intent, `chanora_core` shall enqueue `UserLeaveRequested { now }`. If the returned action includes `SendLeaveCommand`, core shall execute that action through the explicit Protocol Adapter leave/move-out seam (`leave_channel` / `move_out_of_channel` or equivalent); suppressing it, treating it as projection-only, or translating it into `move_to_channel()` is not permitted. Leave supersedes active pending join locally but shall not clear or finalize authoritative current membership until an authoritative self move, snapshot, or projection produced from such authoritative confirmation establishes `None` or a different server-provided value. - - Leave command result mapping shall mirror the join command lifecycle separation. If the adapter accepts/sends the command and exposes no transport request id, `chanora_core` shall allocate a core-local `LeaveRequestId` scoped to the `ConnectionEpoch` after releasing the session/state lock and before enqueuing `LeaveCommandAccepted`. Adapter success maps to `ProtocolLeaveSucceeded { key }`; adapter denial/protocol/network errors map to `ProtocolLeaveFailed { key, failure }`; timer expiry maps to `LeaveTimeout { key, now }`. All three outcome events shall preserve the previous authoritative `current_channel` unless a live delta or snapshot separately confirms `None` or a server-provided replacement. - - Bridge command handlers shall return only command-acceptance or immediate validation/rejection DTOs derived from `JoinReduceStatus`/`JoinErrorCode`. The bridge shall not mutate `current_channel` and shall not transform a successful command send into confirmed membership. - - The bridge event stream shall expose the reducer projection as a DTO equivalent to `ChannelJoinProjection`: `current_channel`, `pending_target`, `pending_since_ms` or timestamp, `can_join`, `can_leave`, `sync_state`, and optional sanitized `last_join_error`. Existing `BridgeEvent::VoiceState` / server-view events may carry these fields directly or by a nested `ChannelJoinState` DTO, but there shall be exactly one authoritative projection source. - - Flutter shall render `pending_target` as non-authoritative pending UI and shall continue to render `current_channel` from the projection as the last confirmed channel. Flutter may cache the projection for rebuild performance but shall not locally set `current_channel` in response to a tap, protocol success DTO, or timer. - - Flutter and bridge DTOs shall not carry, infer, or synthesize a leave target channel id. A leave/move-out UI action is intent-only; the only post-intent membership values Flutter may render are the reducer projection's unchanged prior `current_channel` or a later reducer projection derived from authoritative live delta/snapshot data. -9. UI/view-model behavior: - - `current_channel` displayed in `ChanoraVoiceBar`, channel tree selection, and voice status shall remain the last confirmed authoritative channel until item 4 or item 7 confirms a new authoritative value. - - The pending target may be rendered in `ChanoraChannelTree` as non-authoritative visual feedback (for example spinner, "joining", disabled row action). This visual state shall be derived only from `pending_target` and shall not move the local client row into that channel. - - While `pending_target` is present or `sync_state == Synchronizing`, Flutter shall disable or serialize unsafe channel actions: joining a different target, repeated leave/join churn, and UI operations that assume the pending target is current. Duplicate same-target taps are allowed but coalesced visually. - - Flutter shall not write `current_channel` in local state except as a cached rendering of the reducer-provided authoritative value. -10. Diagnostics and error codes: - - Reducer-visible error/result codes shall include the stable `JoinErrorCode` values from item 2: `DuplicateSameTargetCoalesced`, `JoinAlreadyPendingDifferentTarget`, `JoinDenied`, `JoinProtocolFailure`, `JoinNetworkFailure`, `JoinTimeout`, `JoinSupersededByLeave`, `JoinStaleOutcomeIgnored`, `JoinReconciledDifferentChannel`, `JoinCommandRejectedBeforeSend`, `JoinCannotStartWhileSynchronizing`, `LeaveProtocolFailure`, `LeaveNetworkFailure`, `LeaveTimeout`, `LeaveStaleOutcomeIgnored`, and `LeaveCommandRejectedBeforeSend`. - - Diagnostic event keys shall include `join_requested`, `join_command_sent`, `join_duplicate_coalesced`, `join_confirmed`, `join_failed`, `join_timeout`, `join_stale_outcome_ignored`, `join_pending_superseded_by_leave`, `join_reconnect_synchronizing`, `join_snapshot_reconciled`, `leave_requested`, `leave_command_sent`, `leave_command_succeeded`, `leave_failed`, `leave_timeout`, `leave_stale_outcome_ignored`, and `leave_confirmed_by_authoritative_state`. - - Diagnostic fields are limited to sanitized channel ids, connection epoch, generation, coarse error kind, elapsed milliseconds, and outcome key. No raw protocol payload, channel password, server password, server address, user nickname, or unredacted external error string may be logged. -11. Concurrency and consistency constraints: - - All join/leave/snapshot/live-delta events for one connection shall be serialized through the State Sync reducer task. No UI isolate, bridge callback, protocol task, or audio engine task may concurrently mutate authoritative membership. - - Per-connection event ordering shall be preserved at the reducer input. Cross-connection events are ordered by `connection_epoch`; older epochs cannot mutate newer-epoch state. - - The reducer shall be pure with respect to state transition decisions: timers, protocol sends, bridge emissions, and diagnostics are returned as side-effect actions for the owning runtime to execute. - - Runtime locking rule for Phase B: reducer state mutation may be protected by the existing session/state mutex, but that mutex shall never be held across protocol I/O, timer awaits, bridge emission awaits, or other await points. The owning task shall acquire the lock, reduce the event, copy the returned status/projection/action list and any correlation fields needed by side effects, release the lock, publish projection/execute protocol actions/timers, and then enqueue outcome events (`JoinCommandAccepted`, `JoinCommandRejectedBeforeSend`, `ProtocolJoinSucceeded`, `ProtocolJoinFailed`, `JoinTimeout`, `LeaveCommandAccepted`, `ProtocolLeaveSucceeded`, `ProtocolLeaveFailed`, `LeaveTimeout`) back through the reducer queue. Each outcome is reduced under the lock using the stored `JoinOutcomeKey` or `LeaveOutcomeKey` plus generation/epoch; no side effect may mutate `ChannelJoinState` directly. -12. Verification implications: - - SWE.4 unit cases shall cover the full reducer transition table: no-current/current initial states; normal join; same-target duplicate coalescing; different-target rejection; denied join; timeout; stale success/failure/timeout; authoritative move to target; authoritative move to different channel; leave while pending; leave command accepted/succeeded/failed/timed out without authoritative clearing; stale leave outcomes; authoritative leave confirmed to `None`; authoritative leave reconciled to a server-provided replacement channel; reconnect followed by target snapshot, different-channel snapshot, and no-current snapshot. - - SWE.5 integration cases shall prove Bridge intent-only behavior and Protocol Adapter separation of command success from authoritative membership deltas. SWE.5 shall include a leave/move-out end-to-end seam test proving `voice_leave()` / `leave_channel()` produces exactly one adapter `leave_channel` / `move_out_of_channel` call, produces no `move_to_channel` call with a synthetic target, leaves `current_channel` unchanged after command success/failure/timeout, and updates `current_channel` only after a live self-move/client-leave delta or reconciled snapshot. - - SWE.6 software qualification cases shall prove UI-visible behavior: prior current channel remains visible while joining, pending target is visually marked but not authoritative, unsafe actions are disabled/serialized, failure/timeout preserves prior current channel, and reconnect/snapshot reconciliation clears stale pending state. -13. Authorized implementation phasing: - - Phase A — reducer scaffolding and unit tests: add `chanora_state::channel_join` module, concrete data structures/enums, `reduce`/`project` API, deterministic timer/request-key seams, and SWE.4 reducer tests for same-target coalescing, different-target rejection, stale outcomes, leave supersession, leave outcome non-authoritativeness, and snapshot reconciliation. Phase A may have no externally visible behavior change except compile-time availability of the reducer seam. - - Phase B — core/bridge/Flutter wiring: route existing core join/leave intent and protocol result paths through the reducer queue; add the explicit Protocol Adapter leave/move-out seam; publish `ChannelJoinProjection` through bridge DTO/event mapping; update Flutter view models to render pending target from the projection while preserving authoritative current channel until reducer confirmation. - - Phase C — verification hardening: add SWE.5 integration coverage for bridge intent-only behavior, protocol-success-not-authoritative behavior, explicit leave/move-out seam use with no synthetic channel id, reconnect/snapshot clearing, and timeout/stale-outcome races; add widget coverage for pending target rendering and disabled/serialized unsafe actions. - -## 11. Updated SAD-to-SDD Coverage Matrix - -| SAD Range | SDD Coverage | -|---|---| -| SAD-001 through SAD-060 | Covered by inherited SDD baseline `SDD-001` through `SDD-070` | -| SAD-061 through SAD-070 | Covered by `SDD-071` through `SDD-080` | -| SAD-061 through SAD-070 | Covered by `SDD-098` through `SDD-104` (iOS platform additions) | -| SAD-063, SAD-081, SAD-084, SAD-085, SAD-086 | Covered by `SDD-105` through `SDD-109` (Android P0 additions; SDD-110 re-anchored to SAD-071 / SAD-076 in v0.9.11 because the PTT-capability pin is a PTT-architecture concept, not a foreground-service-allocation concept) | -| SAD-071, SAD-076 | Covered by `SDD-110` (Android pins to `FocusedPttBackend` / `L0Focused`; capability badge text feed via `BridgeEvent::PttCapability`). Cross-trace: SDD-088 (`PttController`), SDD-091 (`PttCapabilityBadge`), SDD-031 (`LocalizationService`). | -| SAD-077, SAD-081, SAD-084, SAD-085, SAD-086 | Covered by `SDD-111` through `SDD-116` (Android voice audio backend — SRS-210..SRS-215). No dedicated SAD anchor exists for the platform-abstracted mobile-voice-audio-backend trait itself; SDD-111 is sourced from SAD-077 / SAD-081 pending a SAD revision that adds a dedicated allocation item. | -| SAD-063 | Covered by `SDD-118` (Android `chanora_bridge` cdylib build automation — Gradle + `cargo-ndk` + per-ABI jniLibs staging). Cross-trace: SDD-073, SDD-105, SDD-109. | -| SAD-061, SAD-062, SAD-087 | Covered by `SDD-119` (iOS / macOS `chanora_bridge` cdylib build automation — CocoaPods podspec + `cargo` + `lipo` + framework-layout shell, back-fill of existing code). Source SAD allocation: iOS half anchored to SAD-061 (iOS runtime) and SAD-062 (App Store / packaging); macOS half anchored to SAD-087 (macOS runtime baseline — deployment target isolation, universal-binary `lipo` packaging, `.framework` `Versions/A` layout, hand-rolled CocoaPods podspec automation), authored in SAD v0.9.7 to close the macOS-runtime anchor gap that this SDD unit had previously bridged by parallelism from SAD-061 / SAD-062. SDD-117 remains reserved-but-unauthored for the deferred `ios_voice_unit` trait back-fill noted by SDD-111. | -| SAD-088, SAD-089, SAD-090, SAD-091 | Covered by `SDD-120` (realtime-audio benchmark harness and advisory CI infrastructure — criterion-based bench harness, dhat-backed heap-allocation-count metric, SAD-089 baseline JSON post-processor, SAD-090 advisory PR-comment workflow with merge-base baseline read, SAD-091 `workflow_dispatch`-only baseline-update workflow that opens a PR rather than direct-pushing; simpler-form yellow-marker realization treats the SAD-089 baseline as the comparator for both red/green tolerance evaluation and yellow trending detection). Cross-trace: SDD-094 (the bench seam exercises the same `chanora_audio::engine` capture path whose lifecycle is specified by SDD-094). Suggested SWE.4 forward allocation: SWE4-UV-058 through SWE4-UV-062 (verification-engineer follow-up; not authored by this SDD unit). | -| SAD-092, SAD-093, SAD-094, SAD-095, SAD-096 | Covered by `SDD-121` (channel join pending-state reducer — Rust Core / State Sync authoritative current-channel ownership, Flutter pending-target-only rendering, failure/timeout preservation of previous authoritative channel, explicit Protocol Adapter leave/move-out seam with no synthetic channel id, leave command success/failure/timeout non-authoritative outcome handling, deterministic duplicate/different-target/leave-race/stale-outcome/reconnect-snapshot reconciliation). Upstream software requirements remain traced through SAD coverage only. Suggested SWE.4/SWE.5/SWE.6 derivation surfaces are listed in SDD-121 item 12. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate effective date and preserved layer-specific traceability. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT detailed design SDD-081 through SDD-092: `DesktopPttBackend` trait, `PttCapabilityLevel` enum, Windows Raw-Input + low-level-hook + Focused implementations, macOS event-tap + Focused implementations, Linux GNOME-Wayland portal + Focused implementations, `PttController`, `AudioTransmitGate`, `PttSanitizer` layer, `PttCapabilityBadge` widget, `MissedKeyUpWatchdog` task. Strict sourcing (`SDD -> SAD` only) preserved. | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-15 | Added `SDD-093` covering `SAD-080`. `SDD-093` fixes the `PttInputClass` enum surface, the cross-backend rebind contract for `MouseSideButton`, and the Flutter side-button capture path against the `PointerEvent.buttons` bitmask. Strict layered sourcing preserved (`SDD -> SAD` only). | - - -## Baseline Candidate 0.9.5 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added v1 audio + PTT lifecycle detailed design SDD-094 through SDD-097 sourced from SAD-081..083: bridge surface drops `start_audio` / `stop_audio` and exposes `chanora_bridge::voice::voice_join` / `voice_leave` with idempotent `AudioEngine::ensure_running` and `shutdown_if_idle`, `chanora_audio::TransmitMode` as `#[repr(u8)]` enum persisted via `chanora_storage::IdentityStore::{set,get}_transmit_mode` and mirrored across FRB as `BridgeTransmitMode`, `chanora_audio::release_tail::ReleaseTailTimer` as a tokio-task-owning adapter on the watch handle (no `unsafe`, no mutex; configurable 0–500 ms via `release_tail_ms`), and the new `apps/chanora_flutter/lib/widgets/voice_bar.dart` + `voice_settings.dart` surfaces replacing the legacy `_AudioControls` widget. Strict layered sourcing preserved (`SDD -> SAD` only). | - -## Baseline Candidate 0.9.6 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.6 | 2026-05-17 | Added iOS P0 platform SDD-098 through SDD-104 to close traceability gaps identified in the P0 audit: `IOSAudioSessionConfig` (AVAudioSession `.playAndRecord` configuration), `IOSPermissionRequester` (microphone permission flow), `IOSRouteChangeHandler` (route change observation and Rust bridge call), `IOSInterruptionRecovery` (audio interruption handling), `Info.plist` / `VPIOUnit` (background audio), `FocusedPttBackend` only (iOS no global PTT), and `VoiceProcessingIO` (hardware AEC/AGC/NS always engaged). Sourced from SAD-061, SAD-064, SAD-065, SAD-071. Strict layered sourcing preserved (`SDD -> SAD` only). | - -## Baseline Candidate 0.9.7 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.7 | 2026-05-17 | Added design notes to SDD-101: (1) `shouldResume == false` behavior for iOS audio interruption recovery — VPIO remains paused, `BridgeEvent_InterruptionState` carries `shouldResume: false` to Flutter, snackbar surfaces the interruption, manual rejoin required; (2) iOS audio lifecycle interleaving concern — handlers are individually serialized but lack explicit lifecycle state, route-change-during-interruption risk is mitigated by iOS main-thread serialization for P0. | - -## Baseline Candidate 0.9.9 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.9 | 2026-05-18 | Added Android voice audio backend detailed design SDD-111 through SDD-116 sourced from SRS-210..SRS-215 (Wave 2A SRS landing) and SAD-077 / SAD-081 / SAD-084 / SAD-085 / SAD-086. SDD-111 (`AndroidVoiceAudioBackend` — `MobileVoiceAudioBackend` Rust trait, `android_voice_unit` module, `oboe-rs 0.6.x` primary with direct `ndk::audio` contingency, desktop `cpal` unaffected; iOS trait back-fill deferred to candidate SDD-117). SDD-112 (`AndroidVoiceStreamConfig` — 48 kHz mono, `framesPerBurst` query, requested `LowLatency` performance mode with achieved-mode recording, output `VoiceCommunication` usage + `Speech` content type, input preset `VoiceCommunication` → `VoicePerformance` → `Generic` retry ladder, `Exclusive` → `Shared` sharing-mode fallback, error/disconnect callback enqueues to engine retry path). SDD-113 (`AndroidHardwareAudioEffects` — session-id-bound `AcousticEchoCanceler` / `NoiseSuppressor` / `AutomaticGainControl` engagement via JNI with per-effect software fallback through the existing engine path; closes the prior silent no-op at `crates/chanora_audio/src/engine.rs:316-323`). SDD-114 (`AndroidVoiceManifestRequirements` — back-fill of Wave 2B-1 manifest declarations: INTERNET, RECORD_AUDIO, FOREGROUND_SERVICE, FOREGROUND_SERVICE_MICROPHONE, POST_NOTIFICATIONS, MODIFY_AUDIO_SETTINGS, BLUETOOTH_CONNECT; ``; CI manifest assertion). SDD-115 (`AndroidVoiceLifecycleSequencing` — forward order Dart→bridge→service start→stream open→mode engage→effect bind→start; reverse order on leave; route-change observation via `ACTION_AUDIO_BECOMING_NOISY` + `AudioDeviceCallback`; audio-focus loss handling per `TRANSIENT_CAN_DUCK` / `TRANSIENT` / `LOSS` semantics; Bluetooth SCO connection-state-change P0 stance "no crash" with full SCO route correctness deferred to P1; Oboe callback threading rules). SDD-116 (`AndroidVoiceVerificationMatrix` — API 28 / 31 / 34 minimum, Pixel + Samsung minimum, per-device observation contract for `getPerformanceMode` / `getSharingMode` / `getInputPreset` / effect availability + create success / glass-to-glass latency measurement / ≥10 min screen-off foreground-service longevity; gate G-A5 / RISK-AUDIO-MOBILE-001 closure rule; cross-link to SWE4-UV-040..046 / SWE5-IV-016..020 / SWE6-SV-018..024). Strict layered sourcing preserved (`SDD → SAD`); SRS traces recorded on each unit per the SRS→SAD→SDD chain. | - -## Baseline Candidate 0.9.8 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.8 | 2026-05-18 | Reconciled Android P0 detailed design after Wave 1.5 SysRS / SRS / SAD propagation. SDD-073 (`AndroidBuildConfig`) updated in place (ID preserved) to record `minSdk = 28` per DEC-004 (superseding the prior API 24 baseline), `targetSdk` policy bound to SRS-188 Google Play floor, NDK ABI set pinned to `arm64-v8a / armeabi-v7a / x86_64`, release-signing CI assertion, R8/ProGuard stance, and AAB output per SRS-119 (delegating packaging pipeline detail to SDD-109). SDD-028 (`BackIntentService`) expanded from a one-line stub to an implementable specification covering API 33+ `OnBackInvokedCallback` registration, pre-33 `OnBackPressedDispatcher` fallback, deterministic route-pop ordering, and edge cases (root route → exit candidate, modal/dialog → close-only, active PTT → ignore). Added six new Android P0 SDD units: SDD-105 (`AndroidJniBootstrap` — back-fill for `JNI_OnLoad` / `initChanoraContext` / library-load location, sourced from SAD-081 / SAD-086); SDD-106 (`AndroidPermissionRequester` — RECORD_AUDIO runtime flow with listen-only fallback, settings deep-link for permanent denial, revocation handling, BridgeEvent surface, TransmitModeSelector clamp, sourced from SAD-085); SDD-107 (`AndroidVoiceForegroundService` — service class, manifest entry, notification channel id `chanora.voice.session`, `foregroundServiceType="microphone"` on API 30+, POST_NOTIFICATIONS request on API 33+, lifecycle bound to voice_join / voice_leave / shutdown_if_idle, START_NOT_STICKY on process death, ongoing-notification re-post on dismissal, sourced from SAD-086); SDD-108 (`AndroidAudioModeController` — `setMode(MODE_IN_COMMUNICATION)` with prior-mode snapshot/restore, ref-count semantics composable for P1, JNI surface from Rust audio engine, error paths including AudioManager-unavailable fallback, sourced from SAD-084 — back-fills the v0.9.8 product-decision-register entry); SDD-109 (`AndroidAaBuildPipeline` — bundletool config, ABI splits matching SDD-073, CI signing assertion, versionCode/versionName derivation, sourced from SAD-037 / SAD-063); SDD-110 (`AndroidPttCapability` — pins Android P0 to FocusedPttBackend only, no global key hook, no accessibility-service PTT, capability badge text under `ptt.capability.android.l0`, sourced from SAD-077). Updated §11 SAD-to-SDD coverage matrix to list the new Android P0 SDD range. Strict layered sourcing preserved (`SDD -> SAD` only). | - - -## Baseline Candidate 0.9.15 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.15 | 2026-05-18 | Added realtime-audio benchmark-infrastructure detailed-design unit SDD-120 (`RealtimeAudioBenchmarkHarnessAndAdvisoryCI`) sourced from SAD-088 / SAD-089 / SAD-090 / SAD-091 (the Wave 1.5 benchmark-infrastructure software-architecture chain authored at SAD v0.9.9 from the Option B scope decision propagated through SysRS-307/308/309 → SysDes-156/157/158 → SRS-216..219). SDD-120 is a single cohesive 11-section unit specifying: §1 crate selection (`criterion = "0.5"`, `dhat = "0.3"` dev-deps, three `[[bench]]` entries and two `[[bin]]` entries in `crates/chanora_audio/Cargo.toml`); §2 bench-file layout (three files `realtime_capture.rs` / `opus_codec.rs` / `resampler.rs` plus a shared `common.rs` synthetic-input module); §3 bench function signatures with explicit warmup (100-call pre-warm into `CaptureState::ingest` at `crates/chanora_audio/src/engine.rs:1207` before 1000-call dhat measurement window; criterion default warmup for the wall-clock / encode / decode / throughput benches), with the canonical `opus_decode_latency` metric pinned to `audiopus::coder::Decoder::decode_float` directly rather than `tsclientlib::AudioHandler::fill_buffer` because the latter conflates Opus decode with jitter-buffer dequeue and PCM mix; §4 deterministic synthetic-input generation (440 Hz sine at amplitude 0.5, no RNG, byte-stable across runs); §5 JSON post-processing via a Rust binary `crates/chanora_audio/benches/emit_baseline.rs` that parses criterion's `target/criterion/.../estimates.json` files and projects them into the SRS-217 schema; §6 `.github/workflows/bench-advisory.yml` (PR + push triggers, `dtolnay/rust-toolchain@stable` + `Swatinem/rust-cache@v2` matching the existing `ci.yml` pattern, audio system deps `libasound2-dev libpulse-dev pkg-config libopus-dev`, `fetch-depth: 0` for merge-base resolution, `git show $MERGE_BASE:…/x86_64-unknown-linux-gnu.json` baseline read with a missing-baseline short-circuit, `actions/github-script@v7` PR comment with sentinel-marker de-duplication and `pull_request`-only gating, `actions/upload-artifact@v4` for push-trigger reports, always exit 0 per SRS-218 clause 4); §7 `.github/workflows/bench-baseline-update.yml` (`workflow_dispatch` only — sole writer of SAD-089 per SAD-091, `peter-evans/create-pull-request@v6` opens a PR rather than direct-pushing so baseline updates are review-gated against accidental triggering or runner pollution); §8 yellow-marker realization selecting the SAD-090-permitted simpler form where the SAD-089 baseline JSON is the comparator for both red/green tolerance evaluation and yellow trending detection (no separate run-history artifact), with the comparator algorithm (`compare_baseline.rs`) pinned: 🔴 if `delta_pct > t`, 🟡 if `0.5*t < delta_pct ≤ t`, 🟢 otherwise; zero-tolerance metrics (heap allocation, SRS-219 clause a) collapse to 🔴/🟢 only; §9 cross-traces (SDD-094 audio-engine lifecycle as the bench-seam container; explicit NOT-cross-traces to SDD-118 Android bridge build automation and SDD-076..080 PTT capability surface, both correctly out of scope); §10 deferrals preserved (no telemetry export, no hard CI gate, no multi-host bench, no IDE integration, no Dart-side `flutter_rust_bridge` bench — researcher Tier B4); §11 suggested-forward SWE.4 allocation `SWE4-UV-058` through `SWE4-UV-062` (NOT authored at this layer — verification-engineer follow-up). Updated §11 SAD-to-SDD coverage matrix with a new SAD-088..SAD-091 row mapping to SDD-120. Strict layered sourcing preserved (`SDD -> SAD` only); no SRS, SysDes, SysRS, or SAD edits performed. Recommended next agent: `builder` (Step 6 of the benchmark chain — implements the three bench files, the `common.rs` helper, the two binary post-processors, the `Cargo.toml` dev-dependency + `[[bench]]` + `[[bin]]` additions, and the two workflow YAML files; strictly per this SDD unit). | - -## Baseline Candidate 0.9.14 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.14 | 2026-05-18 | Documentation-only reconciliation of the Android voice-join lifecycle step ordering between SDD-113 item 6 and SDD-115 step list — no behavioural design content changed; the canonical ordering was already specified by SDD-113 item 6 and is already implemented by the engine code at `crates/chanora_audio/src/engine.rs:322-410` (mode engage at lines 358-381 precedes `AndroidVoiceUnit::open()` at line 399). Trigger: Wave 3 reviewer finding on commit 15d7117, which flagged that SDD-115's step list had stream open as step 4 and mode engage as step 5, contradicting SDD-113 item 6's "mode engage → stream open → effect attach" sequence. (1) SDD-115 item 1 (voice-join sequencing) step list renumbered so that mode engage is step 4 (was step 5) and stream open is step 5 (was step 4); effect attach remains step 6; `AndroidVoiceUnit::start()` remains step 7. Mode-first-ordering rationale paragraph added inline after the step list documenting why mode engagement precedes AAudio stream construction (AAudio binds routing at open time; effect attach on a stream opened under a non-voice mode is unspecified). (2) SDD-115 item 2 (voice-leave sequencing) reverse-order step list updated to mirror the forward order: streams close (step 4, formerly mode restore) now precedes mode restore (step 5, formerly stream close — wait, reverse: the new order is stop → release effects → close streams → restore mode → stop service), and the "reverse order is mandatory" note extended to cover closing streams under `MODE_IN_COMMUNICATION` before reverting the mode. (3) SDD-115 item 3 justification text updated to reference the new step numbers (step 4 mode engage before step 5 stream open before step 6 effect attach). (4) SDD-115 item 5 audio-focus request cross-reference updated from "voice-join (step 5)" to "voice-join (step 4, alongside the SDD-108 mode engage)" to track the renumbering. (5) SDD-113 item 6 extended with an explicit cross-reference to SDD-115 step ordering 4–6 and a joint-authority clause requiring future ordering amendments to update both units in the same revision. Other SDD units inspected for implicit assertion of the old ordering: SDD-107 (item containing "service start happens BEFORE setMode" at line 1354 — consistent with both old and new orderings, no change needed), SDD-108 (no stream-vs-mode ordering assertion, no change needed), SDD-111 (no lifecycle ordering language, no change needed), SDD-112 (no lifecycle ordering language, no change needed). Strict layered sourcing preserved (`SDD -> SAD` only); no SRS or SAD edits required as both upstream layers were silent on the inter-element ordering and delegated it to SDD-113 / SDD-115. Wave 3 follow-up scope (folded into this revision): (a) **SWE.4 ID allocation** — `docs/verification/swe4-unit-verification-plan.md` §12 allocates SWE4-UV-053..055 for the three `TransmitModeSelector` permission-state clamp tests (`crates/chanora_audio/src/transmit_selector.rs:343-435`, commit 635d160 — previously cited as the "SWE4-UV-026 family" placeholder) and SWE4-UV-056..057 for the two `DiagnosticExport::with_android_audio` rendering tests in `crates/chanora_diagnostics` (commit aea50a1 / commit-8 amend). (b) **SWE4-UV-040 x86 pass-criteria correction (CRITICAL)** — the prior pass-criteria string `ndk.abiFilters set equals {arm64-v8a, armeabi-v7a, x86_64, x86}` contradicted SDD-073 item 4 and SDD-118 item 3 (which both explicitly exclude 32-bit `x86`); corrected to `{arm64-v8a, armeabi-v7a, x86_64}` with explicit `x86 32-bit is out of scope` note. (c) **Cross-trace and Version-header corrections** — `android-p0-acceptance.md` TC-2 trace retargeted SAD-077 → SAD-085 (permission-requester is SAD-085, not the diagnostics PttSanitizer at SAD-077); TC-4 trace retargeted SRS-208 → SRS-195/SRS-196 (mode pin is not the PTT-capability trace); TC-6 trace retargeted SAD-085 → SAD-084 (AudioModeController is SAD-084, not the permission requester); TC-13 SWE.5 cite retargeted SWE5-IV-021 → SWE5-IV-020. Doc-Version headers refreshed across SAD (0.9.7→0.9.8), SysDes (0.9.2→0.9.7), SRS (0.9.2→0.9.8), product-decision-register (0.9.7→0.9.8), traceability-matrix (0.9.2→0.9.9), swe4-unit-verification-plan (0.9.2→0.9.14) to reflect each document's actual content baseline. (d) **Traceability-matrix §E row 8** added: governance cross-reference flagging that SDD-111 has no dedicated SAD anchor for the platform-abstracted `MobileVoiceAudioBackend` trait (engineering chain remains intact via SAD-077 / SAD-081; future SAD revision to add a dedicated allocation item). §C "Status pointer (v0.9.7+)" added noting that SDD-111..SDD-116 have since been authored and the PENDING_SDD markers above are retained for historical context only. No code changes; all corrections are documentation-only. Recommended next agent: `traceability-auditor` refresh once all Wave 3 amendments have landed. | - - - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.13 | 2026-05-18 | Documentation-cleanup amendment pass on SDD-105, SDD-118, SDD-119 — no behavioural design content changed; corrections only. (1) SDD-105 Back-fill notes corrected: the loader (`System.loadLibrary`) lives in `ChanoraApplication.kt`, not `MainActivity.kt` — back-fill text now cites `ChanoraApplication.kt` for `System.loadLibrary` and `MainActivity.kt` for `initChanoraContext` invocation, resolving the contradiction between the Software-unit field and the Back-fill field. (2) SDD-105 software-unit list extended to include `crates/chanora_bridge/build.rs` (which emits `cargo:rustc-link-lib=dylib=c++_shared` so that `DT_NEEDED libc++_shared.so` is baked into `libchanora_bridge.so`). (3) SDD-118 item 6 extended (new sub-paragraph "Item 6 (extended)") to mandate co-staging `libc++_shared.so` from the NDK sysroot into `jniLibs//` alongside `libchanora_bridge.so`, with the explicit NDK sysroot source-path pattern `$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib//libc++_shared.so` and the sysroot-triple mapping (`arm64-v8a → aarch64-linux-android`, `armeabi-v7a → arm-linux-androideabi` — NOT `armv7-linux-androideabi`, `x86_64 → x86_64-linux-android`); rationale traces to SDD-105 load-order preload, SDD-111 oboe-rs C++ dependency, and SDD-118 item 10 release-inspection assertion (which shall include `libc++_shared.so`). (4) SDD-105 Cross-trace field added linking to SDD-118 item 6 (extended) for the runtime co-staging and to `crates/chanora_bridge/build.rs` for the DT_NEEDED emission. (5) SDD-119 item 4 doc-drift TODO resolved with Option α (drop the iOS podspec simulator comment) for P0 minimalism; `aarch64-apple-ios-sim` is explicitly deferred to a future P1 SDD revision. Strict layered sourcing preserved (`SDD -> SAD` only). Items deferred from this pass: macOS / iOS deployment-target single-source-of-truth (SDD-119 item 3); optional SysRS-290 anchor work; `abiFilters` DEC entry (routed to traceability-auditor + governance, not SDD). | - -## Baseline Candidate 0.9.12 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.12 | 2026-05-18 | Surgical traceability correction on SDD-119 (`iOSAndMacOSBridgeBuildAutomation`) Source SAD field. Prior allocation sourced the macOS half by parallelism from SAD-061 (iOS runtime) / SAD-062 (App Store / packaging) because no dedicated macOS-runtime SAD anchor existed at SDD-119 authoring time. SAD v0.9.7 closed that gap by authoring SAD-087 (macOS runtime baseline — `10.15` deployment target isolation in `apps/chanora_flutter/macos/chanora_bridge.podspec`, universal-binary `arm64 + x86_64` `lipo` packaging, `.framework` `Versions/A` layout, hand-rolled CocoaPods podspec automation), parallel to SAD-061 (iOS runtime) and SAD-063 (Android runtime). This revision retargets SDD-119's Source SAD allocation to: iOS half = SAD-061 + SAD-062; macOS half = SAD-087 as the primary anchor. §11 coverage matrix row updated from `SAD-061, SAD-062` to `SAD-061, SAD-062, SAD-087` with explicit iOS-vs-macOS attribution narrative. No behavioural content of SDD-119 was modified; only the Source SAD allocation and the coverage matrix. SDD-119 remains a back-fill unit creating no new implementation work. Strict layered sourcing preserved (`SDD -> SAD` only). | - -## Baseline Candidate 0.9.11 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.11 | 2026-05-18 | Surgical traceability correction on SDD-110 (`AndroidPttCapability`) Source SAD field. Prior value `SAD-077` was incorrect (SAD-077 is `PttSanitizer`, a diagnostics-log-sink decorator — wrong scope). The traceability-auditor flagged that an earlier draft had also cited `SAD-086` (Android voice foreground service — also wrong scope). Re-anchored to SAD-071 (PTT-backend trait isolation + factory selection + published capability level — the architectural concept SDD-110 specialises on Android by pinning to `FocusedPttBackend` and `L0Focused`) and SAD-076 (`BridgeEvent::PttCapability { level, backend_id }` — the capability-event surface feeding the Android-specific capability badge text per SDD-091). §11 coverage matrix updated: SDD-110 removed from the SAD-063/081/084/085/086 row (now `SDD-105`–`SDD-109` only) and added under a new SAD-071 / SAD-076 row. No behavioural content of SDD-110 was modified; only the Source SAD field and the coverage matrix. Strict layered sourcing preserved (`SDD -> SAD` only). | - -## Baseline Candidate 0.9.10 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.10 | 2026-05-18 | Added `chanora_bridge` Rust cdylib build-automation detailed design SDD-118 and SDD-119 (SDD-117 left reserved-but-unauthored for the deferred `ios_voice_unit` trait back-fill noted by SDD-111). SDD-118 (`AndroidBridgeBuildAutomation` — Gradle task set in `apps/chanora_flutter/android/app/build.gradle.kts` driving a single `cargo-ndk -t arm64-v8a -t armeabi-v7a -t x86_64` invocation; `cargo ndk --platform $minSdk` sourced from the `chanora.android.minSdk` Gradle property per SDD-073 default 28 / DEC-004; ABI set derived from `android.defaultConfig.ndk.abiFilters` so the two lists stay in sync; profile mapping Gradle-debug→`cargo build` / Gradle-release→`cargo build --release` — deliberate divergence from the iOS / macOS always-`--release` pattern, with the release-build safety property preserved by the item 10 release-inspection assertion; env `LIBOPUS_STATIC=1 LIBOPUS_NO_PKG=1 CMAKE_POLICY_VERSION_MINIMUM=3.5` plus `ANDROID_NDK_HOME` propagation; per-ABI plain copy to `apps/chanora_flutter/android/app/src/main/jniLibs//libchanora_bridge.so` with the explicit Rust-triple ↔ Android-ABI mapping; task-graph wiring via `tasks.matching { ... endsWith("JniLibFolders") }.configureEach { dependsOn(...) }` rather than `preBuild.dependsOn`; Gradle `inputs`/`outputs` declarations for up-to-date semantics; preflight that fails loudly with `cargo install cargo-ndk` / `rustup target add ...` remediation rather than auto-installing; release-inspection assertion that each `.so` exists and is >1 KiB before `bundleRelease` / `bundleDebug`; `target/` lives at repo root and is OUTSIDE `gradle clean` scope; sourced from SAD-063 with cross-trace to SDD-073 / SDD-105 / SDD-109). SDD-119 (`iOSAndMacOSBridgeBuildAutomation` — back-fill of the existing CocoaPods-podspec automation under `apps/chanora_flutter/ios/chanora_bridge.podspec` and `apps/chanora_flutter/macos/chanora_bridge.podspec`; dual-hook `prepare_command` + `script_phase :before_compile`; iOS single-arch `aarch64-apple-ios` flat framework with hand-written Info.plist and `install_name_tool -id @rpath/chanora_bridge.framework/chanora_bridge`; macOS dual-arch `aarch64-apple-darwin` + `x86_64-apple-darwin` joined by `lipo -create` in a `Versions/A` framework layout with `install_name_tool -id @rpath/chanora_bridge.framework/Versions/A/chanora_bridge`; always `--release`; iOS env `IPHONEOS_DEPLOYMENT_TARGET=13.0 CMAKE_POLICY_VERSION_MINIMUM=3.5 CMAKE_OSX_DEPLOYMENT_TARGET=13.0`, macOS env `MACOSX_DEPLOYMENT_TARGET=10.15 LIBOPUS_STATIC=1 LIBOPUS_NO_PKG=1 CMAKE_POLICY_VERSION_MINIMUM=3.5`; CocoaPods `vendored_frameworks` integration; cargo incremental + per-platform timestamp guard caching; sourced from SAD-061 / SAD-062 with macOS-runtime SAD anchor flagged as a follow-up; known doc-drift defect recorded: iOS podspec comment references `aarch64-apple-ios-sim` but the script does not actually build the simulator slice — recorded as a TODO follow-up, NOT fixed in this SDD task; deployment-target single-source-of-truth improvement recorded as open follow-up). Updated §11 SAD-to-SDD coverage matrix to list SDD-118 and SDD-119 with their respective SAD anchors. Strict layered sourcing preserved (`SDD -> SAD` only). | - -## Baseline Candidate 0.9.16 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.16 | 2026-05-18 | SDD-120 amendment: clarify the post-processor binary placement at `crates/chanora_audio/examples/` rather than `benches/` or `src/bin/`. Rationale: Cargo's dependency resolver only routes `[dev-dependencies]` to `[[test]]`, `[[bench]]`, and `[[example]]` targets; `src/bin/` placement would have forced `serde_json` and other dev-only crates into production builds. Reflects commit 3a7750a discovery. No semantic change to SDD-120 — same harness, same metrics, same workflows, same out-of-scope deferrals; only the path conventions and invocation flags (`--example` not `--bin`) corrected. Edits scoped to SDD-120: (1) "Allocated to" line gains `crates/chanora_audio/examples/` alongside `benches/`; (2) "Software units" list relocates `emit_baseline.rs` and `compare_baseline.rs` from `benches/` to `examples/`; (3) §1 item 4 reworded from `[[bin]]` entries pointing into `benches/` to `[[example]]` entries (auto-discovered under `examples/`) with `cargo run --example` invocation pattern; (4) §2 gains a new item 5 stating the `examples/` rationale and the dev-only isolation property; (5) §5 item 1 path updated and invocation-flag note added; (6) §5 item 4 rationale clause updated to reference the `[dev-dependencies]`-to-examples routing; (7) §6 step 6 and step 8 invocation flags changed `--bin` → `--example`; (8) §7 step 5 invocation flag changed `--bin` → `--example`; (9) §10 item 1 release-artifact-isolation bullet extended with an explicit note that the `examples/` placement is the Cargo-design mechanism enforcing the exclusion of `[dev-dependencies]` (including `serde_json`, `criterion`, `dhat`) from `cargo build --release` and from `flutter build apk/aab/ipa --release`. §11 verification matrix unchanged. Coverage matrix row for SAD-088..SAD-091 unchanged. The SDD-120 spec is otherwise byte-identical to v0.9.15. | - -## Baseline Candidate 0.9.20 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.20 | 2026-05-19 | SDD-121 documentation-only final-review amendment. Removed direct SRS identifier enumeration from the SDD-121 source/context field and from the SAD-to-SDD coverage row; upstream software requirements are now described only as traced via SAD coverage. Clarified Phase B join request correlation: use protocol transport ids when available, otherwise allocate a core-local monotonically incremented `JoinRequestId` scoped to the connection epoch after releasing the session lock and before enqueuing `JoinCommandAccepted`; all success/failure/timeout outcomes carry the resulting `JoinOutcomeKey`. Clarified that pending projection publishes immediately after accepted `UserJoinRequested` and before protocol send, session/state mutexes are not held across protocol/timer/bridge awaits, `SendLeaveCommand` actions must be executed, and authoritative current-channel finalization remains limited to authoritative self-move/snapshot confirmation and projections derived from that confirmation. | - -## Baseline Candidate 0.9.21 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.21 | 2026-05-19 | SDD-121 documentation-only amendment for SAD-096. Added SAD-096 to SDD-121 Source SAD and the updated SAD-to-SDD coverage matrix. Specified the explicit Protocol Adapter leave/move-out seam (`ProtocolClient::leave_channel(&self) -> Result<(), ProtocolError>` preferred, `move_out_of_channel` acceptable) with no channel-id argument and no upper-layer synthetic channel id. Updated reducer events/actions with `LeaveRequestId`, `LeaveOutcomeKey`, `LeaveCommandAccepted`, `ProtocolLeaveSucceeded`, `ProtocolLeaveFailed`, `LeaveTimeout`, `StartLeaveTimeout`, and `CancelLeaveTimeout`; mapped leave success/failure/timeout to command-lifecycle diagnostics and non-authoritative projection behavior. Reaffirmed that only live deltas or snapshots may clear or replace authoritative `current_channel`. Added SWE.4/SWE.5 verification notes for leave/move-out behavior and no synthetic `move_to_channel` fallback. | - -## Baseline Candidate 0.9.19 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.19 | 2026-05-18 | Refined SDD-121 to resolve the reducer-surface implementation blocker without code changes. Added concrete `chanora_state::channel_join` module/API design (`ChannelJoinState`, `AuthoritativeMembership`, `JoinPending`, `ChannelJoinEvent`, `ChannelJoinAction`, `ChannelJoinProjection`, `JoinReduceStatus`, `JoinIntentRejected`, `JoinFailureKind`, `JoinErrorCode`, `reduce`, and `project`), explicit core/protocol/bridge/Flutter integration seams, and authorized Phase A/B/C implementation sequencing. Existing SDD-121 behavior decisions are preserved: duplicate same-target coalesces; different target while pending is rejected/serialized for P0; leave supersedes pending; stale outcomes are ignored by epoch/generation/request mismatch; reconnect/snapshot reconciliation clears or confirms pending; protocol success alone is not authoritative finalization. Source SAD remains SAD-092 through SAD-095. | - -## Baseline Candidate 0.9.18 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.18 | 2026-05-18 | Added channel join pending-state detailed design SDD-121 sourced from SAD-092 through SAD-095. The new unit defines the Rust Core / State Sync reducer state (`AuthoritativeMembership`, `JoinPending`, connection epoch/generation, synchronizing state), events, success/failure/timeout/reconnect transitions, bridge/core/protocol boundaries, UI pending-target rendering constraints, sanitized diagnostics/error codes, concurrency assumptions, and SWE.4/SWE.5/SWE.6 verification implications. Behavior selections: duplicate same-target joins coalesce; different-target joins while pending are rejected/serialized for P0; leave while pending supersedes and stales the pending join; stale outcomes are ignored by generation/request/epoch key; reconnect advances epoch and resolves membership from the fresh snapshot. Coverage matrix updated for SAD-092..SAD-095 with upstream software requirements retained only through SAD coverage. | - -## Baseline Candidate 0.9.17 Update - -| Version | Date | Description | -| --- | --- | --- | -| 0.9.17 | 2026-05-18 | SDD-119 amendment: macOS deployment-target single-source-of-truth (open follow-up flagged at SDD-119 item 3 since v0.9.10 and explicitly deferred at v0.9.13) RESOLVED for the macOS half. Selected Option B (Ruby constant) over Option A (`.xcconfig`) and Option C (versioned text file); rationale recorded inline at the rewritten item 3. New SoT file `apps/chanora_flutter/macos/macos_deployment_target.rb` declares a single frozen Ruby constant `MACOS_BRIDGE_DEPLOYMENT_TARGET = '10.15'.freeze`; `apps/chanora_flutter/macos/Podfile` and `apps/chanora_flutter/macos/chanora_bridge.podspec` `require_relative` the file and consume the constant at seven previously-literal sites (1 Podfile `platform :osx, ...`; 1 podspec `s.platform :osx, ...`; 4 podspec `MACOSX_DEPLOYMENT_TARGET=...` env exports inside the `prepare_command` and `script_phase` shell heredocs, reached via outer-Ruby-heredoc `#{...}` interpolation; 2 podspec embedded-framework `Info.plist` `MinimumOSVersion` entries, reached the same way). The pbxproj `MACOSX_DEPLOYMENT_TARGET = 10.15` occurrences at `Runner.xcodeproj/project.pbxproj` lines 565 / 666 / 717 are explicitly OUT OF SCOPE for this SoT and were NOT touched: those three lines belong to the PBXProject "Runner" build-configuration list (project-default config emitted by Flutter's template) and are independently overridden to `11.0` at the Runner PBXNativeTarget level — they are the Runner app's project-default floor, not the bridge cdylib's floor, and the matching value is coincidental and intentionally allowed to diverge in the future. The iOS half of the SoT follow-up (`IPHONEOS_DEPLOYMENT_TARGET=13.0` hard-coded in the iOS podspec) remains an open follow-up and is NOT addressed by this amendment — the iOS Podfile / podspec pair sits in a separate directory under a parallel Ruby scope and warrants its own future revision. SDD-119 item 3 fully rewritten in place (no longer flagged as open follow-up — now records the Option-B realization, the consumer-site enumeration, the option-rejection rationale, and the explicit OUT-OF-SCOPE note for the pbxproj project-default lines). SDD-119 "Notes" bullet at line 1703 updated to reflect that item 3 is RESOLVED for macOS while preserving the iOS-half open-follow-up status. Source SAD: SAD-087(a) (which already named the podspec as the "single macOS build-configuration location") — this amendment realizes that mandate by collapsing the seven intra-cluster literal occurrences to one. Files modified: `apps/chanora_flutter/macos/macos_deployment_target.rb` (new, ~22 lines including documentation header), `apps/chanora_flutter/macos/Podfile` (+1 line `require_relative`, 1 line edited), `apps/chanora_flutter/macos/chanora_bridge.podspec` (1 line `require_relative` insertion + 7 literal-to-interpolation edits), `docs/architecture/sdd.md` (this entry + item-3 rewrite + Notes-bullet edit). No behavioural design content changed beyond consolidating an already-implemented value to a single declaration site. The pre-staged `apps/chanora_flutter/macos/Frameworks/chanora_bridge.framework/Versions/A/Resources/Info.plist` artifact still contains the literal `10.15` value but is regenerated on every `pod install` / Xcode build by the podspec's `prepare_command` / `script_phase` from the new SoT, so it will refresh automatically on the next macOS build. Strict layered sourcing preserved (`SDD -> SAD` only). Ruby syntax of the modified files NOT executable-verified on this host (no `ruby` available in the build container); static review confirmed (a) the `require_relative 'macos_deployment_target'` filename is correct (the new file is named `macos_deployment_target.rb` and `require_relative` strips the `.rb` extension), (b) the constant is referenced after the require in every consumer, (c) the outer Ruby heredocs (`<<-SCRIPT`, unquoted delimiter) support `#{...}` interpolation, (d) the inner shell `< SysDes -> SRS -> SAD -> SDD -> Verification -``` - -| Lifecycle artifact | Role | -|---|---| -| SysRS | Defines system-level requirements and runtime environment requirements. | -| SysDes | Allocates SysRS requirements to system elements and defines system architecture. | -| SRS | Derives software-only requirements from software-impacting SysDes items. SysRS traceability is inherited through SysDes and shall not be used as the direct source of an SRS requirement. | -| SAD | Defines software architecture for software elements. | -| SDD | Defines detailed module, interface, data, and implementation design. | -| Verification | Proves requirements and designs through the chained relationship `SysRS -> SysDes -> SRS -> SAD -> SDD -> Verification`. | - - - -### 1.4 SysDes Design Item Attribute Model - -Every `SysDes-XXX` design item shall include the following attributes. - -| Attribute | Meaning | Typical values | -|---|---|---| -| Status | Maturity of the design item | Draft, Baseline, Agreed, Deprecated | -| Type | Design item classification | Functional Dynamic Design, Non-functional Architecture Design, Interface Design, Static Architecture Design, System Element Allocation, Architectural Constraint, Architecture Decision / Rationale, Allocation Rule, Process / Description, Verification Handoff | -| Stage | Delivery stage where the design item must be satisfied | P0 / MVP, P1 / Beta, P2 / Production, P3 / Future | -| Allocated to | System element or responsibility owner that implements/enables the design item | Software, Platform, Hardware, Network, External Server, Deployment / Operations, Product / Legal, Verification | -| Downstream artifact | Lifecycle artifact that must refine or consume this design item | SRS, SAD, SDD, Verification | -| Verification method | How the design item will be verified | Review, Inspection, Analysis, Test, Integration Test, System Test, Demo, Audit | -| Verification owner | Role primarily responsible for verification evidence | System Engineering, Software QA, Audio / Platform QA, Protocol / Integration QA, Security / QA, Release / Operations QA | -| ASPICE SYS.3 alignment | Related ASPICE SYS.3 intent or base practice area | Static architecture, dynamic architecture, analysis, traceability/consistency, communication | -| Allocated SysRS | Upstream SysRS requirement IDs covered by the SysDes design item. This attribute is for SysDes-level traceability only and shall not be copied as the direct source of an SRS requirement. | `SysRS-001`, ranges, or grouped IDs | -| SWE.1 handoff rule | Indicates how downstream SRS shall consume the SysDes item | Direct software requirement input, software-facing constraint, verification input, non-software assumption, or no SWE.1 handoff | - -Important allocation and downstream traceability rules: - -- `Allocated to` identifies the system element or engineering responsibility that realizes the design item. -- `Verification owner` identifies who proves that the design item is satisfied. -- `Test` is normally a verification responsibility, not the implementation allocation, except for explicit verification-handoff items. -- `Allocated SysRS` belongs to SysDes only. It provides SysRS-to-SysDes traceability required by system architectural design. -- Downstream SRS requirements shall use `Source SysDes` as their direct upstream reference. -- Downstream SRS requirements shall not use `Source SysRS` as their direct upstream reference. -- If a software requirement appears to come directly from SysRS and cannot be derived from an existing SysDes item, the SysDes is incomplete and shall be updated before the SRS is baselined. - - -### 1.5 Downstream SRS Derivation Rule - -The SysDes is the architectural allocation layer between SysRS and SRS. - -Correct downstream traceability: - -```text -SysRS-XXX -> SysDes-YYY -> SRS-ZZZ -``` - -Incorrect downstream traceability: - -```text -SysRS-XXX -> SRS-ZZZ -``` - -The SRS shall not reinterpret system requirements directly. It shall derive software requirements from SysDes design items that are allocated to software, contain software-facing constraints, or provide verification handoff for software behavior. - -If the software team identifies a required software behavior directly from SysRS and no SysDes design item represents it, this is a SysDes gap. The correction shall be made in SysDes first, then the SRS shall be updated from the corrected SysDes baseline. - - -## 2. ASPICE SYS.3 Alignment - -### 2.1 SYS.3 Work Products in This Document - -| ASPICE SYS.3 evidence need | Location in this SysDes | -|---|---| -| System architectural design | Sections 4 through 12 | -| Interface definitions | Section 6 | -| Dynamic behavior | Section 7 | -| Requirements allocation | Section 10 and Appendix A | -| Bidirectional traceability | Section 10 and Appendix A | -| Architecture analysis and rationale | Section 8 | -| Communication and review evidence | Section 11 | -| Verification handoff | Section 12 | - - -**SysDes-005**: The SysDes shall identify system elements, their responsibilities, their relationships, and their external interfaces. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP1 static aspects -- Allocated SysRS: SysRS-024 through SysRS-034, SysRS-200 through SysRS-210 - -**SysDes-006**: The SysDes shall describe dynamic behavior for connection, synchronization, voice transmission, voice reception, text messaging, reconnect, permissions, diagnostics, and release operation. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2 dynamic aspects -- Allocated SysRS: SysRS-102 through SysRS-120, SysRS-129 through SysRS-139 - -**SysDes-007**: The SysDes shall include architecture analysis, major design rationale, known risks, mitigations, and special characteristics. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP3 analysis -- Allocated SysRS: SysRS-178 through SysRS-191, SysRS-219 through SysRS-224 - -**SysDes-008**: The SysDes shall maintain bidirectional traceability between every SysRS requirement and at least one allocated system element. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: System Engineering, Verification -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 traceability and consistency -- Allocated SysRS: SysRS-001 through SysRS-257 - -**SysDes-009**: The SysDes shall identify affected parties for review, agreement, and communication of the system architecture. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: System Engineering, Verification -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: SYS.3 BP5 communication -- Allocated SysRS: SysRS-011 through SysRS-015, SysRS-233 through SysRS-240 - - -## 3. System Architectural Design Criteria - -The architecture is evaluated against the following criteria. - - -**SysDes-010**: The architecture shall separate user interface, protocol logic, state synchronization, audio processing, storage, diagnostics, and platform-specific services. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-003, SysRS-004, SysRS-024 through SysRS-034 - -**SysDes-011**: The architecture shall isolate direct `tsclientlib` usage inside the protocol adapter. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP3 -- Allocated SysRS: SysRS-005, SysRS-121 through SysRS-128 - -**SysDes-012**: The architecture shall support required target platforms through shared Flutter UI, shared Rust Core, and platform-specific adapters. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Rust Core -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-002, SysRS-048 through SysRS-058 - -**SysDes-013**: The architecture shall support production-grade audio processing including Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP2, BP3 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-250 through SysRS-253 - -**SysDes-014**: The architecture shall support real-time voice behavior without placing real-time audio processing in Flutter UI. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2, BP3 -- Allocated SysRS: SysRS-178 through SysRS-191 - -**SysDes-015**: The architecture shall support secure local handling of identities, passwords, and diagnostics. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP3 -- Allocated SysRS: SysRS-140 through SysRS-167 - -**SysDes-016**: The architecture shall support operation without a Chanora-operated central backend in MVP. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-016 through SysRS-023 - -**SysDes-017**: The architecture shall provide traceable verification hooks for protocol, state, audio, security, packaging, and platform behavior. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter, Software: Audio Subsystem, Deployment / Operations -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-233 through SysRS-257 - - -## 4. Static System Architecture - -### 4.1 System Context - -```text -+-------------------------------------------------------------------------------------+ -| User Runtime Environment | -| | -| +--------------------+ +--------------------------------------------------+ | -| | User / Operator |<----->| Chanora Client Application | | -| +--------------------+ | | | -| | +----------------+ +-------------------------+ | | -| +--------------------+ | | Flutter UI | | Rust Core | | | -| | Audio Hardware |<----->| | Flutter State | | Connection Manager | | | -| | Mic / Headset | | | Bridge Layer | | Protocol / State / | | | -| | Speaker / BT | | +----------------+ | Audio / Storage / Diag | | | -| +--------------------+ | +-------------------------+ | | -| | | | | -| +--------------------+ | +------------------------------v----------------+ | | -| | OS Services |<----->| | Platform Adapters / Secure Storage / Audio | | | -| +--------------------+ | +------------------------------------------------+ | | -| +-------------------------|------------------------+ | -| | Network | -+---------------------------------------------------------|-----------------------------+ - v - +--------------------------------------------------+ - | External TeamSpeak 3-compatible Voice Server | - | Channels / Clients / Voice / Text / Events | - +--------------------------------------------------+ -``` - - -**SysDes-018**: The static architecture shall define Chanora as a client application system interacting with users, audio hardware, OS services, networks, deployment environments, and external compatible voice servers. - -- Status: Baseline -- Type: Static Architecture Description -- Stage: P0 / MVP -- Allocated to: External Server, Software: Audio Subsystem, Deployment / Operations -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-001 through SysRS-023 - - -### 4.2 System Elements - -| Element ID | Element | Description | Type | -|---|---|---|---| - -| SE-01 | User and Operator | Human users who operate Chanora, provide server details, manage permissions, and initiate diagnostic export. | External actor | - -| SE-02 | Client Device Hardware | Physical device running Chanora, including CPU, memory, storage, network interfaces, microphone, speaker/headphone, and optional Bluetooth/USB audio devices. | External runtime element | - -| SE-03 | Operating System Services | OS services used by Chanora: permissions, secure storage, audio stack, network stack, notifications, windowing, lifecycle, foreground service, app sandboxing, signing/runtime policies. | External runtime element | - -| SE-04 | Network Environment | IP network path between client and external compatible server, including DNS, routing, NAT, firewall, VPN, Wi-Fi, cellular, and ISP behavior. | External runtime element | - -| SE-05 | External Compatible Voice Server | TeamSpeak 3-compatible external server providing channels, clients, identity authentication, voice packets, text messages, permissions, and events. | External system | - -| SE-06 | Chanora Application Container | Installed Chanora client application package on each target platform. Owns app lifecycle at the application boundary. | System element | - -| SE-07 | Flutter UI Layer | Cross-platform user interface for connection, channel tree, chat, voice controls, settings, permissions, and diagnostics. | Software system element | - -| SE-08 | Flutter State Layer | UI-facing state model derived from Rust Core events and snapshots; owns only presentation state. | Software system element | - -| SE-09 | Flutter-Rust Bridge Layer | Generated/native bridge for commands, DTOs, asynchronous calls, event streams, and error propagation between Flutter and Rust Core. | Software system element | - -| SE-10 | Rust Core and Connection Manager | Authoritative application core coordinating connection actors, commands, events, storage, audio, diagnostics, and business rules. | Software system element | - -| SE-11 | Protocol Adapter using tsclientlib | Protocol subsystem wrapping `tsclientlib`, isolating protocol library types, errors, events, and voice packet operations. | Software system element | - -| SE-12 | State Synchronization Engine | Snapshot + delta state model, deterministic reducers, connection state machine, event ordering, and replayable state behavior. | Software system element | - -| SE-13 | Audio Subsystem | Capture/playback coordination, Opus-compatible encoding/decoding, jitter buffer, mixer, push-to-talk, mute/deaf, level metering, and required processing features. | Software system element | - -| SE-14 | Platform Adapter Layer | Platform-specific adapters for audio devices, permissions, lifecycle, notifications, secure storage integration, and release-specific services. | Software/platform system element | - -| SE-15 | Local Data Store | Embedded local database or equivalent storage for bookmarks, recent servers, audio settings, UI settings, per-user volume and mute preferences. | Software/data system element | - -| SE-16 | Secure Storage Provider | Platform secure storage integration for identity private keys, server passwords, and future sensitive tokens. | Software/platform system element | - -| SE-17 | Diagnostics and Observability | Structured logs, redaction, event recording, event replay, network diagnostics, audio diagnostics, diagnostic bundle export. | Software/process support element | - -| SE-18 | Deployment and Release Environment | Packaging, signing, notarization, app-store release, installers, Linux packages, CI/CD, release metadata, and distribution artifacts. | Operational system element | - -| SE-19 | Engineering Process and Evidence | Architecture reviews, traceability records, verification evidence, compatibility matrix, open decisions, and downstream SRS/SAD/SDD/Verification artifacts. | Process/evidence element | - - - -### 4.3 Element Responsibilities and Allocation Rationale - - -**SysDes-019**: SE-01 User and Operator shall be a defined system element in the Chanora architecture with responsibility for: Human users who operate Chanora, provide server details, manage permissions, and initiate diagnostic export. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: User / Operator, Platform, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-011 through SysRS-015, SysRS-102 through SysRS-120 - -**SysDes-020**: SE-02 Client Device Hardware shall be a defined system element in the Chanora architecture with responsibility for: Physical device running Chanora, including CPU, memory, storage, network interfaces, microphone, speaker/headphone, and optional Bluetooth/USB audio devices. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Hardware, Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-035 through SysRS-047, SysRS-178 through SysRS-191 - -**SysDes-021**: SE-03 Operating System Services shall be a defined system element in the Chanora architecture with responsibility for: OS services used by Chanora: permissions, secure storage, audio stack, network stack, notifications, windowing, lifecycle, foreground service, app sandboxing, signing/runtime policies. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Platform, Software: Audio Subsystem, Platform Secure Storage -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-048 through SysRS-058, SysRS-153 through SysRS-167 - -**SysDes-022**: SE-04 Network Environment shall be a defined system element in the Chanora architecture with responsibility for: IP network path between client and external compatible server, including DNS, routing, NAT, firewall, VPN, Wi-Fi, cellular, and ISP behavior. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Network -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-075 through SysRS-087 - -**SysDes-023**: SE-05 External Compatible Voice Server shall be a defined system element in the Chanora architecture with responsibility for: TeamSpeak 3-compatible external server providing channels, clients, identity authentication, voice packets, text messages, permissions, and events. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: External Server, Software: Audio Subsystem, Platform -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-088 through SysRS-101 - -**SysDes-024**: SE-06 Chanora Application Container shall be a defined system element in the Chanora architecture with responsibility for: Installed Chanora client application package on each target platform. Owns app lifecycle at the application boundary. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software, Platform -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-001 through SysRS-010, SysRS-225 through SysRS-232 - -**SysDes-025**: SE-07 Flutter UI Layer shall be a defined system element in the Chanora architecture with responsibility for: Cross-platform user interface for connection, channel tree, chat, voice controls, settings, permissions, and diagnostics. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-003, SysRS-102 through SysRS-120, SysRS-200 through SysRS-206 - -**SysDes-026**: SE-08 Flutter State Layer shall be a defined system element in the Chanora architecture with responsibility for: UI-facing state model derived from Rust Core events and snapshots; owns only presentation state. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Flutter State, Software: Rust Core, Software: State Sync -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-024 through SysRS-034, SysRS-129 through SysRS-139 - -**SysDes-027**: SE-09 Flutter-Rust Bridge Layer shall be a defined system element in the Chanora architecture with responsibility for: Generated/native bridge for commands, DTOs, asynchronous calls, event streams, and error propagation between Flutter and Rust Core. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Bridge, Software: Rust Core -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-024 through SysRS-034, SysRS-200 through SysRS-210 - -**SysDes-028**: SE-10 Rust Core and Connection Manager shall be a defined system element in the Chanora architecture with responsibility for: Authoritative application core coordinating connection actors, commands, events, storage, audio, diagnostics, and business rules. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-004, SysRS-102 through SysRS-139, SysRS-178 through SysRS-191 - -**SysDes-029**: SE-11 Protocol Adapter using tsclientlib shall be a defined system element in the Chanora architecture with responsibility for: Protocol subsystem wrapping `tsclientlib`, isolating protocol library types, errors, events, and voice packet operations. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter, Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-005, SysRS-088 through SysRS-128, SysRS-241 - -**SysDes-030**: SE-12 State Synchronization Engine shall be a defined system element in the Chanora architecture with responsibility for: Snapshot + delta state model, deterministic reducers, connection state machine, event ordering, and replayable state behavior. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: State Sync -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-129 through SysRS-139, SysRS-233 through SysRS-240 - -**SysDes-031**: SE-13 Audio Subsystem shall be a defined system element in the Chanora architecture with responsibility for: Capture/playback coordination, Opus-compatible encoding/decoding, jitter buffer, mixer, push-to-talk, mute/deaf, level metering, and required processing features. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-178 through SysRS-191, SysRS-242 through SysRS-253 - -**SysDes-032**: SE-14 Platform Adapter Layer shall be a defined system element in the Chanora architecture with responsibility for: Platform-specific adapters for audio devices, permissions, lifecycle, notifications, secure storage integration, and release-specific services. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-048 through SysRS-074, SysRS-153 through SysRS-167 - -**SysDes-033**: SE-15 Local Data Store shall be a defined system element in the Chanora architecture with responsibility for: Embedded local database or equivalent storage for bookmarks, recent servers, audio settings, UI settings, per-user volume and mute preferences. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Software: Storage -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-140 through SysRS-152, SysRS-255 - -**SysDes-034**: SE-16 Secure Storage Provider shall be a defined system element in the Chanora architecture with responsibility for: Platform secure storage integration for identity private keys, server passwords, and future sensitive tokens. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Platform Secure Storage -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-140 through SysRS-167, SysRS-256 - -**SysDes-035**: SE-17 Diagnostics and Observability shall be a defined system element in the Chanora architecture with responsibility for: Structured logs, redaction, event recording, event replay, network diagnostics, audio diagnostics, diagnostic bundle export. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-168 through SysRS-177, SysRS-257 - -**SysDes-036**: SE-18 Deployment and Release Environment shall be a defined system element in the Chanora architecture with responsibility for: Packaging, signing, notarization, app-store release, installers, Linux packages, CI/CD, release metadata, and distribution artifacts. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Software: Storage, Deployment / Operations -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Release / Operations QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-192 through SysRS-199 - -**SysDes-037**: SE-19 Engineering Process and Evidence shall be a defined system element in the Chanora architecture with responsibility for: Architecture reviews, traceability records, verification evidence, compatibility matrix, open decisions, and downstream SRS/SAD/SDD/Verification artifacts. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: System Engineering, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: SYS.3 BP1, BP4 -- Allocated SysRS: SysRS-233 through SysRS-240, SysRS-219 through SysRS-224 - - -### 4.4 Layered Static Decomposition - -```text -+-------------------------------------------------------------+ -| SE-07 Flutter UI Layer | -+-------------------------------------------------------------+ -| SE-08 Flutter State Layer | -+-------------------------------------------------------------+ -| SE-09 Flutter-Rust Bridge Layer | -+-------------------------------------------------------------+ -| SE-10 Rust Core and Connection Manager | -| + SE-11 Protocol Adapter using tsclientlib | -| + SE-12 State Synchronization Engine | -| + SE-13 Audio Subsystem | -| + SE-15 Local Data Store | -| + SE-16 Secure Storage Provider | -| + SE-17 Diagnostics and Observability | -+-------------------------------------------------------------+ -| SE-14 Platform Adapter Layer | -+-------------------------------------------------------------+ -| External Runtime Elements: SE-02, SE-03, SE-04, SE-05 | -+-------------------------------------------------------------+ -``` - - -**SysDes-038**: The architecture shall use a layered decomposition in which Flutter UI and Flutter State Layer communicate with Rust Core only through the Bridge Layer. - -- Status: Baseline -- Type: Static Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Flutter State, Software: Bridge, Software: Rust Core -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-003, SysRS-024 through SysRS-034, SysRS-200 through SysRS-210 - -**SysDes-039**: The architecture shall place protocol, state synchronization, audio processing, storage coordination, diagnostics, and business rules inside Rust Core or Rust Core-owned elements. - -- Status: Baseline -- Type: Static Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-004, SysRS-024 through SysRS-034 - -**SysDes-040**: The architecture shall prevent Flutter UI and Flutter State Layer from invoking `tsclientlib` or depending on raw `tsclientlib` types. - -- Status: Baseline -- Type: Static Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Flutter State, Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP3 -- Allocated SysRS: SysRS-005, SysRS-121 through SysRS-128, SysRS-211 - -**SysDes-041**: The architecture shall place real-time audio processing outside Flutter UI and inside the Rust Core audio subsystem or platform-native audio processing adapters. - -- Status: Baseline -- Type: Static Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Rust Core, Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP3 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-178 through SysRS-191 - - -## 5. System Requirement Allocation Strategy - -### 5.1 Allocation Rules - - -**SysDes-042**: Every SysRS requirement shall be allocated to at least one system element. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-001 through SysRS-257 - -**SysDes-043**: A SysRS requirement may be allocated to multiple system elements when the requirement depends on cooperation between application software, OS services, hardware, network, external server, deployment, or engineering evidence. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: External Server, Deployment / Operations, System Engineering, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-001 through SysRS-257 - -**SysDes-044**: Functional user-facing requirements shall be allocated to Flutter UI, Rust Core, and the relevant subsystem element that executes the behavior. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-102 through SysRS-120 - -**SysDes-045**: Runtime environment requirements shall be allocated to client device hardware, operating system services, platform adapters, network environment, or external compatible server elements. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: Hardware, Platform, Network -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-035 through SysRS-101 - -**SysDes-046**: Security, privacy, and diagnostics requirements shall be allocated to secure storage, diagnostics, platform adapters, and engineering process evidence. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: Platform, Platform Secure Storage, Software: Diagnostics, Verification, System Engineering -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-153 through SysRS-177 - -**SysDes-047**: MVP acceptance requirements shall be allocated to the system elements that implement or enable the accepted behavior. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-241 through SysRS-257 - - -### 5.2 Allocation Summary by Requirement Group - -| SysRS Range | Requirement Topic | Primary System Elements | -|---|---|---| -| SysRS-001 through SysRS-010 | Application system scope | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16 | -| SysRS-011 through SysRS-015 | Stakeholders and user environment | SE-01, SE-07, SE-17, SE-19 | -| SysRS-016 through SysRS-023 | Boundaries and external dependencies | SE-03, SE-04, SE-05, SE-14, SE-18 | -| SysRS-024 through SysRS-034 | Application components | SE-06 through SE-17 | -| SysRS-035 through SysRS-047 | Client device and hardware | SE-02, SE-03, SE-04, SE-13, SE-14 | -| SysRS-048 through SysRS-058 | Operating system services | SE-03, SE-14, SE-18 | -| SysRS-059 through SysRS-074 | Audio hardware and processing | SE-02, SE-03, SE-13, SE-14 | -| SysRS-075 through SysRS-087 | Network environment | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | -| SysRS-088 through SysRS-101 | External compatible server | SE-05, SE-11, SE-12, SE-13 | -| SysRS-102 through SysRS-120 | Application functional behavior | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16 | -| SysRS-121 through SysRS-128 | Protocol integration | SE-11, SE-19 | -| SysRS-129 through SysRS-139 | State synchronization | SE-10, SE-12, SE-09, SE-19 | -| SysRS-140 through SysRS-152 | Data and storage | SE-15, SE-16, SE-17, SE-14 | -| SysRS-153 through SysRS-167 | Security and privacy | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | -| SysRS-168 through SysRS-177 | Diagnostics and operations | SE-17, SE-19 | -| SysRS-178 through SysRS-191 | Non-functional requirements | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | -| SysRS-192 through SysRS-199 | Deployment and release | SE-18, SE-19 | -| SysRS-200 through SysRS-210 | Interfaces | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11, SE-13, SE-14, SE-15, SE-16, SE-17 | -| SysRS-211 through SysRS-218 | Constraints | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19 | -| SysRS-219 through SysRS-224 | Assumptions | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19 | -| SysRS-225 through SysRS-232 | Out of scope for MVP | SE-06, SE-13, SE-19 | -| SysRS-233 through SysRS-240 | Verification and validation | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19 | -| SysRS-241 through SysRS-257 | MVP acceptance | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | - - -## 6. Interface Definitions - -### 6.1 Interface Catalogue - -| Interface ID | Interface | Provider | Consumer | Main Data / Signals | Failure Handling | -|---|---|---|---|---|---| -| IF-001 | User Interface | SE-07 | SE-01 | UI events, status, forms, controls, errors | UI-safe error banner/dialog | -| IF-002 | Flutter State Interface | SE-08 | SE-07 | View models, UI state, derived lists | State reset or stale-state overlay | -| IF-003 | Flutter-Rust Command Interface | SE-09 | SE-07/SE-08 | Commands, DTOs, request IDs | Error DTO, timeout, cancellation | -| IF-004 | Rust Core Event Interface | SE-10/SE-09 | SE-08 | Core events, snapshots, deltas | Stream reconnect/resubscribe | -| IF-005 | Protocol Adapter Interface | SE-11 | SE-10 | Connect, join, message, voice, events | ProtocolError mapping | -| IF-006 | External Server Protocol Interface | SE-05 | SE-11 | TeamSpeak-compatible protocol traffic | Network/protocol error mapping | -| IF-007 | Audio Capture Interface | SE-14/SE-03/SE-02 | SE-13 | PCM frames, device events | Device error, fallback, mute | -| IF-008 | Audio Playback Interface | SE-13 | SE-14/SE-03/SE-02 | Mixed PCM frames, route state | Device error, fallback, deaf | -| IF-009 | Secure Storage Interface | SE-16/SE-03 | SE-10/SE-15 | Identity secrets, passwords | SecureStoreError, user re-auth | -| IF-010 | Local Data Store Interface | SE-15 | SE-10/SE-07 | Bookmarks, recent servers, settings | StorageError, repair/migration | -| IF-011 | Diagnostics Export Interface | SE-17 | SE-01/SE-19 | Redacted diagnostic bundle | Export failure message | -| IF-012 | Deployment Interface | SE-18 | SE-01/SE-03 | Installer/package/app-store artifact | Platform installer/store error | -| IF-013 | Network Interface | SE-04 | SE-11/SE-17 | IP connectivity, DNS, latency, packet loss | Reconnect or user-safe error | -| IF-014 | Permission Interface | SE-03/SE-14 | SE-07/SE-10 | Microphone, notification, foreground service | Permission explainer and blocked state | - -**SysDes-048**: IF-001 User Interface shall expose connection, bookmark, channel tree, online client, chat, voice control, audio setting, permission, and diagnostic workflows. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-102 through SysRS-120, SysRS-200 through SysRS-206 - -**SysDes-049**: IF-003 Flutter-Rust Command Interface shall use bridge-safe DTOs and shall not expose raw protocol or `tsclientlib` types. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Bridge, Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-121 through SysRS-128, SysRS-200 through SysRS-210 - -**SysDes-050**: IF-004 Rust Core Event Interface shall deliver connection status, snapshots, deltas, voice indicators, errors, and diagnostic events as typed streams. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP2 -- Allocated SysRS: SysRS-129 through SysRS-139 - -**SysDes-051**: IF-005 Protocol Adapter Interface shall isolate all direct `tsclientlib` operations and convert protocol data into Chanora internal data structures. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-121 through SysRS-128 - -**SysDes-052**: IF-006 External Server Protocol Interface shall use `tsclientlib` to communicate with reachable TeamSpeak 3-compatible external servers. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: External Server, Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-005, SysRS-088 through SysRS-101 - -**SysDes-053**: IF-007 Audio Capture Interface shall provide PCM capture frames, device state, route changes, and capture errors to the audio subsystem. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-059 through SysRS-074 - -**SysDes-054**: IF-008 Audio Playback Interface shall provide mixed PCM playback frames, playback reference for echo cancellation where required, and playback route events. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-059 through SysRS-074 - -**SysDes-055**: IF-009 Secure Storage Interface shall store identity private keys, server passwords, and future sensitive tokens through platform-secure mechanisms. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Storage, Platform Secure Storage -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-140 through SysRS-167 - -**SysDes-056**: IF-010 Local Data Store Interface shall persist non-secret data through SQLite or an equivalent embedded database. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Storage -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-140 through SysRS-152 - -**SysDes-057**: IF-011 Diagnostics Export Interface shall export user-initiated diagnostic bundles with redaction applied before export. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP1 -- Allocated SysRS: SysRS-168 through SysRS-177 - -**SysDes-058**: IF-013 Network Interface shall provide connectivity to external compatible servers and network diagnostic inputs for reconnect and troubleshooting. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP2 -- Allocated SysRS: SysRS-075 through SysRS-087 - -**SysDes-059**: IF-014 Permission Interface shall mediate microphone, notification, audio session, foreground service, and lifecycle permission behavior on supported platforms. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Platform -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP1, BP2 -- Allocated SysRS: SysRS-048 through SysRS-058, SysRS-153 through SysRS-167 - - -## 7. Dynamic Architecture - -### 7.1 System Modes and States - -| State / Mode | Owner | Description | -|---|---|---| -| Not Installed | SE-18 | Application has not been installed on the client device. | -| Installed / Not Running | SE-06 | Application is installed but not active. | -| Running / Disconnected | SE-06, SE-07, SE-10 | App is active with no server connection. | -| Connecting | SE-10, SE-11 | User has started connection and protocol setup is in progress. | -| Synchronizing | SE-10, SE-11, SE-12 | Protocol connection exists and snapshot is being built. | -| Connected | SE-10, SE-11, SE-12 | Snapshot is ready and live deltas are being applied. | -| Voice Active | SE-13, SE-14 | User is in a voice channel and capture/playback pipelines are active. | -| Reconnecting | SE-10, SE-11, SE-12 | Recoverable failure triggered reconnect policy. | -| Permission Blocked | SE-03, SE-07, SE-14 | Required permission is missing or denied. | -| Diagnostics Export | SE-17 | User-initiated diagnostic export is in progress. | -| Release/Update | SE-18 | Deployment or update process is active. | - - -**SysDes-060**: The connection state machine shall be owned by Rust Core and reflected to Flutter as UI-safe connection status events. - -- Status: Baseline -- Type: Dynamic Behavior -- Stage: P0 / MVP -- Allocated to: Software: Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-129 through SysRS-139 - -**SysDes-061**: The voice activity mode shall be active only when a channel context, audio device state, permission state, and protocol voice path are valid. - -- Status: Baseline -- Type: Dynamic Behavior -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter, Software: Audio Subsystem, Platform -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-241 through SysRS-253 - -**SysDes-062**: The permission-blocked mode shall prevent unsafe voice operations while preserving user visibility into corrective actions. - -- Status: Baseline -- Type: Dynamic Behavior -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Platform -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-153 through SysRS-167 - -**SysDes-063**: The reconnect mode shall preserve UI responsiveness and rebuild authoritative server state from a fresh snapshot after reconnect. - -- Status: Baseline -- Type: Dynamic Behavior -- Stage: P0 / MVP -- Allocated to: Software: State Sync -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-075 through SysRS-087, SysRS-129 through SysRS-139 - -**SysDes-064**: The diagnostics export mode shall be explicitly user-initiated and shall apply redaction before export. - -- Status: Baseline -- Type: Dynamic Behavior -- Stage: P0 / MVP -- Allocated to: Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-168 through SysRS-177, SysRS-257 - - -### 7.2 Dynamic Flow: Manual Connection and Initial Snapshot - -```text -User -> Flutter UI -> Bridge -> Rust Core -> Protocol Adapter -> External Server -External Server -> Protocol Adapter -> Rust Core -> State Engine -> Bridge -> Flutter State -> UI -``` - - -**SysDes-065**: Manual connection flow shall pass host, port, nickname, optional password, and identity reference from Flutter UI to Rust Core through bridge DTOs. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Bridge, Software: Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-102 through SysRS-105 - -**SysDes-066**: Rust Core shall use the protocol adapter to establish server connection and authentication through `tsclientlib`. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-088 through SysRS-101, SysRS-121 through SysRS-128 - -**SysDes-067**: Initial synchronization shall fetch server information, channel list, client list, and required self-client information before emitting a full snapshot. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: State Sync -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-129 through SysRS-133 - -**SysDes-068**: Live server events shall be converted into internal events, applied through deterministic reducers, and emitted as UI-safe delta events. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: State Sync -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-130 through SysRS-136 - -**SysDes-069**: Channel join flow shall wait for Rust Core/protocol confirmation before treating the UI state as authoritative. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-108, SysRS-116, SysRS-244 - -**SysDes-070**: Text message flow shall route user text from Flutter to Rust Core to protocol adapter and route received messages back as core events. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-110, SysRS-119, SysRS-254 - -**SysDes-071**: Outgoing voice flow shall capture PCM frames, apply required processing, encode voice, and send voice packets through the protocol adapter. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter, Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-242 - -**SysDes-072**: Incoming voice flow shall receive voice packets, jitter-buffer, decode, apply per-user controls, mix, and play through platform playback. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-243 - -**SysDes-073**: User-triggered disconnect flow shall transition to Disconnected and shall suppress automatic reconnect. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Network / Reliability QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-106, SysRS-138, SysRS-217 - -**SysDes-074**: Recoverable network failure flow shall transition to Reconnecting, apply reconnect policy, and rebuild state from a fresh snapshot. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: State Sync -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Network / Reliability QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-085 through SysRS-087, SysRS-137 - -**SysDes-075**: Audio device change flow shall report route/device changes through platform adapters and shall recover or enter a user-safe blocked/degraded state. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Platform -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-063, SysRS-064, SysRS-188 - -**SysDes-076**: Secure storage flow shall store and retrieve secrets through platform secure storage without exposing plaintext secrets to logs or diagnostic export. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Software: Storage, Platform Secure Storage, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP2 -- Allocated SysRS: SysRS-148 through SysRS-167 - - -## 8. Architecture Analysis and Design Rationale - -### 8.1 Major Design Decisions - -| Decision ID | Decision | Rationale | Main Risk | Mitigation | -|---|---|---|---|---| -| ADR-001 | Flutter + Rust Core | Cross-platform UI with shared protocol/audio/state core | Bridge complexity | Typed DTOs, generated bridge, event streams | -| ADR-002 | `tsclientlib` protocol adapter | Required protocol library and Rust-native integration | Library maturity or feature gaps | Adapter isolation, protocol probe, compatibility matrix | -| ADR-003 | Snapshot + delta state synchronization | Stable state recovery and replayable debugging | Event ordering bugs | Single connection actor, reducer tests, event replay | -| ADR-004 | Audio subsystem outside Flutter | Real-time audio processing and low latency | Platform audio variance | Platform adapters and backend abstraction | -| ADR-005 | Required audio processing features | Voice quality: Echo Canceller, AGC, Noise Suppression, HPF | Feature availability differs by platform | Backend abstraction and platform-specific validation | -| ADR-006 | Platform secure storage | Protect identities and passwords | Platform API variance | SecureStore trait and per-platform adapters | -| ADR-007 | No Chanora central backend for MVP | Simplifies privacy, operations, and system boundary | No cloud sync | Defer cloud sync beyond MVP | -| ADR-008 | External compatible server as external system | Chanora is client-only and not server operator | Server behavior varies | Protocol probe, compatibility matrix, user-safe errors | - - -**SysDes-077**: The architecture shall select Flutter + Rust Core to meet cross-platform UI requirements while centralizing protocol, state, audio, storage, and diagnostics logic. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Protocol Adapter, Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-001 through SysRS-010 - -**SysDes-078**: The architecture shall isolate `tsclientlib` inside the protocol adapter to reduce impact if protocol implementation must be patched, forked, or replaced. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-121 through SysRS-128, SysRS-220 - -**SysDes-079**: The architecture shall use snapshot + delta synchronization to support deterministic state recovery, reconnect behavior, event replay, and UI consistency. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: State Sync, System Engineering, Verification -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Network / Reliability QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-129 through SysRS-139 - -**SysDes-080**: The architecture shall use platform adapters to isolate OS-specific permission, audio routing, lifecycle, secure storage, notification, and packaging concerns. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-048 through SysRS-058, SysRS-153 through SysRS-167 - -**SysDes-081**: The architecture shall implement audio processing through a backend abstraction that supports platform-native and Rust-based processing options. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-178 through SysRS-191 - -**SysDes-082**: The architecture shall define external compatible server behavior as an external dependency and shall not assume control over server-side permissions, availability, or configuration. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Platform -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-088 through SysRS-101, SysRS-223 - -**SysDes-083**: The architecture shall not introduce Chanora-operated backend infrastructure for MVP voice, channel, or text operation. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-017, SysRS-218 - -**SysDes-084**: The architecture shall treat real-time audio behavior, secure secret storage, protocol compatibility, mobile lifecycle policy, diagnostic redaction, and release signing as special characteristics requiring explicit verification. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations -- Downstream artifact: SAD, SDD, Verification -- Verification method: Review, Analysis -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-153 through SysRS-199, SysRS-233 through SysRS-257 - - -### 8.2 Special Characteristics - -| Characteristic | Affected Elements | Design Handling | -|---|---|---| -| Real-time voice latency | SE-02, SE-03, SE-13, SE-14 | Audio pipeline outside Flutter, low-latency platform adapters, Opus-compatible codec, jitter buffer | -| Echo cancellation quality | SE-02, SE-03, SE-13, SE-14 | Playback reference support, backend abstraction, per-platform validation | -| Protocol compatibility | SE-05, SE-11 | `tsclientlib` adapter, protocol probe, compatibility matrix | -| Secure identity handling | SE-03, SE-16 | Platform secure storage, no plaintext private keys | -| Diagnostic privacy | SE-17, SE-19 | Redaction before export, user-initiated export | -| Mobile foreground voice | SE-03, SE-14 | AVAudioSession, Android foreground service, lifecycle handling | -| Release trust | SE-18 | Signing, notarization, app-store release metadata review | - - -## 9. Resource, Performance, Reliability, Security, and Deployment Design - - -**SysDes-085**: The architecture shall allocate UI responsiveness to Flutter UI, Bridge Layer, Rust Core asynchronous command handling, and non-blocking reconnect behavior. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Flutter UI, Software: Bridge, Software: Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review -- Verification owner: Network / Reliability QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-178, SysRS-179, SysRS-187 - -**SysDes-086**: The architecture shall allocate local audio latency requirements to client device hardware, OS audio stack, platform adapters, audio subsystem, codec processing, and network environment. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Hardware, Network, Software: Audio Subsystem, Platform -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Test, Analysis -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-180, SysRS-181 - -**SysDes-087**: The architecture shall allocate memory growth constraints to Rust Core queue management, diagnostics log retention, chat history limits, and audio buffer bounds. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Test, Analysis -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-182 through SysRS-186 - -**SysDes-088**: The architecture shall allocate reliability recovery requirements to Rust Core reconnect policy, protocol adapter error mapping, state engine snapshot replacement, and platform audio recovery. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Test, Analysis -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-187 through SysRS-191 - -**SysDes-089**: The architecture shall allocate security requirements to platform secure storage, secret redaction, diagnostics redaction, user-safe error mapping, and input validation. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Platform Secure Storage, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Audit -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-153 through SysRS-167 - -**SysDes-090**: The architecture shall allocate privacy requirements to user-controlled diagnostics, minimal data collection, and permission explainers. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Platform, Software: Diagnostics, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Audit -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-163 through SysRS-167 - -**SysDes-091**: The architecture shall allocate packaging and release requirements to deployment environment, signing/notarization/app-store packaging, and release metadata review. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Software: Storage, Deployment / Operations, System Engineering, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Demo -- Verification owner: Release / Operations QA -- ASPICE SYS.3 alignment: SYS.3 BP3 -- Allocated SysRS: SysRS-192 through SysRS-199 - - -## 10. Bidirectional Traceability and Consistency - -### 10.1 Traceability Rules - - -**SysDes-092**: Each SysRS requirement shall trace forward to one or more system elements and to one or more SysDes design items with Type, Stage, Allocation, and Verification attributes. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-001 through SysRS-257 - -**SysDes-093**: Each system element shall trace backward to one or more SysRS requirements unless explicitly marked as supporting infrastructure. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-001 through SysRS-257 - -**SysDes-094**: Each interface shall trace backward to the SysRS requirements that require the interaction or runtime dependency. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-200 through SysRS-210 - -**SysDes-095**: Each dynamic flow shall trace backward to the SysRS functional, state, performance, security, or operational requirements that require the behavior. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-102 through SysRS-191 - -**SysDes-096**: Architecture changes shall update the SysRS allocation matrix, affected interfaces, affected dynamic flows, and verification hooks. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-233 through SysRS-240 - -**SysDes-097**: Consistency review shall check that SysDes does not contradict SysRS, does not introduce unapproved scope, and does not remove required MVP capabilities. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering, Verification -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4 -- Allocated SysRS: SysRS-001 through SysRS-257 - - -## 11. Architecture Agreement and Communication - - -**SysDes-098**: The system architecture shall be reviewed by product, system engineering, Rust Core engineering, Flutter engineering, audio engineering, platform engineering, QA, security/privacy, and release stakeholders. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: Software: Rust Core, Software: Audio Subsystem, Deployment / Operations, System Engineering, Verification -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP5 -- Allocated SysRS: SysRS-011 through SysRS-015, SysRS-233 through SysRS-240 - -**SysDes-099**: Architecture review evidence shall include review date, participants, open issues, decisions, accepted risks, and approval status. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: System Engineering, Verification -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: SYS.3 BP5 -- Allocated SysRS: SysRS-233 through SysRS-240 - -**SysDes-100**: The agreed SysDes baseline shall be communicated to downstream SRS, SAD, SDD, and Verification authors. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: System Engineering -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: SYS.3 BP5 -- Allocated SysRS: SysRS-233 through SysRS-240 - -**SysDes-101**: Any change affecting `tsclientlib` isolation, real-time audio processing, secure storage, mobile lifecycle, or release wording shall trigger architecture impact review. - -- Status: Baseline -- Type: Process / Description -- Stage: P0 / MVP -- Allocated to: Software: Protocol Adapter, Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations, System Engineering, Verification -- Downstream artifact: SysDes baseline, Verification -- Verification method: Review, Inspection -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP5 -- Allocated SysRS: SysRS-005, SysRS-059 through SysRS-074, SysRS-153 through SysRS-199, SysRS-211 through SysRS-218 - - -## 12. Verification Handoff - -The SysDes does not define detailed test cases. It defines verification hooks that shall be expanded in the Verification artifact. - - -**SysDes-102**: Protocol verification shall use a protocol probe tool and compatibility matrix to verify external server compatibility and `tsclientlib` adapter behavior. - -- Status: Baseline -- Type: Verification Handoff -- Stage: P0 / MVP -- Allocated to: External Server, Software: Protocol Adapter -- Downstream artifact: Verification -- Verification method: Test, Demo -- Verification owner: Protocol / Integration QA -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-121 through SysRS-128, SysRS-233, SysRS-241 - -**SysDes-103**: State verification shall use reducer tests and event replay tests to verify snapshot, delta, reconnect, and malformed-event behavior. - -- Status: Baseline -- Type: Verification Handoff -- Stage: P0 / MVP -- Allocated to: Software: State Sync -- Downstream artifact: Verification -- Verification method: Test, Demo -- Verification owner: Network / Reliability QA -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-129 through SysRS-139, SysRS-234, SysRS-191 - -**SysDes-104**: Audio verification shall use audio loopback and processing tests to verify capture, playback, codec, jitter buffer, mixer, Echo Canceller, AGC, Noise Suppression, and High-Pass Filter. - -- Status: Baseline -- Type: Verification Handoff -- Stage: P0 / MVP -- Allocated to: Software: Audio Subsystem -- Downstream artifact: Verification -- Verification method: Test, Demo -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-059 through SysRS-074, SysRS-235, SysRS-242 through SysRS-253 - -**SysDes-105**: Security verification shall audit secure storage, private-key handling, password handling, input validation, and diagnostic redaction on all target platforms. - -- Status: Baseline -- Type: Verification Handoff -- Stage: P0 / MVP -- Allocated to: Platform Secure Storage, Software: Diagnostics, Verification -- Downstream artifact: Verification -- Verification method: Audit -- Verification owner: Security / QA -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-140 through SysRS-167, SysRS-236, SysRS-256 - -**SysDes-106**: Deployment verification shall verify release package creation, signing, notarization, app-store builds, and release metadata wording. - -- Status: Baseline -- Type: Verification Handoff -- Stage: P0 / MVP -- Allocated to: Software: Storage, Deployment / Operations -- Downstream artifact: Verification -- Verification method: Inspection, Demo -- Verification owner: Release / Operations QA -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-192 through SysRS-199, SysRS-238 - -**SysDes-107**: MVP acceptance verification shall demonstrate all acceptance requirements from SysRS-241 through SysRS-257. - -- Status: Baseline -- Type: Verification Handoff -- Stage: P0 / MVP -- Allocated to: Verification -- Downstream artifact: Verification -- Verification method: Test, Demo -- Verification owner: Software QA -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-241 through SysRS-257 - - -**SysDes-108**: The SysDes shall be the mandatory architectural allocation layer between SysRS and SRS; downstream SRS requirements shall use SysDes IDs as their direct source and shall not use SysRS IDs as their direct source. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering, Software Requirements Engineering, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: SYS.3 BP4, BP5 -- Allocated SysRS: SysRS-233 through SysRS-240 - -**SysDes-109**: The SysDes shall provide enough allocation information for SWE.1 to derive software requirements without directly reinterpreting SysRS requirements. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: System Engineering, Software Requirements Engineering -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: SYS.3 BP1, BP3, BP4, BP5 -- Allocated SysRS: SysRS-233 through SysRS-240 - -**SysDes-110**: If a downstream software requirement cannot be derived from an existing SysDes design item, the SysDes shall be revised before the SRS is revised or baselined. - -- Status: Baseline -- Type: Change Control / Traceability Rule -- Stage: P0 / MVP -- Allocated to: System Engineering, Software Requirements Engineering, Change Control, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: SYS.3 BP3, BP4, BP5 -- Allocated SysRS: SysRS-233 through SysRS-240 - - -## 13. SysDes Design Item Metadata Register - -This register provides a compact review view of all `SysDes-XXX` design items and their engineering attributes. - -| SysDes ID | Type | Stage | Allocated to | Verification method | Verification owner | Downstream artifact | -|---|---|---|---|---|---|---| -| SysDes-001 | Process / Description | P0 / MVP | System Engineering | Review, Inspection | Software QA | SysDes baseline, Verification | -| SysDes-002 | Process / Description | P0 / MVP | System Engineering | Review, Inspection | System Engineering / QA | SysDes baseline, Verification | -| SysDes-003 | Process / Description | P0 / MVP | System Engineering | Review, Inspection | System Engineering / QA | SysDes baseline, Verification | -| SysDes-004 | Process / Description | P0 / MVP | System Engineering, Verification | Review, Inspection | System Engineering / Verification | SysDes baseline, Verification | -| SysDes-005 | Process / Description | P0 / MVP | System Engineering | Review, Inspection | System Engineering / QA | SysDes baseline, Verification | -| SysDes-006 | Process / Description | P0 / MVP | Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations | Review, Inspection | Audio / Platform QA | SysDes baseline, Verification | -| SysDes-007 | Process / Description | P0 / MVP | System Engineering | Review, Inspection | System Engineering / QA | SysDes baseline, Verification | -| SysDes-008 | Process / Description | P0 / MVP | System Engineering, Verification | Review, Inspection | Software QA | SysDes baseline, Verification | -| SysDes-009 | Process / Description | P0 / MVP | System Engineering, Verification | Review, Inspection | System Engineering / Verification | SysDes baseline, Verification | -| SysDes-010 | Architectural Constraint | P0 / MVP | Software: Flutter UI, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification | Review | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-011 | Architectural Constraint | P0 / MVP | Software: Protocol Adapter | Review | Protocol / Integration QA | SRS, SAD, SDD | -| SysDes-012 | Architectural Constraint | P0 / MVP | Software: Flutter UI, Software: Rust Core | Review | Software QA | SRS, SAD, SDD | -| SysDes-013 | Architectural Constraint | P0 / MVP | Software: Audio Subsystem | Review | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-014 | Architectural Constraint | P0 / MVP | Software: Flutter UI, Software: Audio Subsystem | Review | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-015 | Architectural Constraint | P0 / MVP | Software: Diagnostics, Verification | Review | Security / QA | SRS, SAD, SDD | -| SysDes-016 | Architectural Constraint | P0 / MVP | System Engineering | Review | System Engineering / QA | SRS, SAD, SDD | -| SysDes-017 | Architectural Constraint | P0 / MVP | Software: Protocol Adapter, Software: Audio Subsystem, Deployment / Operations | Review | Security / QA | SRS, SAD, SDD | -| SysDes-018 | Static Architecture Description | P0 / MVP | External Server, Software: Audio Subsystem, Deployment / Operations | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-019 | System Element Allocation | P0 / MVP | User / Operator, Platform, Software: Diagnostics, Verification | Review, Inspection | Protocol / Integration QA | SRS, SAD, SDD | -| SysDes-020 | System Element Allocation | P0 / MVP | Hardware, Software: Audio Subsystem | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-021 | System Element Allocation | P0 / MVP | Platform, Software: Audio Subsystem, Platform Secure Storage | Review, Inspection | Security / QA | SRS, SAD, SDD | -| SysDes-022 | System Element Allocation | P0 / MVP | Network | Review, Inspection | Protocol / Integration QA | SRS, SAD, SDD | -| SysDes-023 | System Element Allocation | P0 / MVP | External Server, Software: Audio Subsystem, Platform | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-024 | System Element Allocation | P0 / MVP | Software, Platform | Review, Inspection | System Engineering / QA | SRS, SAD, SDD | -| SysDes-025 | System Element Allocation | P0 / MVP | Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-026 | System Element Allocation | P0 / MVP | Software: Flutter State, Software: Rust Core, Software: State Sync | Review, Inspection | Software QA | SRS, SAD, SDD | -| SysDes-027 | System Element Allocation | P0 / MVP | Software: Bridge, Software: Rust Core | Review, Inspection | Software QA | SRS, SAD, SDD | -| SysDes-028 | System Element Allocation | P0 / MVP | Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-029 | System Element Allocation | P0 / MVP | Software: Protocol Adapter, Software: Audio Subsystem | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-030 | System Element Allocation | P0 / MVP | Software: State Sync | Review, Inspection | System Engineering / QA | SRS, SAD, SDD | -| SysDes-031 | System Element Allocation | P0 / MVP | Software: Audio Subsystem | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-032 | System Element Allocation | P0 / MVP | Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations | Review, Inspection | Security / QA | SRS, SAD, SDD | -| SysDes-033 | System Element Allocation | P0 / MVP | Software: Audio Subsystem, Software: Storage | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-034 | System Element Allocation | P0 / MVP | Platform Secure Storage | Review, Inspection | Security / QA | SRS, SAD, SDD | -| SysDes-035 | System Element Allocation | P0 / MVP | Software: Audio Subsystem, Software: Diagnostics, Verification | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-036 | System Element Allocation | P0 / MVP | Software: Storage, Deployment / Operations | Review, Inspection | Release / Operations QA | SRS, SAD, SDD | -| SysDes-037 | System Element Allocation | P0 / MVP | System Engineering, Verification | Review, Inspection | System Engineering / Verification | SRS, SAD, SDD | -| SysDes-038 | Static Architecture Design | P0 / MVP | Software: Flutter UI, Software: Flutter State, Software: Bridge, Software: Rust Core | Review, Inspection | Software QA | SRS, SAD, SDD | -| SysDes-039 | Static Architecture Design | P0 / MVP | Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-040 | Static Architecture Design | P0 / MVP | Software: Flutter UI, Software: Flutter State, Software: Protocol Adapter | Review, Inspection | Protocol / Integration QA | SRS, SAD, SDD | -| SysDes-041 | Static Architecture Design | P0 / MVP | Software: Flutter UI, Software: Rust Core, Software: Audio Subsystem | Review, Inspection | Audio / Platform QA | SRS, SAD, SDD | -| SysDes-042 | Allocation Rule | P0 / MVP | System Engineering | Review, Inspection | Software QA | SRS, SAD, SDD, Verification | -| SysDes-043 | Allocation Rule | P0 / MVP | External Server, Deployment / Operations, System Engineering, Verification | Review, Inspection | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-044 | Allocation Rule | P0 / MVP | Software: Flutter UI, Software: Rust Core | Review, Inspection | Software QA | SRS, SAD, SDD, Verification | -| SysDes-045 | Allocation Rule | P0 / MVP | Hardware, Platform, Network | Review, Inspection | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-046 | Allocation Rule | P0 / MVP | Platform, Platform Secure Storage, Software: Diagnostics, Verification, System Engineering | Review, Inspection | Security / QA | SRS, SAD, SDD, Verification | -| SysDes-047 | Allocation Rule | P0 / MVP | System Engineering | Review, Inspection | Software QA | SRS, SAD, SDD, Verification | -| SysDes-048 | Interface Design | P0 / MVP | Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification | Inspection, Integration Test | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-049 | Interface Design | P0 / MVP | Software: Bridge, Software: Protocol Adapter | Inspection, Integration Test | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-050 | Interface Design | P0 / MVP | Software: Rust Core, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification | Inspection, Integration Test | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-051 | Interface Design | P0 / MVP | Software: Protocol Adapter | Inspection, Integration Test | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-052 | Interface Design | P0 / MVP | External Server, Software: Protocol Adapter | Inspection, Integration Test | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-053 | Interface Design | P0 / MVP | Software: Audio Subsystem | Inspection, Integration Test | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-054 | Interface Design | P0 / MVP | Software: Audio Subsystem | Inspection, Integration Test | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-055 | Interface Design | P0 / MVP | Software: Storage, Platform Secure Storage | Inspection, Integration Test | Security / QA | SRS, SAD, SDD, Verification | -| SysDes-056 | Interface Design | P0 / MVP | Software: Storage | Inspection, Integration Test | Software QA | SRS, SAD, SDD, Verification | -| SysDes-057 | Interface Design | P0 / MVP | Software: Diagnostics, Verification | Inspection, Integration Test | System Engineering / QA | SRS, SAD, SDD, Verification | -| SysDes-058 | Interface Design | P0 / MVP | Software: Diagnostics, Verification | Inspection, Integration Test | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-059 | Interface Design | P0 / MVP | Software: Audio Subsystem, Platform | Inspection, Integration Test | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-060 | Dynamic Behavior | P0 / MVP | Software: Rust Core | System Test, Demo | Software QA | SRS, SAD, SDD, Verification | -| SysDes-061 | Dynamic Behavior | P0 / MVP | Software: Protocol Adapter, Software: Audio Subsystem, Platform | System Test, Demo | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-062 | Dynamic Behavior | P0 / MVP | Software: Audio Subsystem, Platform | System Test, Demo | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-063 | Dynamic Behavior | P0 / MVP | Software: State Sync | System Test, Demo | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-064 | Dynamic Behavior | P0 / MVP | Software: Diagnostics, Verification | System Test, Demo | System Engineering / QA | SRS, SAD, SDD, Verification | -| SysDes-065 | Functional Dynamic Design | P0 / MVP | Software: Flutter UI, Software: Bridge, Software: Rust Core | System Test, Demo | Security / QA | SRS, SAD, SDD, Verification | -| SysDes-066 | Functional Dynamic Design | P0 / MVP | Software: Rust Core, Software: Protocol Adapter | System Test, Demo | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-067 | Functional Dynamic Design | P0 / MVP | Software: State Sync | System Test, Demo | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-068 | Functional Dynamic Design | P0 / MVP | Software: State Sync | System Test, Demo | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-069 | Functional Dynamic Design | P0 / MVP | Software: Rust Core, Software: Protocol Adapter | System Test, Demo | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-070 | Functional Dynamic Design | P0 / MVP | Software: Rust Core, Software: Protocol Adapter | System Test, Demo | Protocol / Integration QA | SRS, SAD, SDD, Verification | -| SysDes-071 | Functional Dynamic Design | P0 / MVP | Software: Protocol Adapter, Software: Audio Subsystem | System Test, Demo | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-072 | Functional Dynamic Design | P0 / MVP | Software: Audio Subsystem | System Test, Demo | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-073 | Functional Dynamic Design | P0 / MVP | Software | System Test, Demo | Network / Reliability QA | SRS, SAD, SDD, Verification | -| SysDes-074 | Functional Dynamic Design | P0 / MVP | Software: State Sync | System Test, Demo | Network / Reliability QA | SRS, SAD, SDD, Verification | -| SysDes-075 | Functional Dynamic Design | P0 / MVP | Software: Audio Subsystem, Platform | System Test, Demo | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-076 | Functional Dynamic Design | P0 / MVP | Software: Storage, Platform Secure Storage, Software: Diagnostics, Verification | System Test, Demo | Security / QA | SRS, SAD, SDD, Verification | -| SysDes-077 | Architecture Decision / Rationale | P0 / MVP | Software: Rust Core, Software: Protocol Adapter, Software: Audio Subsystem, Software: Diagnostics, Verification | Review, Analysis | Audio / Platform QA | SAD, SDD, Verification | -| SysDes-078 | Architecture Decision / Rationale | P0 / MVP | Software: Protocol Adapter | Review, Analysis | Protocol / Integration QA | SAD, SDD, Verification | -| SysDes-079 | Architecture Decision / Rationale | P0 / MVP | Software: State Sync, System Engineering, Verification | Review, Analysis | Network / Reliability QA | SAD, SDD, Verification | -| SysDes-080 | Architecture Decision / Rationale | P0 / MVP | Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations | Review, Analysis | Security / QA | SAD, SDD, Verification | -| SysDes-081 | Architecture Decision / Rationale | P0 / MVP | Software: Audio Subsystem | Review, Analysis | Audio / Platform QA | SAD, SDD, Verification | -| SysDes-082 | Architecture Decision / Rationale | P0 / MVP | Platform | Review, Analysis | Protocol / Integration QA | SAD, SDD, Verification | -| SysDes-083 | Architecture Decision / Rationale | P0 / MVP | Software: Audio Subsystem | Review, Analysis | Audio / Platform QA | SAD, SDD, Verification | -| SysDes-084 | Architecture Decision / Rationale | P0 / MVP | Software: Protocol Adapter, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations | Review, Analysis | Security / QA | SAD, SDD, Verification | -| SysDes-085 | Non-functional Architecture Design | P0 / MVP | Software: Flutter UI, Software: Bridge, Software: Rust Core | Review | Network / Reliability QA | SRS, SAD, SDD, Verification | -| SysDes-086 | Non-functional Architecture Design | P0 / MVP | Hardware, Network, Software: Audio Subsystem, Platform | Test, Analysis | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-087 | Non-functional Architecture Design | P0 / MVP | Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification | Test, Analysis | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-088 | Non-functional Architecture Design | P0 / MVP | Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem | Test, Analysis | Audio / Platform QA | SRS, SAD, SDD, Verification | -| SysDes-089 | Non-functional Architecture Design | P0 / MVP | Platform Secure Storage, Software: Diagnostics, Verification | Audit | Security / QA | SRS, SAD, SDD, Verification | -| SysDes-090 | Non-functional Architecture Design | P0 / MVP | Platform, Software: Diagnostics, Verification | Audit | Security / QA | SRS, SAD, SDD, Verification | -| SysDes-091 | Non-functional Architecture Design | P0 / MVP | Software: Storage, Deployment / Operations, System Engineering, Verification | Inspection, Demo | Release / Operations QA | SRS, SAD, SDD, Verification | -| SysDes-092 | Traceability / Consistency Rule | P0 / MVP | System Engineering | Review, Inspection | Software QA | SysDes baseline, Verification | -| SysDes-093 | Traceability / Consistency Rule | P0 / MVP | System Engineering | Review, Inspection | Software QA | SysDes baseline, Verification | -| SysDes-094 | Traceability / Consistency Rule | P0 / MVP | System Engineering | Review, Inspection | Software QA | SysDes baseline, Verification | -| SysDes-095 | Traceability / Consistency Rule | P0 / MVP | System Engineering | Review, Inspection | Security / QA | SysDes baseline, Verification | -| SysDes-096 | Traceability / Consistency Rule | P0 / MVP | System Engineering | Review, Inspection | System Engineering / QA | SysDes baseline, Verification | -| SysDes-097 | Traceability / Consistency Rule | P0 / MVP | System Engineering, Verification | Review, Inspection | Software QA | SysDes baseline, Verification | -| SysDes-098 | Process / Description | P0 / MVP | Software: Rust Core, Software: Audio Subsystem, Deployment / Operations, System Engineering, Verification | Review, Inspection | Security / QA | SysDes baseline, Verification | -| SysDes-099 | Process / Description | P0 / MVP | System Engineering, Verification | Review, Inspection | System Engineering / Verification | SysDes baseline, Verification | -| SysDes-100 | Process / Description | P0 / MVP | System Engineering | Review, Inspection | System Engineering / QA | SysDes baseline, Verification | -| SysDes-101 | Process / Description | P0 / MVP | Software: Protocol Adapter, Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations, System Engineering, Verification | Review, Inspection | Security / QA | SysDes baseline, Verification | -| SysDes-102 | Verification Handoff | P0 / MVP | External Server, Software: Protocol Adapter | Test, Demo | Protocol / Integration QA | Verification | -| SysDes-103 | Verification Handoff | P0 / MVP | Software: State Sync | Test, Demo | Network / Reliability QA | Verification | -| SysDes-104 | Verification Handoff | P0 / MVP | Software: Audio Subsystem | Test, Demo | Audio / Platform QA | Verification | -| SysDes-105 | Verification Handoff | P0 / MVP | Platform Secure Storage, Software: Diagnostics, Verification | Audit | Security / QA | Verification | -| SysDes-106 | Verification Handoff | P0 / MVP | Software: Storage, Deployment / Operations | Inspection, Demo | Release / Operations QA | Verification | -| SysDes-107 | Verification Handoff | P0 / MVP | Verification | Test, Demo | Software QA | Verification | -| SysDes-108 | Traceability / Consistency Rule | P0 / MVP | System Engineering, Software Requirements Engineering, Verification | Review, Inspection | System Engineering / Verification | SRS, SAD, SDD, Verification | -| SysDes-109 | Allocation Rule | P0 / MVP | System Engineering, Software Requirements Engineering | Review, Inspection | System Engineering / Verification | SRS, SAD, SDD, Verification | -| SysDes-110 | Change Control / Traceability Rule | P0 / MVP | System Engineering, Software Requirements Engineering, Change Control, Verification | Review, Inspection | System Engineering / Verification | SRS, SAD, SDD, Verification | - -## Appendix A — Complete SysRS to SysDes Allocation Matrix - -This matrix provides explicit allocation for every SysRS requirement. It is the primary bidirectional traceability record for this SysDes. - -| SysRS ID | SysRS Requirement Summary | Allocated System Elements | Primary SysDes Design Items | -|---|---|---|---| - -| SysRS-001 | The Chanora application shall be a cross-platform client application for channel-based voice communication. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-14 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-002 | The Chanora application shall support Windows, macOS, Linux, iOS, and Android as target client platforms. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-03 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-003 | The Chanora application shall use Flutter for the user-facing client interface. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-08 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-004 | The Chanora application shall use Rust Core for protocol handling, connection management, state synchronization, audio processing, storage coordination, diagnostics, and business logic. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-05 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-005 | The Chanora application shall use `tsclientlib` as the TeamSpeak-compatible protocol client library. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-05 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-006 | The Chanora application shall operate as an independent client and shall not present itself as an official TeamSpeak product. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-007 | The Chanora application shall allow users to connect to TeamSpeak 3-compatible servers reachable from the client device network. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-05 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-008 | The Chanora application shall allow users to participate in channel-based voice communication when the external server and user permissions allow it. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-14 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-009 | The Chanora application shall allow users to send and receive supported text messages when the external server and user permissions allow it. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-010 | The Chanora application shall provide local bookmark, recent server, identity reference, UI setting, and audio setting management on the client device. | SE-06, SE-07, SE-10, SE-11, SE-13, SE-15, SE-16, SE-14 | SysDes-018, SysDes-024, SysDes-025, SysDes-028, SysDes-042 | - -| SysRS-011 | The Chanora application shall support end users who manually connect to compatible voice servers. | SE-01, SE-07, SE-17, SE-19, SE-13, SE-14, SE-02, SE-03 | SysDes-018, SysDes-019, SysDes-025, SysDes-035, SysDes-042 | - -| SysRS-012 | The Chanora application shall support regular users who rely on saved bookmarks, persistent identity, audio settings, and common voice controls. | SE-01, SE-07, SE-17, SE-19, SE-13, SE-14, SE-02, SE-03 | SysDes-018, SysDes-019, SysDes-025, SysDes-035, SysDes-042 | - -| SysRS-013 | The Chanora application shall support testers and support operators who export diagnostics for troubleshooting. | SE-01, SE-07, SE-17, SE-19 | SysDes-018, SysDes-019, SysDes-025, SysDes-035, SysDes-042 | - -| SysRS-014 | The SysRS shall provide requirements traceability suitable for engineering, QA, system administration, and release operations. | SE-01, SE-07, SE-17, SE-19 | SysDes-018, SysDes-019, SysDes-025, SysDes-035, SysDes-042 | - -| SysRS-015 | The SysRS shall document external environment dependencies that may need administrator configuration, including network reachability and OS-level audio permissions. | SE-01, SE-07, SE-17, SE-19, SE-13, SE-14, SE-02, SE-03 | SysDes-018, SysDes-019, SysDes-025, SysDes-035, SysDes-042 | - -| SysRS-016 | The Chanora application shall treat external TeamSpeak 3-compatible servers as external systems outside Chanora control. | SE-03, SE-04, SE-05, SE-14, SE-18, SE-11 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-017 | The Chanora application shall not require a Chanora-operated central server for MVP voice, channel, or text operation. | SE-03, SE-04, SE-05, SE-14, SE-18, SE-13, SE-02 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-018 | The Chanora application shall not host or operate TeamSpeak-compatible server functionality in the MVP. | SE-03, SE-04, SE-05, SE-14, SE-18, SE-11 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-019 | The Chanora application shall rely on operating system services for microphone permission, secure storage, audio routing, notifications, and mobile lifecycle behavior. | SE-03, SE-04, SE-05, SE-14, SE-18, SE-13, SE-02, SE-15 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-020 | The Chanora application shall treat app stores, package repositories, installers, and update services as deployment environment components. | SE-03, SE-04, SE-05, SE-14, SE-18 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-021 | The Chanora application shall treat physical microphones, speakers, wired headsets, USB audio devices, and Bluetooth audio devices as external hardware interfaces. | SE-03, SE-04, SE-05, SE-14, SE-18, SE-13, SE-02 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-022 | The Chanora application shall treat routers, firewalls, VPNs, NAT devices, and ISPs as external network environment components. | SE-03, SE-04, SE-05, SE-14, SE-18, SE-17 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-023 | The Chanora application shall expose user-safe errors when external dependencies prevent successful operation. | SE-03, SE-04, SE-05, SE-14, SE-18 | SysDes-018, SysDes-021, SysDes-022, SysDes-023, SysDes-042 | - -| SysRS-024 | The Chanora application shall include a Flutter UI component responsible for rendering screens, receiving user input, and presenting application state. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-025 | The Chanora application shall include a Flutter State Layer responsible for UI state derived from Rust Core events. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-026 | The Chanora application shall include a Bridge Layer responsible for commands, DTOs, asynchronous calls, and event streams between Flutter and Rust Core. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-027 | The Chanora application shall include a Rust Core component responsible for authoritative connection, protocol, state, audio, storage, settings, and diagnostics behavior. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-028 | The Chanora application shall include a protocol adapter component that isolates direct `tsclientlib` usage. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-029 | The Chanora application shall include a state synchronization component that implements snapshot + delta state handling. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-030 | The Chanora application shall include an audio subsystem component that coordinates capture, processing, encoding, decoding, jitter buffering, mixing, and playback. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-031 | The Chanora application shall include a local storage component for non-secret data such as bookmarks, recent servers, UI settings, and audio settings. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-032 | The Chanora application shall include a secure storage adapter for private identities, passwords, and future sensitive tokens. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-033 | The Chanora application shall include a diagnostics component for structured logging, redaction, event recording, event replay, audio diagnostics, network diagnostics, and user-initiated export. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-034 | The Chanora application shall include platform adapter components for desktop and mobile platform services. | SE-06, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-024, SysDes-025, SysDes-026, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-035 | The client device shall use a CPU architecture supported by Flutter, Rust, and the selected target platform. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-07, SE-08 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-036 | The client device shall provide sufficient CPU capacity to run the Chanora application, Opus-compatible voice processing, and enabled audio processing features in real time. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-037 | The client device shall provide sufficient memory for the Chanora application to run without unbounded growth in logs, chat history, audio buffers, or event queues. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-17 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-038 | The client device shall provide persistent local storage for Chanora application data, settings, logs, and cached metadata. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-15, SE-16 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-039 | The client device shall provide a microphone or supported audio input device for voice transmission. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-040 | The client device shall provide speakers, headphones, or a supported audio output device for voice playback. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-041 | The client device shall provide network connectivity to the selected compatible voice server. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-17 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-042 | The desktop client environment should be validated on devices with at least 4 GB RAM for MVP operation. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-043 | The desktop client environment should be validated with at least 500 MB free local storage for installation, settings, logs, and diagnostic bundle creation. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-15, SE-16 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-044 | The client device should provide stable audio device identifiers where the target platform supports persistent device selection. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-18 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-045 | The client device should provide hardware or OS support for low-latency audio capture and playback. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-17 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-046 | The client device should provide Bluetooth audio support where the target operating system supports it. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-047 | The project shall document platform-specific hardware limitations discovered during compatibility testing. | SE-02, SE-03, SE-04, SE-13, SE-14, SE-19, SE-18 | SysDes-020, SysDes-021, SysDes-022, SysDes-042, SysDes-045 | - -| SysRS-048 | The Windows runtime environment shall support native desktop window integration for the Chanora application. | SE-03, SE-14, SE-02, SE-18 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-049 | The Windows runtime environment shall provide microphone capture, speaker/headphone playback, audio device selection, and secure credential storage to the Chanora application. | SE-03, SE-14, SE-02, SE-18, SE-13, SE-15, SE-16, SE-17 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-050 | The macOS runtime environment shall support native desktop window integration for the Chanora application. | SE-03, SE-14, SE-02, SE-18 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-051 | The macOS runtime environment shall provide microphone permission prompts, microphone capture, speaker/headphone playback, audio device selection, and Keychain access to the Chanora application. | SE-03, SE-14, SE-02, SE-18, SE-13, SE-16, SE-17 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-052 | The Linux runtime environment shall support the desktop environments targeted by the selected release package. | SE-03, SE-14, SE-02, SE-18 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-053 | The Linux runtime environment shall provide microphone capture, speaker/headphone playback, audio device selection, and secure storage through Secret Service, libsecret, or equivalent where available. | SE-03, SE-14, SE-02, SE-18, SE-13, SE-15, SE-16, SE-17 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-054 | The iOS runtime environment shall provide microphone permissions, foreground voice session capability, audio route change handling, audio interruption recovery, Keychain access, and AVAudioSession behavior to the Chanora application. | SE-03, SE-14, SE-02, SE-18, SE-13, SE-16, SE-17 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-055 | The Android runtime environment shall provide microphone permissions, foreground voice session capability, foreground service behavior, audio focus, Bluetooth route handling, Android Keystore access, and production audio integration through AAudio, Oboe, or equivalent. | SE-03, SE-14, SE-02, SE-18, SE-13, SE-16, SE-17 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-056 | The project shall define minimum supported operating system versions for each target platform before beta release. | SE-03, SE-14, SE-02, SE-18 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-057 | The project shall document OS-level permissions required by each target platform before public release. | SE-03, SE-14, SE-02, SE-18 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-058 | The Chanora application shall fail safely with a user-safe message when a required OS service is unavailable. | SE-03, SE-14, SE-02, SE-18 | SysDes-020, SysDes-021, SysDes-032, SysDes-042, SysDes-045 | - -| SysRS-059 | The Chanora application shall support microphone input for voice transmission. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-060 | The Chanora application shall support speaker or headphone output for voice playback. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-061 | The Chanora application shall support audio input and output device selection where the target platform exposes selectable devices. | SE-02, SE-03, SE-13, SE-14, SE-18 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-062 | The Chanora application shall handle audio route changes where the target platform reports them. | SE-02, SE-03, SE-13, SE-14, SE-18 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-063 | The Chanora application shall recover gracefully from audio device changes where possible. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-064 | The Chanora application shall support Echo Canceller for reducing playback audio leaking into microphone input. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-065 | The Chanora application shall support Automatic Gain Control for normalizing microphone input level. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-066 | The Chanora application shall support Noise Suppression for reducing stationary background noise. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-067 | The Chanora application shall support High-Pass Filter for reducing low-frequency rumble and handling noise. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-068 | The Chanora application shall support an audio processing backend abstraction so platform-native and Rust-based processing can be selected per platform. | SE-02, SE-03, SE-13, SE-14, SE-18 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-069 | The Chanora application shall allow Echo Canceller to use playback reference audio when the selected implementation requires it. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-070 | The Chanora application shall expose audio processing settings to Rust Core and persist them locally. | SE-02, SE-03, SE-13, SE-14, SE-10, SE-15, SE-16 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-071 | The Chanora application shall provide conservative default settings for Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter. | SE-02, SE-03, SE-13, SE-14, SE-15, SE-16 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-072 | The Chanora application shall allow platform-specific disabling of audio processing features when a feature is unstable or incompatible with a device configuration. | SE-02, SE-03, SE-13, SE-14, SE-18 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-073 | The project shall provide an audio loopback test tool for development and compatibility testing. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-074 | The project shall provide an audio processing test tool for development and compatibility testing. | SE-02, SE-03, SE-13, SE-14 | SysDes-020, SysDes-021, SysDes-031, SysDes-041, SysDes-042 | - -| SysRS-075 | The client network environment shall provide IP network connectivity from the client device to the selected compatible voice server. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17, SE-13, SE-14 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-076 | The Chanora application shall allow the user to configure the server host or IP address. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-077 | The Chanora application shall allow the user to configure the server port. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-078 | The Chanora application should support a default TeamSpeak 3-compatible voice port when the user does not provide an explicit port. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17, SE-13, SE-14 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-079 | The client network environment shall permit the protocol traffic required by `tsclientlib` and the selected compatible server. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-080 | The client network environment shall support latency suitable for real-time voice communication under expected operating conditions. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17, SE-13, SE-14 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-081 | The client network environment should minimize packet loss for acceptable voice quality. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17, SE-13, SE-14 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-082 | The Chanora application shall detect recoverable network failures where possible. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-083 | The Chanora application shall enter reconnect behavior after recoverable network failures. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-084 | The Chanora application shall rebuild server state from a fresh snapshot after reconnect. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-085 | The Chanora application shall not require VPN connectivity unless the target server or user environment requires it. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-086 | The Chanora application shall present network failures through user-safe error messages. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-087 | The Chanora application should include network diagnostics in user-initiated diagnostic exports. | SE-04, SE-05, SE-10, SE-11, SE-12, SE-17, SE-19 | SysDes-022, SysDes-023, SysDes-028, SysDes-042, SysDes-045 | - -| SysRS-088 | The external voice server shall be TeamSpeak 3-compatible for Chanora MVP operation. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-089 | The external voice server shall be reachable from the client device network. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03, SE-04 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-090 | The external voice server shall permit client connection using the identity, nickname, password, and permissions supplied by the user. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03, SE-16 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-091 | The external voice server shall expose server information required for initial synchronization. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-092 | The external voice server shall expose channel listing required for the channel tree. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-093 | The external voice server shall expose client listing required for the online client view. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-094 | The external voice server shall support channel join operations for accessible channels. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-095 | The external voice server shall emit channel movement events required for state synchronization. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-096 | The external voice server shall emit client join and leave events required for state synchronization. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-097 | The external voice server shall emit channel create, update, and delete events required for state synchronization where those events occur. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-098 | The external voice server shall support channel text message send and receive where user permissions allow. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-099 | The external voice server shall support voice packet send and receive where user permissions allow. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03, SE-04 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-100 | The external voice server shall expose disconnect behavior or connection failure signals that can be mapped by the protocol adapter. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-101 | The project shall document server-side permissions that can affect channel join, voice transmission, and text messaging. | SE-05, SE-11, SE-12, SE-13, SE-14, SE-02, SE-03 | SysDes-023, SysDes-029, SysDes-030, SysDes-042, SysDes-045 | - -| SysRS-102 | The Chanora application shall allow the user to manually connect to a compatible server. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-103 | The Chanora application shall allow the user to provide hostname or IP address, port, nickname, and optional server password before connection. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-104 | The Chanora application shall support persistent local identity for compatible server authentication. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-105 | The Chanora application shall display connection status to the user. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-106 | The Chanora application shall allow the user to disconnect from the active server connection. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-107 | The Chanora application shall display the server channel tree after synchronization. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-108 | The Chanora application shall display online clients after synchronization. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-109 | The Chanora application shall allow the user to join an accessible voice channel. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-110 | The Chanora application shall allow the user to send and receive channel text messages where permitted. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-111 | The Chanora application shall capture and transmit voice where permitted. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-112 | The Chanora application shall receive and play voice where permitted. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-113 | The Chanora application shall provide microphone mute control. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-114 | The Chanora application shall provide output deaf control. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-115 | The Chanora application shall provide push-to-talk control. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-116 | The Chanora application shall display microphone input level where available. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-117 | The Chanora application shall display speaking indicators where available. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-118 | The Chanora application shall allow users to save and reuse server bookmarks. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-119 | The Chanora application shall allow users to configure audio processing features. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-120 | The Chanora application shall allow users to export redacted diagnostics. | SE-01, SE-07, SE-08, SE-09, SE-10, SE-11, SE-12, SE-13 | SysDes-019, SysDes-025, SysDes-026, SysDes-042, SysDes-044 | - -| SysRS-121 | The Chanora application shall use `tsclientlib` inside the protocol subsystem. | SE-11, SE-19, SE-05 | SysDes-023, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-122 | The Chanora application shall isolate direct `tsclientlib` calls inside the `chanora_protocol` component. | SE-11, SE-19, SE-05 | SysDes-023, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-123 | The Chanora application shall prevent raw `tsclientlib` types from crossing into Flutter UI or Flutter State Layer. | SE-11, SE-19, SE-07, SE-08, SE-09, SE-05 | SysDes-025, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-124 | The Chanora application shall convert `tsclientlib` errors into Chanora protocol errors. | SE-11, SE-19, SE-05 | SysDes-023, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-125 | The Chanora application shall convert `tsclientlib` events into internal protocol events. | SE-11, SE-19, SE-05 | SysDes-023, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-126 | The Chanora application shall support future patching, replacement, or forking of protocol implementation without changing Flutter UI contracts. | SE-11, SE-19, SE-07, SE-08, SE-09, SE-05 | SysDes-025, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-127 | The project shall provide protocol compatibility test coverage for MVP features. | SE-11, SE-19, SE-05 | SysDes-023, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-128 | The project shall include a protocol probe tool for validating target server compatibility. | SE-11, SE-19, SE-05 | SysDes-023, SysDes-029, SysDes-037, SysDes-040, SysDes-042 | - -| SysRS-129 | The Chanora application shall maintain one authoritative connection state per active server connection. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-130 | The Chanora application shall synchronize state using a snapshot + delta model. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-131 | The Chanora application shall emit a full snapshot after initial synchronization. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-132 | The Chanora application shall emit delta events after live server-side changes. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-133 | The Chanora application shall apply protocol events through deterministic reducers. | SE-10, SE-12, SE-09, SE-19, SE-11, SE-05 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-134 | The Chanora application shall preserve event ordering per connection. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-135 | The Chanora application shall rebuild state from a fresh snapshot after reconnect. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-136 | The Chanora application shall prevent Flutter from directly mutating server state. | SE-10, SE-12, SE-09, SE-19, SE-07, SE-08 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-137 | The Chanora application shall implement the defined connection state machine from Disconnected through Connecting, Synchronizing, Connected, and Reconnecting. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-138 | The Chanora application shall not automatically reconnect after user-triggered disconnect. | SE-10, SE-12, SE-09, SE-19 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-139 | The project shall include an event replay tool for development and debugging of state synchronization. | SE-10, SE-12, SE-09, SE-19, SE-17 | SysDes-027, SysDes-028, SysDes-030, SysDes-042 | - -| SysRS-140 | The Chanora application shall store server bookmarks locally. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-141 | The Chanora application shall store recent servers locally. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-142 | The Chanora application shall store audio settings locally. | SE-15, SE-16, SE-17, SE-14, SE-13, SE-02, SE-03 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-143 | The Chanora application shall store UI settings locally. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-144 | The Chanora application shall store per-user volume preferences locally where applicable. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-145 | The Chanora application shall store muted user preferences locally where applicable. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-146 | The Chanora application shall use SQLite or an equivalent embedded database for non-secret local data. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-147 | The Chanora application shall use platform secure storage for sensitive data. | SE-15, SE-16, SE-17, SE-14, SE-03, SE-18 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-148 | The Chanora application shall store identity private keys using platform secure storage. | SE-15, SE-16, SE-17, SE-14, SE-03, SE-18 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-149 | The Chanora application shall store server passwords using platform secure storage. | SE-15, SE-16, SE-17, SE-14, SE-03, SE-18 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-150 | The Chanora application shall not store private keys in plaintext files. | SE-15, SE-16, SE-17, SE-14 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-151 | The Chanora application shall not write passwords to logs. | SE-15, SE-16, SE-17, SE-14, SE-19 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-152 | The Chanora application shall redact secrets from diagnostic exports. | SE-15, SE-16, SE-17, SE-14, SE-19 | SysDes-033, SysDes-034, SysDes-035, SysDes-042, SysDes-046 | - -| SysRS-153 | The Chanora application shall store sensitive data using platform secure storage. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-154 | The Chanora application shall redact secrets from logs. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-155 | The Chanora application shall redact secrets from diagnostic bundles. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-156 | The Chanora application shall avoid exposing internal stack traces to normal users. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-157 | The Chanora application shall validate user input before passing it to protocol operations. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-11, SE-05 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-158 | The Windows runtime environment shall support Windows Credential Manager, DPAPI, or equivalent secure credential storage for the Chanora application. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-159 | The macOS runtime environment shall support Keychain-based secure credential storage for the Chanora application. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-160 | The iOS runtime environment shall support Keychain-based secure credential storage for the Chanora application. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-161 | The Android runtime environment shall support Android Keystore or equivalent secure credential storage for the Chanora application. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-162 | The Linux runtime environment shall support Secret Service, libsecret, or equivalent secure storage where available. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-163 | The Chanora application shall minimize collection of personal data. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-164 | The Chanora application shall require user action before exporting diagnostics. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-165 | The Chanora application shall explain microphone permission usage before requesting permission where platform guidelines allow. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-13, SE-14 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-166 | The Chanora application shall explain notification permission usage before requesting permission where platform guidelines allow. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19, SE-14, SE-18 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-167 | The Chanora application shall not automatically upload diagnostics in MVP. | SE-03, SE-07, SE-15, SE-16, SE-17, SE-19 | SysDes-021, SysDes-025, SysDes-033, SysDes-042, SysDes-046 | - -| SysRS-168 | The Chanora application shall produce structured diagnostic logs. | SE-17, SE-19 | SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-169 | The Chanora application shall support log redaction. | SE-17, SE-19, SE-16 | SysDes-034, SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-170 | The Chanora application shall support protocol event recording in development or diagnostics mode. | SE-17, SE-19, SE-11, SE-05 | SysDes-029, SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-171 | The Chanora application shall support event replay for debugging state synchronization. | SE-17, SE-19 | SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-172 | The Chanora application shall support audio diagnostics. | SE-17, SE-19, SE-13, SE-14, SE-02, SE-03 | SysDes-031, SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-173 | The Chanora application shall support network diagnostics. | SE-17, SE-19, SE-04 | SysDes-022, SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-174 | The Chanora application shall support user-initiated diagnostic export. | SE-17, SE-19 | SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-175 | Diagnostic export shall exclude or redact sensitive data. | SE-17, SE-19, SE-16 | SysDes-034, SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-176 | The project shall document the expected support workflow for diagnostic bundle collection. | SE-17, SE-19 | SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-177 | The project shall include compatibility test tracking for supported platforms. | SE-17, SE-19, SE-03, SE-14, SE-18 | SysDes-021, SysDes-035, SysDes-037, SysDes-042 | - -| SysRS-178 | The Chanora application shall keep the UI responsive during connection, synchronization, and reconnect. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-179 | The Chanora application shall avoid visible UI freezes longer than 100 ms during normal operation. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-180 | The Chanora application shall minimize local audio pipeline latency. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-14 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-181 | The Chanora application should target local audio pipeline latency under 100 ms where platform conditions permit. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-14 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-182 | The Chanora application shall avoid unbounded memory growth in chat history. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-183 | The Chanora application shall avoid unbounded memory growth in logs. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-17 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-184 | The Chanora application shall avoid unbounded memory growth in audio buffers. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-14 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-185 | The Chanora application shall avoid unbounded memory growth in event queues. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-186 | The Chanora application shall perform required audio processing without sustained underruns on supported devices. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-14 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-187 | The Chanora application shall keep reconnect processing non-blocking for UI interaction. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-188 | The Chanora application shall recover from transient network loss where possible. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-17 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-189 | The Chanora application shall recover gracefully from audio device changes where possible. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-14 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-190 | The Chanora application shall isolate connection failures to the affected connection. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-191 | The Chanora application shall avoid crashing on malformed or unexpected protocol events. | SE-02, SE-04, SE-07, SE-10, SE-11, SE-12, SE-13, SE-05 | SysDes-020, SysDes-022, SysDes-025, SysDes-039, SysDes-041, SysDes-042 | - -| SysRS-192 | The project shall support Windows installer packaging for the Chanora application. | SE-18, SE-19, SE-03, SE-14 | SysDes-021, SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-193 | The project shall support macOS signed and notarized builds for the Chanora application. | SE-18, SE-19, SE-03, SE-14 | SysDes-021, SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-194 | The project shall support Linux packaging through AppImage, Flatpak, deb, rpm, or a selected subset. | SE-18, SE-19, SE-03, SE-14 | SysDes-021, SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-195 | The project shall support Android AAB release builds for the Chanora application. | SE-18, SE-19, SE-03, SE-14 | SysDes-021, SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-196 | The project shall support iOS TestFlight and App Store release builds for the Chanora application. | SE-18, SE-19, SE-03, SE-14 | SysDes-021, SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-197 | The project shall document platform signing, packaging, and release requirements before public release. | SE-18, SE-19, SE-03, SE-14 | SysDes-021, SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-198 | The project shall ensure release metadata does not imply official TeamSpeak affiliation. | SE-18, SE-19 | SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-199 | The project shall define release channels for internal, beta, and production builds before external testing. | SE-18, SE-19 | SysDes-036, SysDes-037, SysDes-042 | - -| SysRS-200 | The Chanora application shall provide a user interface for manual server connection. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-201 | The Chanora application shall provide a user interface for bookmark management. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-202 | The Chanora application shall provide a user interface for channel tree navigation. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-203 | The Chanora application shall provide a user interface for chat. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-204 | The Chanora application shall provide a user interface for voice controls. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-205 | The Chanora application shall provide a user interface for audio processing settings. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-206 | The Chanora application shall provide a bridge interface between Flutter and Rust Core. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-207 | The Chanora application shall provide a protocol interface between Rust Core and `tsclientlib`. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-208 | The Chanora application shall provide an audio hardware interface through platform capture and playback adapters. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-209 | The Chanora application shall provide secure storage interfaces through platform-specific secure storage mechanisms. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-210 | The Chanora application shall provide a network interface to external TeamSpeak 3-compatible servers through `tsclientlib`. | SE-01, SE-03, SE-04, SE-05, SE-07, SE-09, SE-10, SE-11 | SysDes-019, SysDes-021, SysDes-022, SysDes-038, SysDes-039, SysDes-042 | - -| SysRS-211 | The Chanora application shall not directly expose raw `tsclientlib` types to Flutter. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19, SE-08 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-212 | The Chanora application shall not store private keys in plaintext files. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-213 | The Chanora application shall not write passwords to logs. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-214 | The Chanora application shall not imply official TeamSpeak affiliation in UI, documentation, or release metadata. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-215 | The Chanora application shall not automatically upload diagnostic information in MVP. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-216 | The Chanora application shall comply with iOS background execution policies. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19, SE-03 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-217 | The Chanora application shall comply with Android foreground service requirements for active voice sessions. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19, SE-13 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-218 | The MVP shall not require Chanora-operated backend infrastructure for voice, channels, or text. | SE-07, SE-11, SE-15, SE-16, SE-17, SE-18, SE-19, SE-13 | SysDes-025, SysDes-029, SysDes-033, SysDes-040, SysDes-042, SysDes-046 | - -| SysRS-219 | The selected `tsclientlib` version can support or be extended to support required MVP protocol features. | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19 | SysDes-022, SysDes-023, SysDes-029, SysDes-037, SysDes-042 | - -| SysRS-220 | Required audio processing features can be implemented through a combination of platform-native APIs, Rust DSP, and external audio processing libraries. | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19, SE-02, SE-03 | SysDes-022, SysDes-023, SysDes-029, SysDes-037, SysDes-042 | - -| SysRS-221 | Mobile foreground voice behavior is sufficient for MVP. | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19, SE-02, SE-03 | SysDes-022, SysDes-023, SysDes-029, SysDes-037, SysDes-042 | - -| SysRS-222 | Background voice behavior will remain constrained by iOS and Android platform policies. | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19, SE-02, SE-03 | SysDes-022, SysDes-023, SysDes-029, SysDes-037, SysDes-042 | - -| SysRS-223 | External compatible server administrators are responsible for server availability, permissions, and configuration. | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19 | SysDes-022, SysDes-023, SysDes-029, SysDes-037, SysDes-042 | - -| SysRS-224 | End users are responsible for providing valid server connection details and network access. | SE-04, SE-05, SE-11, SE-13, SE-14, SE-19, SE-17 | SysDes-022, SysDes-023, SysDes-029, SysDes-037, SysDes-042 | - -| SysRS-225 | The MVP shall not include TeamSpeak-compatible server hosting functionality. | SE-06, SE-13, SE-19, SE-11, SE-05 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-226 | The MVP shall not include full server administration functionality. | SE-06, SE-13, SE-19 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-227 | The MVP shall not include a complete permission editor. | SE-06, SE-13, SE-19 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-228 | The MVP shall not include a plugin system. | SE-06, SE-13, SE-19 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-229 | The MVP shall not include 3D positional audio unless explicitly reprioritized. | SE-06, SE-13, SE-19, SE-14, SE-02, SE-03 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-230 | The MVP shall not include advanced whisper list management unless explicitly reprioritized. | SE-06, SE-13, SE-19 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-231 | The MVP shall not include Server Query administration tools. | SE-06, SE-13, SE-19 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-232 | The MVP shall not include automatic cloud sync of bookmarks, identities, settings, or diagnostics. | SE-06, SE-13, SE-19, SE-15, SE-16, SE-17 | SysDes-024, SysDes-031, SysDes-037, SysDes-042 | - -| SysRS-233 | The project shall maintain a requirements traceability matrix from SysRS requirements through SysDes, SRS, SAD, SDD, and Verification evidence. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-234 | The project shall verify protocol compatibility through a protocol probe tool. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19, SE-05 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-235 | The project shall verify state synchronization through reducer tests and event replay tests. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-236 | The project shall verify audio capture, processing, encode/decode, and playback through audio loopback and processing tests. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19, SE-14 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-237 | The project shall verify secure storage behavior on every target platform before public release. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19, SE-15 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-238 | The project shall verify diagnostic redaction before enabling diagnostic export for external testers. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-239 | The project shall verify release packaging on every target platform before production release. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19, SE-03 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-240 | The project shall verify that public wording does not imply official TeamSpeak affiliation. | SE-11, SE-12, SE-13, SE-16, SE-17, SE-18, SE-19 | SysDes-029, SysDes-030, SysDes-031, SysDes-037, SysDes-042, SysDes-108, SysDes-109, SysDes-110 | - -| SysRS-241 | The MVP shall connect to a TeamSpeak 3-compatible server using `tsclientlib`. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-242 | The MVP shall display the server channel tree. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-243 | The MVP shall display online clients. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-244 | The MVP shall allow the user to join a voice channel. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-245 | The MVP shall send voice. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-246 | The MVP shall receive voice. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-247 | The MVP shall support microphone mute. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-248 | The MVP shall support output deaf. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-249 | The MVP shall support push-to-talk. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-250 | The MVP shall support Echo Canceller. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-251 | The MVP shall support Automatic Gain Control. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-252 | The MVP shall support Noise Suppression. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-253 | The MVP shall support High-Pass Filter. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-254 | The MVP shall send and receive channel text messages. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-255 | The MVP shall save and reuse server bookmarks. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-256 | The MVP shall use secure storage for sensitive data. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - -| SysRS-257 | The MVP shall export redacted diagnostic logs. | SE-07, SE-10, SE-11, SE-12, SE-13, SE-15, SE-16, SE-17 | SysDes-025, SysDes-028, SysDes-029, SysDes-042, SysDes-047 | - - -## Appendix B — ASPICE SYS.3 Base Practice Coverage - -| ASPICE SYS.3 area | Evidence in this SysDes | -|---|---| -| BP1 Static aspects of system architecture | Sections 4, 5, 6 and Appendix A define system boundary, system elements, relationships, and interfaces. | -| BP2 Dynamic aspects of system architecture | Section 7 defines states, modes, and major interaction flows. | -| BP3 Analyze system architecture | Sections 3, 8, and 9 define criteria, rationale, special characteristics, performance, reliability, security, privacy, and deployment analysis. | -| BP4 Consistency and bidirectional traceability | Sections 5 and 10 plus Appendix A allocate every SysRS requirement to system elements and design items; Section 1.5 and SysDes-108 through SysDes-110 define the downstream SRS derivation rule. | -| BP5 Communicate agreed system architecture | Section 11 defines review, agreement, communication, baselining, and affected parties. | - ---- - -## Appendix C — Open Architecture Issues - -| Issue ID | Issue | Owner | Target Resolution | -|---|---|---|---| -| OAI-001 | Confirm selected `tsclientlib` version and feature coverage. | Protocol owner | Before SRS baseline | -| OAI-002 | Decide audio processing backend per platform. | Audio owner | Before SAD baseline | -| OAI-003 | Decide minimum supported iOS and Android versions. | Platform owner | Before SRS baseline | -| OAI-004 | Decide whether multiple simultaneous server connections are in MVP. | Product owner | Before SRS baseline | -| OAI-005 | Confirm legal wording for compatible server claims. | Product/legal owner | Before release verification | -| OAI-006 | Confirm secure storage implementation details per platform. | Security/platform owner | Before SDD baseline | - ---- - -## Appendix D — Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-13 | Initial SysDes draft from SysRS | -| 0.2.0 | 2026-05-13 | Updated IDs to SysDes-XXX | -| 0.3.0 | 2026-05-13 | Reworked to follow ASPICE SYS.3 System Architectural Design structure and cover all SysRS IDs | -| 0.4.0 | 2026-05-13 | Added Type, Stage, Allocation, Downstream Artifact, Verification Method, and Verification Owner attributes to all SysDes design items | -| 0.5.0 | 2026-05-13 | Added downstream SRS derivation rule: SRS shall trace directly to SysDes only; if software needs cannot be derived from SysDes, update SysDes first | - - ---- - -## 14. UI/UX, Platform Adaptation, and Internationalization Architecture Addendum - -The following `SysDes-XXX` items extend the SYS.3 System Architectural Design baseline. They allocate `SysRS-258` through `SysRS-285` to system elements and define the downstream software-design handoff. This addendum preserves the strict lifecycle traceability chain: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -``` - -SRS items shall derive from `SysDes-XXX` only. SAD items shall derive from `SRS-XXX` only. SDD items shall derive from `SAD-XXX` only. - -**SysDes-111**: The system architecture shall adopt Material 3 as the baseline UI design system for the Flutter client and shall define Chanora-specific UI semantics above it. - -- Status: Baseline -- Type: Architecture Decision / Rationale -- Stage: P0 / MVP -- Allocated to: Flutter UI, Design System -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Software QA -- ASPICE SYS.3 alignment: Architecture analysis, static architecture -- Allocated SysRS: SysRS-258, SysRS-259 - -**SysDes-112**: The system architecture shall allocate Material 3 theming to a dedicated Design System element rather than to feature screens. - -- Status: Baseline -- Type: Allocation Rule -- Stage: P0 / MVP -- Allocated to: Design System, Flutter UI -- Downstream artifact: SRS, SAD, SDD -- Verification method: Review, Inspection -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Static architecture, consistency -- Allocated SysRS: SysRS-258, SysRS-259, SysRS-284 - -**SysDes-113**: The Design System element shall own `ThemeData`, `ColorScheme`, typography mapping, shape mapping, elevation mapping, motion mapping, and product semantic token mapping. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Design System -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Static architecture -- Allocated SysRS: SysRS-258, SysRS-259, SysRS-284 - -**SysDes-114**: The system architecture shall define Chanora semantic tokens for connection state, voice state, latency state, channel state, diagnostics state, and accessibility state. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Design System -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection, Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Static architecture, analysis -- Allocated SysRS: SysRS-259, SysRS-263, SysRS-284 - -**SysDes-115**: The system architecture shall allocate compact, medium, and expanded layout selection to an Adaptive Shell element. - -- Status: Baseline -- Type: Static Architecture Design -- Stage: P0 / MVP -- Allocated to: Flutter UI, Adaptive Shell -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Test, Demo -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Static architecture, dynamic architecture -- Allocated SysRS: SysRS-260, SysRS-261 - -**SysDes-116**: The Adaptive Shell shall keep connection status and primary voice controls visible or directly reachable across compact, medium, and expanded layouts. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Flutter UI, Adaptive Shell, Voice UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: System Test, Demo -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Dynamic architecture -- Allocated SysRS: SysRS-260, SysRS-261 - -**SysDes-117**: The system architecture shall allocate accessibility semantics, non-color-only state expression, text scaling, and focus visibility to the Flutter UI and Design System elements. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P0 / MVP -- Allocated to: Flutter UI, Design System, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Accessibility Test, Review -- Verification owner: Software QA / Accessibility QA -- ASPICE SYS.3 alignment: Architecture analysis, consistency -- Allocated SysRS: SysRS-262, SysRS-263, SysRS-264, SysRS-265, SysRS-282 - -**SysDes-118**: The platform architecture shall allocate safe areas, display cutouts, system bars, virtual keyboards, desktop insets, Android back behavior, and iOS navigation behavior to Platform Adapter and Flutter Shell elements. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Platform Adapter, Flutter Shell -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Platform Test, Integration Test -- Verification owner: Platform QA -- ASPICE SYS.3 alignment: Interface definition, dynamic architecture -- Allocated SysRS: SysRS-266, SysRS-267, SysRS-268 - -**SysDes-119**: The system architecture shall allocate user-visible string localization to a Localization Service used by Flutter UI and diagnostics presentation. - -- Status: Baseline -- Type: System Element Allocation -- Stage: P0 / MVP -- Allocated to: Localization Service, Flutter UI, Diagnostics -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Static architecture, interface definition -- Allocated SysRS: SysRS-269, SysRS-270, SysRS-271, SysRS-272, SysRS-279, SysRS-280, SysRS-282 - -**SysDes-120**: The system architecture shall allocate server-provided names and messages to a Content Text path that is displayed without product localization or translation. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Rust Core, Flutter UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test, System Test -- Verification owner: Protocol / Software QA -- ASPICE SYS.3 alignment: Interface definition, dynamic architecture -- Allocated SysRS: SysRS-273, SysRS-281 - -**SysDes-121**: The system architecture shall standardize UTF-8 as the internal text representation across Flutter, Rust Core, storage, diagnostics, and protocol-facing adapter DTOs. - -- Status: Baseline -- Type: Architectural Constraint -- Stage: P0 / MVP -- Allocated to: Flutter UI, Bridge, Rust Core, Storage, Diagnostics, Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Software QA / Protocol QA -- ASPICE SYS.3 alignment: Interface definition, consistency -- Allocated SysRS: SysRS-274, SysRS-276 - -**SysDes-122**: The system architecture shall isolate non-UTF-8 or platform-specific string conversion at explicit boundary adapters. - -- Status: Baseline -- Type: Interface Design -- Stage: P1 / Beta -- Allocated to: Protocol Adapter, Platform Adapter, Bridge -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Integration Test -- Verification owner: Protocol / Platform QA -- ASPICE SYS.3 alignment: Interface definition, architecture analysis -- Allocated SysRS: SysRS-275 - -**SysDes-123**: The system architecture shall allocate bidirectional text rendering and locale-aware formatting to Flutter UI and Localization Service components. - -- Status: Baseline -- Type: Non-functional Architecture Design -- Stage: P1 / Beta -- Allocated to: Flutter UI, Localization Service -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Static architecture, dynamic architecture -- Allocated SysRS: SysRS-277, SysRS-278 - -**SysDes-124**: The diagnostics architecture shall keep machine-readable diagnostic keys language-neutral while allowing user-facing descriptions to be localized. - -- Status: Baseline -- Type: Interface Design -- Stage: P1 / Beta -- Allocated to: Diagnostics, Localization Service -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Inspection, Test -- Verification owner: Diagnostics QA -- ASPICE SYS.3 alignment: Interface definition, consistency -- Allocated SysRS: SysRS-276, SysRS-280 - -**SysDes-125**: The system architecture shall define UI/UX guideline, design token, component catalog, adaptive layout, and platform behavior documents as downstream design baselines. - -- Status: Baseline -- Type: Process / Description -- Stage: P1 / Beta -- Allocated to: System Engineering, UX, Software Team -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review -- Verification owner: System Engineering -- ASPICE SYS.3 alignment: Communication of agreed architecture -- Allocated SysRS: SysRS-283, SysRS-284 - -**SysDes-126**: The system architecture shall enforce lifecycle traceability so that SysDes covers SysRS, SRS covers software-related SysDes, SAD covers SRS, and SDD covers SAD. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: System Engineering, Software Engineering, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Inspection -- Verification owner: System Engineering / Verification -- ASPICE SYS.3 alignment: Traceability and consistency -- Allocated SysRS: SysRS-285 - -**SysDes-127**: The system architecture shall prevent SRS requirements from linking directly to SysRS IDs; SRS shall use `Source SysDes` only. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: Software Engineering, System Engineering -- Downstream artifact: SRS -- Verification method: Inspection -- Verification owner: System Engineering / Software QA -- ASPICE SYS.3 alignment: Traceability and consistency -- Allocated SysRS: SysRS-285 - -**SysDes-128**: The system architecture shall prevent SAD architecture items from linking directly to SysRS or SysDes IDs; SAD shall use `Source SRS` only. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: Software Architecture, System Engineering -- Downstream artifact: SAD -- Verification method: Inspection -- Verification owner: System Engineering / Software QA -- ASPICE SYS.3 alignment: Traceability and consistency -- Allocated SysRS: SysRS-285 - -**SysDes-129**: The system architecture shall prevent SDD detailed design items from linking directly to SysRS, SysDes, or SRS IDs; SDD shall use `Source SAD` only. - -- Status: Baseline -- Type: Traceability / Consistency Rule -- Stage: P0 / MVP -- Allocated to: Software Design, System Engineering -- Downstream artifact: SDD -- Verification method: Inspection -- Verification owner: System Engineering / Software QA -- ASPICE SYS.3 alignment: Traceability and consistency -- Allocated SysRS: SysRS-285 - -**SysDes-130**: The system architecture shall allocate localized accessibility labels for icon-only controls to the Design System and Localization Service. - -- Status: Baseline -- Type: Interface Design -- Stage: P0 / MVP -- Allocated to: Design System, Localization Service, Flutter UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Accessibility Test, Inspection -- Verification owner: Software QA / Accessibility QA -- ASPICE SYS.3 alignment: Interface definition, consistency -- Allocated SysRS: SysRS-262, SysRS-269, SysRS-282 - -**SysDes-131**: The system architecture shall allocate language fallback behavior to the Localization Service and require deterministic fallback to the baseline product language. - -- Status: Baseline -- Type: Functional Dynamic Design -- Stage: P0 / MVP -- Allocated to: Localization Service -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Dynamic architecture -- Allocated SysRS: SysRS-271, SysRS-279 - -**SysDes-132**: The system architecture shall allocate theme and localization initialization to application startup before feature screens render user-visible content. - -- Status: Baseline -- Type: Dynamic Architecture -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Design System, Localization Service -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test -- Verification owner: Software QA -- ASPICE SYS.3 alignment: Dynamic architecture -- Allocated SysRS: SysRS-258, SysRS-269, SysRS-270, SysRS-279 - -## 15. Updated SysRS to SysDes Coverage Statement - -This SysDes version covers all known SysRS requirements from `SysRS-001` through `SysRS-285`. - -| SysRS Range | SysDes Coverage | -|---|---| -| SysRS-001 through SysRS-257 | Covered by inherited SysDes baseline `SysDes-001` through `SysDes-110` | -| SysRS-258 through SysRS-285 | Covered by `SysDes-111` through `SysDes-132` | - -## Appendix E — Change History - -| Version | Date | Description | -|---|---|---| -| 0.6.0 | 2026-05-14 | Added Material 3, Chanora Design System, adaptive layout, accessibility, platform UI behavior, localization, Unicode, and strict layer-by-layer traceability architecture items. | - ---- - -## 16. Platform Baseline and Product Decision Architecture Addendum - -**SysDes-133**: The system architecture shall allocate iOS runtime minimum version policy to platform configuration, platform verification, release readiness, and iOS platform services. - -- Status: Baseline Candidate -- Type: Platform Architecture Decision -- Stage: P0 / MVP -- Allocated to: Platform Adapter, Release / Operations, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Platform Test -- Verification owner: Platform QA -- ASPICE SYS.3 alignment: Static architecture, consistency -- Allocated SysRS: SysRS-286 - -**SysDes-134**: The system architecture shall allocate Apple App Store Connect upload SDK compliance to release engineering and release readiness rather than runtime feature logic. - -- Status: Baseline Candidate -- Type: Release Architecture Decision -- Stage: P0 / MVP -- Allocated to: Release / Operations, iOS Build Configuration, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Release Inspection -- Verification owner: Release Manager -- ASPICE SYS.3 alignment: Architecture constraints, communication -- Allocated SysRS: SysRS-287 - -**SysDes-135**: The system architecture shall allocate Android minimum runtime version policy and Google Play target SDK compliance to Android platform configuration, platform verification, and release readiness. - -- Status: Baseline Candidate -- Type: Platform Architecture Decision -- Stage: P0 / MVP -- Allocated to: Platform Adapter, Android Build Configuration, Release / Operations, Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Platform Test, Release Inspection -- Verification owner: Android Owner / Release Manager -- ASPICE SYS.3 alignment: Architecture constraints, consistency -- Allocated SysRS: SysRS-288, SysRS-289 - -**SysDes-136**: The system architecture shall constrain MVP runtime state, UI, audio routing, and protocol orchestration to one active server connection per client instance. - -- Status: Baseline Candidate -- Type: Functional Architecture Decision -- Stage: P0 / MVP -- Allocated to: Rust Core, Flutter UI, State Sync, Audio Subsystem, Protocol Adapter -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, System Test -- Verification owner: System Engineering / QA -- ASPICE SYS.3 alignment: Static architecture, dynamic architecture -- Allocated SysRS: SysRS-290 - -**SysDes-137**: The system architecture shall allocate AEC, AGC, Noise Suppression, and High-Pass Filter default enablement to the audio subsystem with platform capability detection and user-setting control. - -- Status: Baseline Candidate -- Type: Audio Architecture Decision -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Audio, Settings UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Audio Test, Review -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: Dynamic architecture, architecture analysis -- Allocated SysRS: SysRS-291 - -**SysDes-138**: The system architecture shall prefer platform-native audio processing for MVP and isolate any Rust/WebRTC-style fallback behind the audio subsystem boundary. - -- Status: Baseline Candidate -- Type: Audio Architecture Decision -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Platform Audio Adapter, Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Architecture Review, Audio Test -- Verification owner: Software Architect / Audio Owner -- ASPICE SYS.3 alignment: Architecture analysis, interface definition -- Allocated SysRS: SysRS-292 - -**SysDes-139**: The system architecture shall allocate non-secret local state to SQLite or an equivalent embedded database and secrets to platform secure storage. - -- Status: Baseline Candidate -- Type: Storage Architecture Decision -- Stage: P0 / MVP -- Allocated to: Storage, Platform Secure Storage, Security -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Storage Test, Security Audit -- Verification owner: Storage Owner / Security -- ASPICE SYS.3 alignment: Static architecture, interface definition -- Allocated SysRS: SysRS-293 - -**SysDes-140**: The system architecture shall allocate Flutter/Rust communication to a stable typed bridge with generated or schema-controlled DTOs. - -- Status: Baseline Candidate -- Type: Interface Architecture Decision -- Stage: P0 / MVP -- Allocated to: Bridge, Flutter State, Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Architecture Review, Integration Test -- Verification owner: Software Architect -- ASPICE SYS.3 alignment: Interface definition, consistency -- Allocated SysRS: SysRS-294 - -**SysDes-141**: The system architecture shall exclude automatic diagnostic upload, telemetry upload, and automatic crash reporting from MVP runtime behavior unless a later approved decision updates privacy, security, legal, release, and verification baselines. - -- Status: Baseline Candidate -- Type: Privacy Architecture Decision -- Stage: P0 / MVP -- Allocated to: Diagnostics, Privacy, Release / Operations, Security -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Privacy Review, Security Audit -- Verification owner: Security / Privacy Reviewer -- ASPICE SYS.3 alignment: Architecture constraints, communication -- Allocated SysRS: SysRS-295 - -**SysDes-142**: The desktop Push-to-Talk subsystem shall be allocated to a dedicated **Platform PTT Backend** layer that is selected at runtime per operating system, display server, and granted permission set, with the **Rust Core PTT State Machine** owning the authoritative `transmit_active` flag and the Flutter Voice UI owning the binding-capture UX. - -- Status: Baseline Candidate -- Type: Subsystem Allocation -- Stage: P0 / MVP -- Allocated to: Platform Input, Rust Core, Flutter UI, Audio Engine -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Architecture Review, Platform Test -- Verification owner: Software Architect -- ASPICE SYS.3 alignment: Element decomposition, interface definition -- Allocated SysRS: SysRS-296, SysRS-297 - -**SysDes-143**: The platform PTT backend layer shall report a typed `PttCapabilityLevel` (`L0` Focused, `L1` Global-shortcut-activation, `L2` Global-hold-to-talk, `L3` Global-with-mouse-buttons, `L4` Device-aware) to the Rust Core, and the Rust Core shall publish the same value to the Flutter UI through the bridge event stream so capability advertising matches actual runtime behaviour. - -- Status: Baseline Candidate -- Type: Cross-Subsystem Interface -- Stage: P0 / MVP -- Allocated to: Platform Input, Rust Core, Flutter UI, Bridge -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test, Architecture Review -- Verification owner: Software Architect -- ASPICE SYS.3 alignment: Interface definition, consistency -- Allocated SysRS: SysRS-298 - -**SysDes-144**: The audio capture pipeline shall expose two distinct atomic states: `capture_active` (the input stream is open and frames flow into the encoder feeder) and `transmit_active` (the encoder is producing outbound Opus frames and the protocol layer is forwarding them). The PTT subsystem shall drive `transmit_active` only; `capture_active` shall follow the audio engine lifecycle and the platform input-permission state independently. - -- Status: Baseline Candidate -- Type: Subsystem Interface -- Stage: P0 / MVP -- Allocated to: Audio Engine, Rust Core -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Audio Test, Integration Test -- Verification owner: Audio Owner + Software Architect -- ASPICE SYS.3 alignment: Element behaviour, interface definition -- Allocated SysRS: SysRS-296 - -**SysDes-145**: The Windows desktop backend shall be allocated to a Raw-Input-first implementation with a low-level-hook fallback and a Focused-PTT terminal fallback. The macOS desktop backend shall be allocated to a permission-aware Global PTT implementation with a Focused-PTT terminal fallback. The Linux desktop backend shall be allocated to a GNOME-on-Wayland portal-based implementation (the officially-tested compositor) with a Focused-PTT terminal fallback on every other Linux environment. - -- Status: Baseline Candidate -- Type: Platform Allocation -- Stage: P0 / MVP -- Allocated to: Platform Input -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Platform Test (Win/macOS/Linux), Architecture Review -- Verification owner: Software Architect + Platform Owners -- ASPICE SYS.3 alignment: Element decomposition, platform mapping -- Allocated SysRS: SysRS-299, SysRS-300, SysRS-301 - -**SysDes-146**: A **diagnostics sanitizer** shall sit between the platform PTT backend and the application log sink. The sanitizer shall reject any record carrying raw key codes, scan codes, virtual-key values, or key-press timing sequences before the record reaches the in-memory log sink, the platform sink (logcat / fmt / etc.), or the user-initiated diagnostic export pipeline. - -- Status: Baseline Candidate -- Type: Cross-Cutting Constraint -- Stage: P0 / MVP -- Allocated to: Diagnostics, Platform Input -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Privacy Review, Diagnostic Inspection, Unit Test -- Verification owner: Security / Privacy Reviewer -- ASPICE SYS.3 alignment: Architecture constraints, safety / security -- Allocated SysRS: SysRS-302 - -**SysDes-147**: The Flutter Voice UI shall surface the active PTT capability level and the active backend identifier as user-facing status (capability badge, fallback notice) so the user understands when a Global PTT binding cannot be honoured and a Focused-PTT fallback is in effect. - -- Status: Baseline Candidate -- Type: User-Facing Behaviour Allocation -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: User Acceptance Test, UI Review -- Verification owner: UX Owner -- ASPICE SYS.3 alignment: Element behaviour -- Allocated SysRS: SysRS-298 - -**SysDes-148**: The release verification record shall carry per-platform PTT capability evidence (detected `PttCapabilityLevel`, active backend identifier, fallback exercised yes/no) before any release artefact may claim Global PTT support. Release notes shall mirror the actual capability per platform and shall not over-claim. - -- Status: Baseline Candidate -- Type: Release Constraint -- Stage: P0 / MVP -- Allocated to: Release / Operations, Verification -- Downstream artifact: Release Readiness Record, Verification -- Verification method: Release Inspection, Architecture Review -- Verification owner: Release Manager -- ASPICE SYS.3 alignment: Architecture constraints -- Allocated SysRS: SysRS-298 - -**SysDes-149**: The system architecture shall define a `TransmitMode` element carried as an enum at the audio + bridge + UI boundary with variants `Ptt`, `Continuous`, and a reserved `VoiceActivity` placeholder that has no allocated implementation in this baseline (deferred per DEC-030). The active mode shall be persisted in the identity store; the UI shall surface `VoiceActivity` as a disabled "coming soon" option until an implementation is allocated in a later baseline. - -- Status: Baseline Candidate -- Type: Subsystem Interface -- Stage: P0 / MVP -- Allocated to: Audio Engine, Bridge, Flutter UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Unit Test, UI Review -- Verification owner: Audio Owner + UX Owner -- ASPICE SYS.3 alignment: Element behaviour, interface definition -- Allocated SysRS: SysRS-303 - -**SysDes-150**: The audio engine lifecycle shall be allocated to voice-channel membership: the input and output streams shall open on the user's first voice-channel join of the session and shall close on the last voice-channel leave. The output-stream open shall be independent of the microphone-permission state so listen-only remains a first-class flow. No manual start affordance shall be exposed at any system interface (bridge, UI, or otherwise). A user-facing hard-mute element shall force the transmit gate closed and shall take precedence over the active transmit mode, the PTT key state, and every other internal signal. - -- Status: Baseline Candidate -- Type: Lifecycle Allocation -- Stage: P0 / MVP -- Allocated to: Audio Engine, Bridge, Flutter UI -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test, UI Review -- Verification owner: Audio Owner + Software Architect -- ASPICE SYS.3 alignment: Element behaviour, lifecycle -- Allocated SysRS: SysRS-303 - -**SysDes-151**: A release-tail element shall be allocated to the audio subsystem as a system-level timer adapter on the `transmit_active` atomic defined in SysDes-144, parameterised by a configurable release-tail period (default 200 ms; user-configurable range 0–500 ms). When the PTT backend signals key-up, the adapter shall delay the `true → false` transition of `transmit_active` by the configured period; the adapter shall not affect `capture_active`. - -- Status: Baseline Candidate -- Type: Subsystem Element -- Stage: P0 / MVP -- Allocated to: Audio Engine -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Unit Test, Integration Test -- Verification owner: Audio Owner -- ASPICE SYS.3 alignment: Element behaviour -- Allocated SysRS: SysRS-304 - -**SysDes-152**: The system architecture shall allocate engagement of the Android voice-communication audio mode (for example `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mechanism) to the Android Platform Adapter as a dedicated in-call audio mode subsystem responsibility. The Android Platform Adapter shall (a) take a snapshot of the prior `AudioManager` mode before the first active voice session enters the connected state, (b) engage voice-communication mode no later than the moment the voice session becomes connected, (c) hold the mode for the full duration of any active voice session through refcount-composable enter/exit semantics so that overlapping or rapidly cycling sessions do not prematurely drop the mode, and (d) restore the snapshotted prior mode when the last active voice session ends. This is the system-architectural partitioning between the cross-platform Audio Subsystem (which owns capture/playback streams and codec) and the Android Platform Adapter (which owns the platform audio policy mode). This SysDes item is the proper anchor for the Android in-call audio mode software requirement. - -- Status: Baseline Candidate -- Type: Subsystem Element / Platform Allocation -- Stage: P0 / MVP -- Allocated to: Android Platform Adapter, Audio Subsystem (consumer) -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test, System Test -- Verification owner: Audio / Platform QA, Android Owner -- ASPICE SYS.3 alignment: Static architecture, dynamic architecture, element allocation -- Allocated SysRS: SysRS-305 -- Notes: Refines the Android platform baseline anchored by SysDes-135 (Android minimum runtime / Play target SDK policy); SysDes-135 remains the platform-baseline context item and is not in conflict with this element-allocation derivation. Consistent with SysDes-021 (OS services allocation) and SysDes-032 (Platform Adapter Layer). - -**SysDes-153**: The system architecture shall allocate Android runtime microphone permission (`RECORD_AUDIO`) acquisition and denial-handling to the Android Platform Adapter as the system-design partitioning between the Permission Subsystem and the Voice Subsystem. The Android Platform Adapter shall (a) own the runtime permission request flow and surface a typed permission-state signal to the Rust Core, (b) ensure that the permission acquisition attempt occurs at or before voice session activation so that the cross-platform Audio Subsystem never opens an input capture stream without a granted permission, (c) provide a listen-only fallback path when the permission is denied, revoked, or not yet decided, in which the output stream lifecycle (per SysDes-150) is preserved and the transmit gate remains closed, and (d) expose a user-facing re-request entry point for granting the permission and retrying transmit. The Voice Subsystem and Audio Subsystem shall consume only the typed permission-state signal and shall not call platform permission APIs directly. This SysDes item is the proper anchor for the Android RECORD_AUDIO timing software requirement. - -- Status: Baseline Candidate -- Type: Subsystem Element / Platform Allocation -- Stage: P0 / MVP -- Allocated to: Android Platform Adapter, Permission Subsystem, Audio Subsystem (consumer), Voice Subsystem (consumer), Flutter UI (re-request affordance) -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test, System Test -- Verification owner: Audio / Platform QA, Android Owner -- ASPICE SYS.3 alignment: Static architecture, element allocation, interface design -- Allocated SysRS: SysRS-306 -- Notes: Additive to the platform-baseline anchor SysDes-135 and to the general OS-permission allocation in SysDes-021 / SysDes-059 (IF-014 Permission Interface). Consistent with SysDes-150 listen-only path (output stream independent of microphone permission). Inherits but does not duplicate the general microphone-permission obligation traced through SysRS-055. - -**SysDes-154**: The system architecture shall allocate the Android voice audio backend as a dedicated subsystem owned by the Android Platform Adapter and exposed to the cross-platform Audio Subsystem (SE-13) through a trait-based backend abstraction, mirroring the platform-backend pattern already established on iOS (the `coreaudio-rs` / `VoiceProcessingIO` voice-audio path). The Android voice audio backend subsystem shall encapsulate (a) low-latency duplex voice capture and playback via the AAudio low-latency performance-mode path with platform-reported performance-mode observability for downstream latency budget evaluation, (b) voice-communication usage and content-type declarations on the output stream and a voice-communication input-preset selection on the capture stream so that Android's audio policy engine routes the streams under the voice-communication rules engaged by the in-call mode element (SysDes-152), (c) engagement of available platform hardware voice-audio effects (acoustic echo canceller, noise suppressor, automatic gain control) against the active capture session with documented fallback to the cross-platform software processing in the Audio Subsystem (SysDes-137 / SysDes-138) when a given hardware effect is unavailable, (d) a sharing-mode policy that requests exclusive sharing on a best-effort basis with graceful fallback to shared sharing recorded in sanitised audio diagnostics rather than surfaced as a user-facing fatal error, and (e) a lifecycle binding to the Android foreground service of microphone type so that background voice capture is hosted under the platform-required foreground-service model. The Audio Subsystem consumes the backend through the trait abstraction only and shall not depend on AAudio types directly. This SysDes item is the proper anchor for the Android voice audio backend software requirements (latency, input preset, hardware effects, output usage/content-type, sharing mode, foreground-service-hosted background capture). - -- Status: Baseline Candidate -- Type: Subsystem Element / Platform Allocation -- Stage: P0 / MVP -- Allocated to: Android Platform Adapter (owner), Audio Subsystem (consumer through trait), Platform Adapter Layer, Diagnostics (sharing-mode telemetry) -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Integration Test, System Test, Audio Test -- Verification owner: Audio / Platform QA, Android Owner -- ASPICE SYS.3 alignment: Static architecture, dynamic architecture, element allocation, interface design, architecture analysis -- Allocated SysRS: SysRS-055, SysRS-305 -- Notes: Refines the Android platform baseline anchored by SysDes-135 (Android minimum runtime / Play target SDK policy); SysDes-135 remains the platform-baseline context item and is unchanged. Trait-based platform backend pattern is shared with the iOS voice-audio path (`VoiceProcessingIO` via `coreaudio-rs`) but is not a code port. Composes with SysDes-152 (in-call mode), SysDes-153 (permission acquisition), SysDes-137 / SysDes-138 (audio processing default policy and platform-native preference with isolated fallback), SysDes-144 (`capture_active` / `transmit_active` split), SysDes-150 (audio engine lifecycle bound to voice-channel membership), and the foreground-service obligation already represented at the system level (SysRS-055, SysRS-111 chain). - -**SysDes-155**: The system architecture shall allocate the macOS runtime baseline as a dedicated platform-baseline element parallel to SysDes-133 (iOS) and SysDes-135 (Android), covering (a) the macOS deployment-target policy as a single-source-of-truth system-design concern owned by the macOS Build Configuration and consumed identically by the Flutter macOS runner and the Rust `chanora_bridge` native dependency (the canonical declaration site is the CocoaPods podspec at `apps/chanora_flutter/macos/chanora_bridge.podspec`, which is the location to be cited by downstream SRS/SAD/SDD; the numeric value itself is an implementation detail and is not embedded in this SysDes item), (b) a universal-binary packaging policy under which the Rust cdylib shall be produced for both `arm64` and `x86_64` host slices and combined via `lipo` into a single fat Mach-O binary so that one packaged macOS application supports Apple Silicon and Intel hosts without per-architecture artefacts, (c) the macOS `.framework` `Versions/A` bundle layout convention (versioned bundle directory with `Current` symlink, `Resources/Info.plist`, and the binary at `Versions/A/`) as the system-level packaging shape for the native bridge so that it is loadable by the Flutter macOS runner and is acceptable to codesigning and notarisation, and (d) CocoaPods podspec integration as the auto-build mechanism that drives the Rust cdylib build, the universal-binary `lipo` step, and the `.framework` assembly during a `pod install` / Flutter macOS build, so that the macOS build pipeline has a single, declarative entry point. This SysDes item is the proper macOS platform-baseline anchor for SAD-087 and for SRS items that allocate macOS-runtime responsibility, replacing any "open follow-up" SysDes placeholder previously carried by SAD-087. - -- Status: Baseline Candidate -- Type: Platform Architecture Decision -- Stage: P0 / MVP -- Allocated to: macOS Build Configuration (owner), Platform Adapter Layer (macOS Platform Services), Release / Operations (Release Pipeline), Verification -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review, Platform Test (macOS), Release Inspection -- Verification owner: macOS Owner / Release Manager -- ASPICE SYS.3 alignment: Static architecture, architecture constraints, element allocation, consistency -- Allocated SysRS: SysRS-002, SysRS-050, SysRS-193 -- Notes: Parallel in role to SysDes-133 (iOS runtime baseline) and SysDes-135 (Android runtime baseline); neither SysDes-133 nor SysDes-135 is modified by this item. Source SysRS selection: SysRS-002 anchors the multi-platform obligation that explicitly enumerates macOS as a target client platform, SysRS-050 anchors the macOS runtime environment obligation for native desktop integration, and SysRS-193 anchors the signed/notarized macOS build obligation that the `.framework` `Versions/A` layout and universal-binary policy must satisfy in the release pipeline. No macOS-specific deployment-target or universal-binary SysRS item currently exists; if a finer-grained macOS minimum-runtime SysRS item is required (analogous to SysRS-286 for iOS and SysRS-288 for Android), the systems-requirements owner should consider authoring it in a follow-up — this SysDes item is structured so that such a future SysRS item can be added to `Allocated SysRS` without restructuring the element. SysDes-155 cites the podspec file path only and does not embed its current deployment-target value; the value itself remains owned by the Build Configuration subsystem. - -**SysDes-156**: The system architecture shall allocate to SE-13 (Audio Subsystem) the obligation to expose its realtime capture and playback paths to benchmark instrumentation, such that the maintained numeric performance baselines authorized by SysRS-307 are measurable as a deterministic, automated comparison surface. The metric set authored at this layer is: (i) **heap allocation count per realtime callback after warmup** — zero allocations are expected on the steady-state realtime audio thread, where warmup is defined as the first N callbacks with N implementation-specific (recommended N=100 callbacks; refined at SDD); (ii) **per-callback wall-clock time expressed as a fraction of the cpal stream's reported audio frame period**, captured and reported as p50, p95, and p99 of the callback wall-clock as a fraction of that period; (iii) **Opus encode latency** — end-to-end wall-clock time for `encoder.encode_float()` on a 960-sample (20 ms) frame, captured per call; (iv) **Opus decode latency** — same shape, decoder side; (v) **resampler throughput** in samples-per-second produced at the canonical rate pairs 44.1 kHz → 48 kHz, 16 kHz → 48 kHz, and 48 kHz → 48 kHz passthrough (the passthrough pair serves as a control point). The baseline storage format is declared at this layer as structured JSON committed to a deterministic location in the repository; the exact path is delegated to SDD. Each JSON record shall include the metric value, the host architecture, the toolchain version, the git SHA of the measurement, and a timestamp, so that a baseline snapshot is reproducible and traceable to the commit that produced it. This SysDes item does not authorize off-device transmission of any measured baseline data and is consistent with SysRS-295. - -- Status: Baseline Candidate -- Type: System Element Allocation / Performance Verification Surface -- Stage: P0 / MVP -- Allocated to: SE-13 (Audio Subsystem) — owns the realtime path being measured; the realtime callback, the Opus encode/decode paths, and the resampler are all SE-13 surfaces -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Automated Benchmark Execution (criterion crate per SDD); Inspection of the JSON baseline records committed to the default branch -- Verification owner: Audio / Platform QA -- ASPICE SYS.3 alignment: Element allocation, dynamic architecture, resource and performance design, verification handoff -- Allocated SysRS: SysRS-307 (primary derivation); refines SysRS-180 / SysRS-181 / SysRS-186 from prescriptive intent into a measurable contract surface -- Notes: The numeric warmup constant (recommended N=100), the exact JSON repository path, the benchmark crate selection (recommendation: criterion), and the harness wiring against the cpal stream are SDD concerns and are not authored here. The cpal stream's reported period referenced in metric (ii) is the stream period reported by the existing audio capture/playback path owned by SE-13; this SysDes item does not authorize a new platform integration. The control-point passthrough at 48 kHz → 48 kHz in metric (v) provides a zero-arithmetic baseline that isolates harness overhead from resampling cost. Metrics (i) and (v) are the structural-property metrics (no acceptable variance for allocations; throughput is a steady-state measurement); metrics (ii)–(iv) are latency-distribution metrics whose tolerance characterisation is the subject of SysDes-158. - -**SysDes-157**: The system architecture shall allocate to SE-18 (Deployment and Release Environment) the integration of the realtime-audio benchmark suite (SysDes-156) into the existing CI workflow as an **advisory** regression-reporting surface, satisfying SysRS-308. The design constraints authored at this layer are: (1) **Trigger** — the benchmark workflow shall execute on every pull request opened against the default branch and on every merge to the default branch; it shall not be triggered on tags and shall not be triggered on non-default-branch pushes. (2) **Host scope** — the benchmark workflow shall execute on the Linux x86_64 GitHub Actions runner (`ubuntu-latest`); other host architectures are explicitly out of scope for this revision and shall not be added by SDD or by implementation without a future SysRS clause authorising multi-host benchmarking. (3) **Surface** — the result shall be rendered on the PR status-check view as a named check (suggested name "Benchmark / advisory" or equivalent; the exact check name is delegated to SDD) and shall additionally be rendered as a markdown table posted to the PR conversation, comparing each metric against the most recent baseline on the default branch with the percentage delta and a clear visual marker (e.g., 🟢 within tolerance, 🟡 within tolerance but trending, 🔴 outside tolerance). (4) **Non-blocking semantics** — the status check shall **never** report a `failure` status; on regression the check shall report `success` (so it does not block merge) and the regression shall be surfaced exclusively in the PR comment for human reviewer attention. This clause is the SysDes-layer enforcement of SysRS-308's advisory-only contract; any future escalation to a build-failing hard gate requires a separate SysRS authorisation and is out of scope of SysDes-157. (5) **Baseline source** — the comparison input shall be read from the deterministic JSON location on the default branch committed under SysDes-156; on the first run after a new benchmark is added, the baseline file may not yet contain that metric, in which case the report shall state "no baseline; this run establishes the baseline candidate" and shall not produce a comparison delta for that metric. (6) **Baseline update isolation** — a separate, manually-invoked CI workflow (GitHub Actions `workflow_dispatch`) shall be the sole mechanism that writes the baseline JSON on the default branch; the PR-triggered benchmark workflow shall never write the baseline file. This isolation guarantees that baseline updates are intentional, reviewable acts and prevents silent baseline drift from PR runs. - -- Status: Baseline Candidate -- Type: System Element Allocation / CI Integration Architecture -- Stage: P0 / MVP -- Allocated to: SE-18 (Deployment and Release Environment) — owns CI/CD per SysDes-036; the CI workflow definitions, the GitHub Actions runner selection, the PR status-check surface, the PR comment rendering, and the baseline-update workflow all live here -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Demo (a CI run on a synthetic PR demonstrates the markdown table report, the visual markers, the non-blocking `success` status on a simulated regression, and the "no baseline" fallback on a metric with no prior baseline) -- Verification owner: Release / Operations QA, Audio / Platform QA (co-verification of the report content) -- ASPICE SYS.3 alignment: Element allocation, deployment architecture, verification handoff -- Allocated SysRS: SysRS-308 (primary derivation); composes with SysRS-307 (baselines being compared against) and SysRS-309 (tolerance window applied by the comparison, refined by SysDes-158); consistent with SysRS-295 (no off-device transmission beyond the existing CI provider surface visible to repository collaborators) and with the SysRS-234..239 verification-family pattern -- Notes: The exact YAML workflow filenames, the exact named status-check string, the exact markdown layout of the comparison table, the exact emoji set, and the exact triggering criteria for the 🟡 "trending" state are SDD concerns and are not authored here. The merge-base baseline-snapshot semantics of the comparison are authored separately in SysDes-158. The Linux x86_64 host-scope clause is the active rule that explicitly defers ARM Android, macOS Apple Silicon, Windows x86_64, and any other host runner; that deferral is preserved here intentionally. Composes with SysDes-036 (CI/CD as a system element) as the SE-18 integration anchor. - -**SysDes-158**: The system architecture shall allocate to SE-18 (Deployment and Release Environment) the per-metric tolerance window and the baseline-comparison methodology used by the advisory CI surface (SysDes-157), satisfying SysRS-309. The tolerance window is authored at this layer as a per-metric set rather than as a single global value, because the metrics defined in SysDes-156 have different statistical character and require different comparison rules: - -| Metric (per SysDes-156) | Tolerance window | Comparison rule | Rationale | -|---|---|---|---| -| Heap allocation count per realtime callback after warmup | **Zero** | Any non-zero allocation count is reported as a regression (🔴) | Structural property of the code, not a statistical measurement; no acceptable variance | -| Per-callback wall-clock as a fraction of the audio frame period | **+20% on p95** | Compare current-run p95 against baseline p95; report regression if delta exceeds +20%. p50 and p99 are reported but not compared against tolerance (advisory data only) | p95 is the operational tail; p50 is too lenient and p99 is too noisy to gate on at MVP | -| Opus encode latency (960-sample / 20 ms frame) | **+15% on mean** | Compare current-run mean against baseline mean; report regression if delta exceeds +15% | Codec encode latency is a tight loop with low variance; mean is a stable comparator | -| Opus decode latency (same frame shape) | **+15% on mean** | Same shape as encode | Symmetric with encode | -| Resampler throughput (samples/second) at 44.1→48, 16→48, 48→48 passthrough | **−10% on samples/second** (lower is worse) | Compare current-run samples/sec against baseline samples/sec; report regression if delta is below −10% | Throughput regression is a *drop* in samples/sec, not an *increase*; sign convention is inverted relative to the latency metrics | - -The **comparison methodology** authored at this layer is: each PR-triggered benchmark run shall be compared against the most recent baseline committed to the default branch *at the time of the PR's merge-base commit*, not against the current tip of the default branch. This ensures PR comparisons are stable as the default branch advances during the PR's lifetime, and it also means that rebasing a PR onto a newer default-branch base can change which baseline snapshot is used as the comparator. The +20% starting value recorded as non-binding guidance in SysRS-309 is honoured here only for the per-callback wall-clock metric (and is bound to p95); the other metric tolerances are authored independently of the SysRS-309 suggestion, as authorised by SysRS-309's "single declared value (or one declared value per metric)" allowance. - -- Status: Baseline Candidate -- Type: System Element Allocation / Performance Comparison Methodology -- Stage: P0 / MVP -- Allocated to: SE-18 (Deployment and Release Environment) — the comparison logic lives in CI tooling co-located with the workflow authored in SysDes-157 -- Downstream artifact: SRS, SAD, SDD, Verification -- Verification method: Review (the per-metric tolerance values are subject to periodic review; SDD ratifies the values as authored here and may refine the harness implementation; future SAD/SDD revisions may re-tune the values as baseline noise characteristics are observed empirically) -- Verification owner: Release / Operations QA, Audio / Platform QA -- ASPICE SYS.3 alignment: Element allocation, architecture decision / rationale, resource and performance design, verification handoff -- Allocated SysRS: SysRS-309 (primary derivation); composes with SysRS-307 (the baselines being compared) and SysRS-308 (the advisory surface that consumes this comparison) -- Notes: The selection of p95 (rather than p99) as the gated tail for the wall-clock metric is an explicit architectural decision recorded here: p99 is reported for diagnostic value but is intentionally not tolerance-gated at MVP because the sample population of a single CI run is too small for p99 to be a stable comparator. The merge-base baseline-snapshot rule is the active comparison methodology; an alternative methodology comparing against the latest default-branch baseline (rather than the merge-base baseline) was considered and intentionally rejected because it produces unstable PR comparisons when the default branch advances during the PR's lifetime. Re-tuning of the per-metric tolerance values may be performed by future SAD or SDD revisions without requiring a new SysRS clause, provided the values remain numeric and per-metric (the structural constraints authored here); a change from the per-metric model to a global single value, or vice versa, would require a SysRS-309 revision. - -## 17. Updated SysRS Coverage Statement - -This SysDes version covers all known SysRS requirements from `SysRS-001` through `SysRS-309`. - -| SysRS Range | SysDes Coverage | -|---|---| -| SysRS-001 through SysRS-285 | Covered by inherited SysDes baseline `SysDes-001` through `SysDes-132` | -| SysRS-286 through SysRS-295 | Covered by `SysDes-133` through `SysDes-141` | -| SysRS-296 through SysRS-302 | Covered by `SysDes-142` through `SysDes-148` | -| SysRS-303 through SysRS-304 | Covered by `SysDes-149` through `SysDes-151` | -| SysRS-305 through SysRS-306 | Covered by `SysDes-152` through `SysDes-154` (with SysDes-154 additionally refining SysRS-055 for the Android voice audio backend) | -| SysRS-002 / SysRS-050 / SysRS-193 (macOS platform-baseline slice) | Additionally refined by `SysDes-155` (macOS runtime baseline, parallel to SysDes-133 / SysDes-135) | -| SysRS-307 through SysRS-309 (realtime-audio benchmark infrastructure) | Covered by `SysDes-156` (audio benchmark surface, SE-13), `SysDes-157` (advisory CI integration, SE-18), and `SysDes-158` (per-metric tolerance window and comparison methodology, SE-18) | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate effective date and separated release build SDK compliance from iOS runtime deployment target. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT subsystem allocation SysDes-142 through SysDes-148: Platform PTT Backend layer, typed `PttCapabilityLevel` cross-interface, audio-pipeline split into `capture_active` and `transmit_active`, per-OS backend allocation (Windows Raw-Input ladder, macOS permission-aware, Linux GNOME-Wayland portal), diagnostics sanitizer for raw key events, UI capability badge, release-record evidence requirement. | - - -## Baseline Candidate 0.9.5 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added v1 audio + PTT lifecycle allocation SysDes-149 through SysDes-151 sourced from SysRS-303 / SysRS-304: `TransmitMode` enum element (`Ptt` / `Continuous` / reserved `VoiceActivity` per DEC-030) at the audio + bridge + UI boundary, audio engine lifecycle bound to voice-channel membership with no manual start affordance and a listen-only path independent of mic permission, hard-mute override element, and the release-tail timer adapter (default 200 ms, range 0–500 ms) on `transmit_active`. Strict layered sourcing preserved (`SysDes -> SysRS` only). | - - -## Baseline Candidate 0.9.6 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.6 | 2026-05-18 | Added dedicated Android voice-audio element allocations SysDes-152 (Android in-call audio mode subsystem, source SysRS-305), SysDes-153 (Android RECORD_AUDIO runtime permission acquisition flow as system-design partitioning between Permission Subsystem and Voice Subsystem, source SysRS-306), and SysDes-154 (Android voice audio backend subsystem: trait-based platform backend mirroring the iOS `VoiceProcessingIO` pattern, AAudio low-latency path, voice-communication usage/preset, hardware effects engagement, sharing-mode policy, FGS-hosted background mic lifecycle; source SysRS-055 + SysRS-305). SysDes-135 remains the Android platform-baseline context item and is unchanged. These derivations are the proper SysDes anchors for SRS-208, SRS-209, and SRS-210..215, which currently cite SysDes-135 generically and shall be retargeted by the software-requirements owner in a follow-up pass. Strict layered sourcing preserved (`SysDes -> SysRS` only). | - - -## Baseline Candidate 0.9.7 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.8 | 2026-05-18 | Added benchmark-infrastructure SysDes derivations SysDes-156, SysDes-157, and SysDes-158 sourced from SysRS-307 / SysRS-308 / SysRS-309 (Wave 1.5 benchmark chain, Step 2). SysDes-156 allocates the realtime-audio benchmark instrumentation surface (heap allocation count per realtime callback after warmup, per-callback wall-clock as a fraction of the cpal stream period at p50/p95/p99, Opus encode latency on a 960-sample / 20 ms frame, Opus decode latency on the same shape, and resampler throughput at 44.1→48 kHz, 16→48 kHz, and 48→48 kHz passthrough as a control) to SE-13 (Audio Subsystem); declares baseline storage as structured JSON committed to a deterministic repo location (exact path delegated to SDD) capturing metric value, host architecture, toolchain version, git SHA, and timestamp. SysDes-157 allocates the advisory CI integration to SE-18 (Deployment and Release Environment): trigger on every PR against the default branch + every merge to default (not on tags, not on non-default-branch pushes), host = Linux x86_64 (`ubuntu-latest`), surface = PR status-check view rendered as a markdown table with per-metric delta and a visual marker (🟢 within tolerance, 🟡 within tolerance but trending, 🔴 outside tolerance), strict non-blocking semantics (the check shall never report `failure` status — even on regression it reports `success` and surfaces the regression in the PR comment for human reviewer attention), baseline source = JSON on the default branch with first-run-establishes-candidate fallback, and baseline-update isolation via a separate `workflow_dispatch` workflow (PR-triggered workflow shall never write the baseline file). SysDes-158 authors the per-metric tolerance window and the comparison methodology: heap allocations tolerance = zero (any non-zero count is 🔴), per-callback wall-clock tolerance = +20% on p95 (p50 and p99 are advisory data only), Opus encode/decode latency tolerance = +15% on mean, resampler throughput tolerance = −10% on samples/second; comparison is against the most recent baseline committed to the default branch at the PR's merge-base. Allocated to SE-18 (comparison logic lives in CI tooling). Strict layered sourcing preserved (`SysDes -> SysRS` only). Explicitly **NOT** authored in this update, consistent with the SysRS-307/308/309 deferral: (a) Dimension 3 production telemetry export (deferred to P1; SysRS-307/308/309 do not authorize off-device transmission and SysRS-295 still applies); (b) build-failing hard CI gate (SysRS-308's advisory-only clause is the active rule — SysDes-157's non-blocking semantics enforces it at this layer); (c) multi-host benchmarking (ARM Android, macOS Apple Silicon, etc. — SysDes-157's Linux x86_64 host-scope clause is the active rule). | -| 0.9.7 | 2026-05-18 | Added dedicated macOS runtime baseline element allocation SysDes-155, parallel in role to SysDes-133 (iOS runtime baseline) and SysDes-135 (Android runtime baseline). SysDes-155 anchors the macOS deployment-target policy as a single-source-of-truth concern (citing the podspec file path `apps/chanora_flutter/macos/chanora_bridge.podspec` without embedding its value), the universal-binary (`lipo`'d `arm64` + `x86_64`) packaging policy, the `.framework` `Versions/A` bundle layout convention, and CocoaPods podspec integration as the auto-build mechanism for the Rust cdylib. Allocated to macOS Build Configuration, Platform Adapter Layer (macOS Platform Services), Release Pipeline, and Verification. Source SysRS: SysRS-002 (multi-platform target client platforms including macOS), SysRS-050 (macOS runtime environment / native desktop window integration), SysRS-193 (signed/notarized macOS builds). SysDes-155 is the proper SysDes anchor for SAD-087 and for downstream SRS items that allocate macOS-runtime responsibility, and is the recommended retarget for SAD-087's previously-open Source SysDes follow-up. SysDes-133 and SysDes-135 are unchanged. Strict layered sourcing preserved (`SysDes -> SysRS` only). Follow-up recommendation: systems-requirements owner may consider authoring a finer-grained macOS minimum-runtime SysRS item parallel to SysRS-286 (iOS) and SysRS-288 (Android); SysDes-155 is structured so that such a future SysRS item can be added to its `Allocated SysRS` list without restructuring the element. | diff --git a/docs/governance/baseline-approval-record.md b/docs/governance/baseline-approval-record.md deleted file mode 100644 index 5b81205..0000000 --- a/docs/governance/baseline-approval-record.md +++ /dev/null @@ -1,65 +0,0 @@ - -# CHANORA_CFG_Baseline_Approval_Record_v0.9.2.2.1 - -**Document type:** Configuration / Baseline Approval Record -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/baseline-approval-record.md` --- - -## 1. Baseline - -| Field | Value | -|---|---| -| Baseline name | Chanora MVP Baseline Candidate | -| Baseline version | 0.9.0 | -| Package | `CHANORA_Documentation_Baseline_Candidate_v0.9.2.2.1.zip` | -| Approval target | Promote to `v1.0 Final / Approved Baseline` after review approval | - -## 2. Approval Decision - -| Decision | Value | -|---|---| -| Approved | Pending | -| Approved with conditions | Pending | -| Rejected | Pending | - -## 3. Approvers - -| Role | Name | Decision | Date | Signature / Evidence | -|---|---|---|---|---| -| Product owner | TBD | Pending | TBD | TBD | -| System architect | TBD | Pending | TBD | TBD | -| Software architect | TBD | Pending | TBD | TBD | -| Software lead | TBD | Pending | TBD | TBD | -| QA / verification owner | TBD | Pending | TBD | TBD | -| Security reviewer | TBD | Pending | TBD | TBD | -| UX owner | TBD | Pending | TBD | TBD | -| Platform owner | TBD | Pending | TBD | TBD | - -## 4. Open Issues - -| Issue ID | Description | Disposition | -|---|---|---| -| TBD | TBD | TBD | - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Baseline approval record template for normalized package. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/governance/baseline-candidate-validation-report.md b/docs/governance/baseline-candidate-validation-report.md deleted file mode 100644 index 78ee256..0000000 --- a/docs/governance/baseline-candidate-validation-report.md +++ /dev/null @@ -1,92 +0,0 @@ -# Cfg Baseline Candidate Validation Report - -**Document type:** Configuration / Validation Report -**Version:** 0.9.3 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/baseline-candidate-validation-report.md` --- - -## 1. Package - -```text -chanora-docs-repo-format-v0.9.3 -``` - -## 2. File Count - -| Type | Count | -|---|---:| -| Markdown files | 37 (added `docs/architecture/desktop-ptt-architecture.md`) | - -## 3. Defined ID Counts - -| ID family | Defined IDs | -|---|---:| -| SysRS | 302 | -| SysDes | 148 | -| SRS | 203 | -| SAD | 80 | -| SDD | 93 | - -## 4. Undefined Reference Check - -| ID family | Undefined references | -|---|---:| -| SysRS | 0 | -| SysDes | 0 | -| SRS | 0 | -| SAD | 0 | -| SDD | 0 | - -## 5. Direct-Layer Rule Check - -| Rule | Result | -|---|---:| -| SRS direct SysRS references | 0 | -| SAD direct SysRS references | 0 | -| SAD direct SysDes references | 0 | -| SDD direct SysRS references | 0 | -| SDD direct SysDes references | 0 | -| SDD direct SRS references | 0 | - -## 6. Language Check - -| Check | Result | -|---|---:| -| CJK characters in en-only doc set | 0 | - -(Localised user-facing strings in `apps/chanora_flutter/lib/l10n/app_zh.arb` are out of scope of this report per DEC-015.) - -## 7. Apple Gate Coverage Check - -| Item | Coverage | -|---|---| -| Runtime deployment target | iOS 13+ remains separate runtime policy | -| App Store Connect upload SDK gate | Xcode 26+ and iOS 26 / iPadOS 26 SDK+ for upload on or after 2026-04-28 | -| Link chain | SysRS-287 -> SysDes-134 -> SRS-186 -> SAD-062 -> SDD-072 | -| Internal Alpha / local development distinction | Captured in Platform Release Policy | -| TestFlight / App Store upload distinction | Captured in Platform Release Policy | - -## 8. Desktop Push-to-Talk Coverage Check - -| Item | Coverage | -|---|---| -| Focused PTT mandatory on Win / macOS / Linux | SysRS-296 -> SysDes-142, SysDes-144 -> SRS-201 -> SAD-075 -> SDD-089 | -| Global PTT capability-dependent | SysRS-297 -> SysDes-142 -> SRS-195 -> SAD-071 -> SDD-081 | -| Capability exposed to UI + release record | SysRS-298 -> SysDes-143/147/148 -> SRS-196 -> SAD-076/078 -> SDD-082/088/091 | -| Windows ladder | SysRS-299 -> SysDes-145 -> SRS-197 -> SAD-072 -> SDD-083/084 | -| macOS permission-aware | SysRS-300 -> SysDes-145 -> SRS-198 -> SAD-073 -> SDD-085 | -| Linux GNOME-Wayland portal | SysRS-301 -> SysDes-145 -> SRS-199 -> SAD-074 -> SDD-086 | -| No raw key history in diagnostics | SysRS-302 -> SysDes-146 -> SRS-202 -> SAD-077 -> SDD-090 | -| Mouse side buttons (DEC-026) | SRS-200 -> SAD-072/073/074 -> SDD-083/085/086 | -| Missed-key-up watchdog (DEC-028) | SRS-203 -> SAD-079 -> SDD-092 | -| Owner-resolved review questions PTT-OPEN-001..006 | DEC-023..028 in `product-decision-register.md` | - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Validation report for Apple App Store Connect upload SDK gate correction, full file update, and coverage check. | -| 0.9.3 | 2026-05-15 | Validation report for desktop Push-to-Talk update: added 7 SysRS / 7 SysDes / 9 SRS / 9 SAD / 12 SDD entries, added `desktop-ptt-architecture.md`, recorded six new owner decisions DEC-023..028; ID totals advance to 302 / 148 / 203 / 79 / 92; direct-layer rule and undefined-reference counts remain zero. | -| 0.9.4 | 2026-05-15 | P0 traceability audit follow-up: added `SAD-080` and `SDD-093` to close the SRS-200 coverage gap surfaced by the audit. ID totals advance to 302 / 148 / 203 / 80 / 93; direct-layer-rule and undefined-reference counts remain zero. No code change in this revision; the existing mouse-side-button support previously implemented under the broader `SRS-195..203 -> SAD-071..079 -> SDD-081..092` umbrella is now tied to the dedicated SAD/SDD pair. | diff --git a/docs/governance/decision-impact-assessment.md b/docs/governance/decision-impact-assessment.md deleted file mode 100644 index 6b424af..0000000 --- a/docs/governance/decision-impact-assessment.md +++ /dev/null @@ -1,103 +0,0 @@ - -# CHANORA_CFG_Decision_Impact_Assessment_v0.9.2.2.1 - -**Document type:** Configuration / Decision Impact Assessment -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/decision-impact-assessment.md` --- - -## 1. Purpose - -This document records how key unresolved product and architecture decisions affect requirements, architecture, detailed design, verification, release readiness, security, privacy, and legal work products. - -## 2. High-Impact Decision Assessment - -| Decision | Recommended decision | Impact if changed later | -|---|---|---| -| Minimum iOS version | iOS 13 | Test matrix, platform support policy, app store build configuration, platform behavior tests. | -| Minimum Android version | API 28 (per DEC-004, Accepted 2026-05-14; raised from the original API 24 recommendation) | Device support, permissions, audio routing, Google Play compatibility, platform tests. | -| Android target SDK | Google Play-required API level on upload date; current release gate uses API 35+ unless newer policy applies | -| Apple App Store SDK gate | Xcode 26+ with iOS 26 / iPadOS 26 SDK+ for App Store Connect upload on or after 2026-04-28 unless newer Apple upload policy applies | Google Play submission eligibility and platform permission behavior. | -| Multiple active connections | Exclude from MVP | If added later, affects state model, audio routing, UI layout, reconnection logic, storage, verification. | -| AEC/AGC/NS/HPF defaults | Enabled by default where supported | Affects UX, CPU, platform-specific audio settings, verification matrix. | -| Audio processing path | Platform-native first; fallback later | Affects audio architecture, Rust/native dependencies, latency, CPU, platform compatibility. | -| Trademark/legal review | Required before public/store release | Blocks public release if unresolved. | -| Local DB | SQLite or equivalent | Affects storage schema, migrations, backup/delete policy, tests. | -| Bridge | Stable typed generated/schema-controlled bridge | Affects API stability, async event flow, maintainability, code generation, tests. | -| Diagnostics upload | No automatic upload in MVP | Affects privacy policy, security review, support process. | -| Crash reporting | Disabled unless later approved | Affects privacy/legal docs, dependency and supply-chain review. | - -## 3. Document Update Rules - -| If decision changes | Update required | -|---|---| -| Minimum iOS/Android version changes | SysRS, SysDes, SRS, SAD, SDD, SYS.4, SWE.6, Release Readiness | -| Apple SDK submission gate changes | SysRS, SysDes, SRS, SAD, SDD, SWE.6, Release Readiness | -| Android target SDK changes | SRS, SWE.6, Release Readiness, Platform Guide | -| Multiple connections added to MVP | SysRS, SysDes, SRS, SAD, SDD, SWE.4, SWE.5, SWE.6, SYS.4 | -| Audio defaults change | SysRS, SysDes, SRS, SAD, SDD, SWE.4, SWE.5, SWE.6 | -| Audio implementation path changes | SysDes, SAD, SDD, SWE.4, SWE.5, SYS.4 | -| Legal/trademark policy changes | Release Readiness, Legal Review, Privacy Policy, External References | -| DB choice changes | SysDes, SRS, SAD, SDD, SWE.4, SWE.5 | -| Bridge choice changes | SysDes, SAD, SDD, SWE.4, SWE.5 | -| Diagnostics upload enabled | SysRS, SysDes, SRS, SAD, SDD, Threat Model, Privacy Policy, Redaction Audit, Release Readiness | -| Crash reporting enabled | SysRS, SysDes, SRS, SAD, SDD, Privacy Policy, Dependency Report, Release Readiness | - -## 4. Recommended Decision Closure Sequence - -1. Confirm release type and staged platform policy. -2. Confirm mobile minimum versions and Android target SDK policy. -3. Confirm one active server connection for MVP. -4. Confirm audio processing defaults. -5. Confirm audio implementation path. -6. Confirm diagnostics/crash reporting privacy policy. -7. Confirm SQLite/equivalent local database. -8. Confirm bridge choice. -9. Confirm legal/trademark/public wording review requirement. -10. Confirm license model before public release. - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial decision impact assessment for key product and architecture decisions. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ for App Store Connect upload on or after 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Decision Impact Addendum (Baseline Candidate 0.9.3) - -The owner rulings recorded as DEC-023 through DEC-028 on 2026-05-15 affect the documents below. If any of those decisions are revisited the documents listed must be re-validated for consistency. - -| Decision | Affects | -|---|---| -| DEC-023 Windows Global PTT P0 | `docs/architecture/desktop-ptt-architecture.md`, `docs/architecture/sad.md` SAD-072, `docs/architecture/sdd.md` SDD-083/084, `docs/requirements/srs.md` SRS-197, `docs/release/release-readiness-go-nogo-record.md` RR-PTT-001 | -| DEC-024 macOS Global PTT P0 + permission UX | `docs/architecture/desktop-ptt-architecture.md`, `docs/architecture/sad.md` SAD-073, `docs/architecture/sdd.md` SDD-085, `docs/requirements/srs.md` SRS-198, `docs/release/release-readiness-go-nogo-record.md` RR-PTT-002/003 | -| DEC-025 Linux GNOME-Wayland only | `docs/architecture/desktop-ptt-architecture.md`, `docs/architecture/sad.md` SAD-074, `docs/architecture/sdd.md` SDD-086, `docs/requirements/srs.md` SRS-199, `docs/release/platform-release-policy.md`, `docs/release/release-readiness-go-nogo-record.md` RR-PTT-004/005 | -| DEC-026 Mouse side buttons | `docs/architecture/desktop-ptt-architecture.md`, `docs/requirements/srs.md` SRS-200, `docs/architecture/sad.md` SAD-072/073, `docs/architecture/sdd.md` SDD-083/085 | -| DEC-027 PTT diagnostics privacy | `docs/privacy/privacy-policy.md`, `docs/security/diagnostic-redaction-audit-report.md`, `docs/security/threat-model.md`, `docs/requirements/srs.md` SRS-202, `docs/architecture/sad.md` SAD-077, `docs/architecture/sdd.md` SDD-090 | -| DEC-028 Missed-key-up watchdog P0 | `docs/architecture/desktop-ptt-architecture.md`, `docs/requirements/srs.md` SRS-203, `docs/architecture/sad.md` SAD-079, `docs/architecture/sdd.md` SDD-092, `docs/release/release-readiness-go-nogo-record.md` RR-PTT-007 | - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Recorded the desktop-PTT decision impacts for DEC-023..028. | - -## Baseline Candidate 0.9.9 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.9 | 2026-05-17 | Updated §2 "Minimum Android version" row from API 24 to **API 28** to reconcile with DEC-004 (Accepted 2026-05-14). Document Update Rules (§3) and Decision Closure Sequence (§4) remain valid as-is. | diff --git a/docs/governance/development-environment.md b/docs/governance/development-environment.md deleted file mode 100644 index 06fd6f7..0000000 --- a/docs/governance/development-environment.md +++ /dev/null @@ -1,60 +0,0 @@ -# Development Environment - -**Document type:** Governance / Development Environment -**Version:** 0.1.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/development-environment.md` - ---- - -## 1. Purpose - -This document records the intended local development environment for Chanora. - -## 2. Required Toolchains - -The exact versions shall be finalized when the Flutter and Rust workspaces are created. - -Expected tools: - -| Tool | Purpose | -|---|---| -| Flutter SDK | Cross-platform UI | -| Dart SDK | Flutter development | -| Rust toolchain | Core, protocol, audio, storage, diagnostics | -| Cargo | Rust package/build tool | -| just | Local command runner | -| Python 3 | Documentation validation scripts | -| Xcode | iOS/iPadOS/macOS development and App Store Connect upload builds | -| Android Studio / Android SDK | Android development | -| CMake / native build tools | Native dependencies if required | - -## 3. Platform Notes - -| Platform | Notes | -|---|---| -| iOS / iPadOS | App Store Connect upload on or after 2026-04-28 requires Xcode 26+ and iOS 26 / iPadOS 26 SDK+. | -| Android | Store upload must target the Google Play-required API level on upload date. | -| Desktop | Windows, macOS, and Linux build requirements shall be finalized during scaffold and release planning. | - -## 4. Local Commands - -Local commands are defined in `justfile`. - -Initial commands: - -```bash -just format -just lint -just test -just verify-docs -just security-scan -``` - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial development environment document. | diff --git a/docs/governance/document-index.md b/docs/governance/document-index.md deleted file mode 100644 index b0fed34..0000000 --- a/docs/governance/document-index.md +++ /dev/null @@ -1,93 +0,0 @@ -# Document Index - -**Document type:** Configuration / Documentation Control -**Version:** 0.9.9 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/document-index.md` - ---- - -## 1. Purpose - -This document lists the normalized latest files included in the Chanora repository documentation package. - -## 2. Current Baseline Candidate Files - -| File | Status | -|---|---| -| `docs/architecture/sad.md` | Baseline Candidate | -| `docs/architecture/sdd.md` | Baseline Candidate | -| `docs/architecture/sysdes.md` | Baseline Candidate | -| `docs/architecture/desktop-ptt-architecture.md` | Baseline Candidate | -| `docs/governance/baseline-approval-record.md` | Baseline Candidate | -| `docs/governance/baseline-candidate-validation-report.md` | Baseline Candidate | -| `docs/governance/decision-impact-assessment.md` | Baseline Candidate | -| `docs/governance/document-naming-convention.md` | Baseline Candidate | -| `docs/governance/document-review-report.md` | Baseline Candidate | -| `docs/governance/git-commit-message-convention.md` | Baseline Candidate | -| `docs/governance/path-migration-map.md` | Baseline Candidate | -| `docs/governance/product-decision-register.md` | Baseline Candidate | -| `docs/governance/repo-format-validation-report.md` | Baseline Candidate | -| `docs/governance/traceability-matrix.md` | Baseline Candidate | -| `docs/i18n/localization-architecture.md` | Baseline Candidate | -| `docs/legal/trademark-and-attribution-review.md` | Baseline Candidate | -| `docs/privacy/privacy-policy.md` | Baseline Candidate | -| `docs/references/aspice-swe2-swe3-integration-note.md` | Baseline Candidate | -| `docs/references/external-references.md` | Baseline Candidate | -| `docs/release/platform-release-policy.md` | Baseline Candidate | -| `docs/release/release-readiness-go-nogo-record.md` | Baseline Candidate | -| `docs/requirements/srs.md` | Baseline Candidate | -| `docs/requirements/sysrs.md` | Baseline Candidate | -| `docs/security/dependency-and-supply-chain-report.md` | Baseline Candidate | -| `docs/security/diagnostic-redaction-audit-report.md` | Baseline Candidate | -| `docs/security/secure-storage-audit-report.md` | Baseline Candidate | -| `docs/security/security-privacy-legal-guideline.md` | Baseline Candidate | -| `docs/security/threat-model.md` | Baseline Candidate | -| `docs/ui-ux/adaptive-layout-platform-guide.md` | Baseline Candidate | -| `docs/ui-ux/material3-component-catalog.md` | Baseline Candidate | -| `docs/ui-ux/material3-design-tokens.md` | Baseline Candidate | -| `docs/ui-ux/material3-guideline.md` | Baseline Candidate | -| `docs/verification/swe4-unit-verification-plan.md` | Baseline Candidate | -| `docs/verification/swe5-software-integration-verification-plan.md` | Baseline Candidate | -| `docs/verification/swe6-software-verification-plan.md` | Baseline Candidate | -| `docs/verification/sys4-system-integration-verification-plan.md` | Baseline Candidate | -| `docs/verification/verification-master-plan.md` | Baseline Candidate | - -## 3. Core Engineering Hierarchy - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -``` - -## 4. Verification Work Product Mapping - -```text -SDD -> SWE.4 -SAD + SDD -> SWE.5 -SRS -> SWE.6 -SysDes -> SYS.4 -``` - -## 5. Repo File Naming Rules - -| Rule | Decision | -|---|---| -| Product prefix in file names | Not used under `docs/` | -| Case style | lowercase kebab-case | -| Version in file name | Not used | -| Version location | Inside document metadata | -| Release package version | Used in ZIP/package name | - -## 6. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Converted documentation package to repository-oriented docs folder structure and updated internal filename references. | -| 0.9.3 | 2026-05-15 | Added `docs/architecture/desktop-ptt-architecture.md` to the controlled document set. | -| 0.9.5 | 2026-05-15 | Bumped controlled-set version to 0.9.5 for the v1 audio + PTT lifecycle refactor: SysRS-303..304, SysDes-149..151, SRS-204..207, SAD-081..083, SDD-094..097, and two new governance decisions DEC-029 (Flutter global-hotkey packages rejected for PTT) and DEC-030 (Voice Activity Detection deferred to P1). No controlled files added or removed; existing files updated in place under strict layered sourcing. | -| 0.9.6 | 2026-05-16 | Added DEC-031 (missed-key-up watchdog disabled on P0; redesign deferred to P1) and new controlled document `docs/verification/windows-p0-acceptance.md` carrying the 15-row human-must acceptance plan for the v1.0.0-rc.8 Windows ship. No spec items added; DEC-028 retained as historical context, superseded by DEC-031 for the v1 ship. | -| 0.9.7 | 2026-05-16 | Added controlled document `docs/verification/linux-p0-acceptance.md` carrying the 15-row human-must acceptance plan for the v1.0.0-rc.8 Linux (GNOME on Wayland) ship. Auto-test sign-off rows filled from the Arch host `100.74.219.114` verification pass: `cargo check --workspace --release` clean, `cargo test --workspace --lib` 78 / 0 / 1, `cargo test -p chanora_audio --test linux_portal_smoke -- --ignored` 1 / 0, `cargo test -p chanora_audio --test ptt_privacy` 1 / 0. No spec items added; the existing SDD-086 GNOME-Wayland portal backend is what this document signs off. | -| 0.9.8 | 2026-05-16 | Added controlled documents `docs/verification/macos-p0-acceptance.md` (15-row checklist for Apple Silicon macOS, SDD-085 CGEventTap backend now fully live with IOHIDCheckAccess + CGEventTapCreate + per-1.5s permission watcher) and `docs/verification/ios-p0-acceptance.md` (12-row checklist for physical iPhone via the free Apple Personal Team, SDD-094..097 audio lifecycle, AVAudioSession `.playAndRecord/.voiceChat` configured Swift-side in AppDelegate). The macOS PTT backend descriptor advertises L2/L3 only when Input Monitoring is granted, otherwise L0Focused per SRS-198 honest capability advertising. iOS PTT is L0Focused by design (DEC-025 explicitly does not pursue a global PTT analogue on iOS). No new spec items. | -| 0.9.9 | 2026-05-16 | Added controlled document `docs/verification/ipad-p0-acceptance.md` carrying the 15-row checklist for iPad P0 sign-off (same TS-3.3 reach, three iPad-specific rows: wide-mode landscape layout under the existing 840 dp LayoutBuilder breakpoint, Split View / Slide Over no-crash assertion since `UIApplicationSupportsMultipleScenes` stays `false` in P0, and AirPlay 2 audio routing). The iPad build artefact is the **same** `Runner.app` produced for iPhone — `TARGETED_DEVICE_FAMILY = "1,2"` in `ios/Runner.xcodeproj/project.pbxproj` is the Universal family. DEC-025 was originally iPhone-only for the mobile target; this row formally extends P0 coverage to iPad (still within the same iOS toolchain, no new Rust or Flutter code). No spec items added. | diff --git a/docs/governance/document-naming-convention.md b/docs/governance/document-naming-convention.md deleted file mode 100644 index 1039ac8..0000000 --- a/docs/governance/document-naming-convention.md +++ /dev/null @@ -1,66 +0,0 @@ -# Document Naming Convention - -**Document type:** Configuration / Documentation Control -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/document-naming-convention.md` - ---- - -## 1. Purpose - -This document defines the official repository documentation naming convention for Chanora. - -## 2. Repository Path Pattern - -Markdown documents under the repository shall use this pattern: - -```text -docs//.md -``` - -Examples: - -```text -docs/requirements/sysrs.md -docs/architecture/sad.md -docs/verification/swe4-unit-verification-plan.md -docs/release/release-readiness-go-nogo-record.md -docs/security/threat-model.md -``` - -## 3. Rules - -| Rule | Decision | -|---|---| -| Product prefix | Do not use `CHANORA_` inside repo file names. | -| Version in filename | Do not include document version in repo file names. | -| Filename style | Use lowercase kebab-case. | -| Directory style | Use lowercase kebab-case. | -| Version metadata | Keep version inside the Markdown document. | -| Status metadata | Keep status inside the Markdown document. | -| Release artifacts | ZIP/package names may include project name and version. | - -## 4. Top-Level Documentation Categories - -| Directory | Purpose | -|---|---| -| `docs/requirements/` | SysRS and SRS | -| `docs/architecture/` | SysDes, SAD, SDD | -| `docs/verification/` | SWE.4, SWE.5, SWE.6, SYS.4, verification master plan | -| `docs/release/` | Release readiness and platform release policy | -| `docs/security/` | Threat model, secure storage, redaction, dependency/supply-chain, security guidelines | -| `docs/privacy/` | Privacy policy | -| `docs/legal/` | Trademark and attribution review | -| `docs/ui-ux/` | UI/UX, Material 3, design tokens, component catalog, adaptive layout | -| `docs/i18n/` | Localization architecture | -| `docs/governance/` | Index, traceability, approval, validation, review, decisions, commit convention | -| `docs/references/` | External references and research notes | - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Replaced release-package naming convention with repository docs naming convention. | diff --git a/docs/governance/document-review-report.md b/docs/governance/document-review-report.md deleted file mode 100644 index ca08c65..0000000 --- a/docs/governance/document-review-report.md +++ /dev/null @@ -1,90 +0,0 @@ -# Cfg Document Review Report V0.9.2.2.1 - -**Document type:** Configuration / Review Report -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/document-review-report.md` --- - -## 1. Executive Summary - -The normalized package is suitable as a **Baseline Candidate v0.9** for human review. - -The package fixes the earlier draft-package issues: - -- superseded original filenames are not included in the normalized package; -- all filenames follow a consistent naming convention; -- the package contains only baseline-candidate files; -- non-English text from the earlier draft metadata has been removed; -- undefined system-design references have been removed from the verification planning package; -- a naming convention, approval record template, document index, and validation report are included. - -The package is still **not Final** until human review and approval are completed. - -## 2. Recommended Status - -| Decision | Result | -|---|---| -| Ready for Final / Approved Baseline | No | -| Ready for Baseline Candidate review | Yes | -| Recommended current status | Baseline Candidate v0.9 | -| Next target status after approval | Final / Approved Baseline v1.0 | - -## 3. Positive Review Findings - -| Area | Result | -|---|---| -| File naming | Normalized | -| Package scope | Latest baseline-candidate files only | -| Core hierarchy | `SysRS -> SysDes -> SRS -> SAD -> SDD` | -| Verification mapping | `SDD -> SWE.4`, `SAD + SDD -> SWE.5`, `SRS -> SWE.6`, `SysDes -> SYS.4` | -| SRS direct-source rule | SRS does not directly link to system-requirement IDs | -| SAD direct-source rule | SAD links directly to SRS only | -| SDD direct-source rule | SDD links directly to SAD only | -| English-only baseline | Passed automated CJK check | -| Approval metadata | Approval record template included | - -## 4. Remaining Review Actions Before Final - -| ID | Severity | Action | -|---|---|---| -| REV-ACT-001 | Major | Human stakeholders must review and approve the baseline candidate. | -| REV-ACT-002 | Major | Review comments must be recorded and dispositioned. | -| REV-ACT-003 | Major | Open issues must be accepted, deferred, or resolved. | -| REV-ACT-004 | Major | Approval record must be completed with names, roles, dates, and decisions. | -| REV-ACT-005 | Major | After approval, promote package and documents from `v0.9.2` to `v1.0`. | - -## 5. Finalization Recommendation - -Do not call this package Final until the approval record is completed. - -Recommended workflow: - -```text -Baseline Candidate v0.9.1 - -> Human review - -> Review comment disposition - -> Approval record completed - -> Promote to v1.0 Final / Approved Baseline -``` - -## 6. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Review report for normalized baseline candidate package. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/governance/git-commit-message-convention.md b/docs/governance/git-commit-message-convention.md deleted file mode 100644 index 887d31f..0000000 --- a/docs/governance/git-commit-message-convention.md +++ /dev/null @@ -1,185 +0,0 @@ - -# CHANORA_CFG_Git_Commit_Message_Convention_v0.9.2.2.1 - -**Document type:** Configuration / Engineering Convention -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/git-commit-message-convention.md` --- - -## 1. Purpose - -This document defines the Git commit message convention for Chanora. - -Chanora shall use a Conventional Commits style format with project-specific scopes. - -## 2. Commit Format - -```text -(): -``` - -Optional body: - -```text -(): - - - -Refs: -``` - -Breaking change format: - -```text -()!: - -BREAKING CHANGE: -``` - -## 3. Commit Types - -| Type | Meaning | -|---|---| -| `feat` | New user-visible or system-visible capability | -| `fix` | Bug fix | -| `docs` | Documentation-only change | -| `style` | Formatting change without behavior change | -| `refactor` | Code restructuring without intended behavior change | -| `perf` | Performance improvement | -| `test` | Test addition or test update | -| `build` | Build system, dependency, packaging, CI artifact change | -| `ci` | CI/CD pipeline change | -| `chore` | Maintenance task | -| `revert` | Revert a previous commit | -| `release` | Release preparation, version bump, release metadata | -| `sec` | Security-specific change | -| `i18n` | Localization, internationalization, Unicode, locale behavior | -| `ux` | UI/UX behavior or interaction change | - -## 4. Recommended Scopes - -| Scope | Area | -|---|---| -| `flutter` | Flutter app in general | -| `ui` | UI components and screens | -| `theme` | Material 3, design tokens, theme extensions | -| `adaptive` | Adaptive layout and window classes | -| `voice` | Voice UI or voice control behavior | -| `audio` | Audio capture, playback, processing, DSP | -| `core` | Rust Core orchestration | -| `protocol` | `tsclientlib` integration and protocol adapter | -| `bridge` | Flutter/Rust bridge and DTOs | -| `state` | State synchronization, reducers, snapshots, events | -| `storage` | Local database or non-secret persistence | -| `secure-storage` | Keychain/Keystore/secret storage | -| `diagnostics` | Logs, redaction, diagnostic export | -| `i18n` | Localization, Unicode, locale formatting, RTL | -| `android` | Android-specific behavior | -| `ios` | iOS-specific behavior | -| `windows` | Windows-specific behavior | -| `macos` | macOS-specific behavior | -| `linux` | Linux-specific behavior | -| `build` | Build tooling | -| `ci` | CI pipeline | -| `release` | Release packaging and release metadata | -| `docs` | Documentation | -| `req` | Requirements documents | -| `sysdes` | System architectural design | -| `srs` | Software requirements | -| `sad` | Software architecture | -| `sdd` | Software detailed design | -| `ver` | Verification documents | - -## 5. Examples - -```text -feat(voice): add push-to-talk state handling -``` - -```text -fix(protocol): recover channel tree after reconnect snapshot -``` - -```text -docs(sad): add interface catalog and performance view -``` - -```text -i18n(ui): add fallback behavior for missing localization keys -``` - -```text -sec(diagnostics): redact server password from export bundle -``` - -```text -test(audio): add unit tests for audio meter level clamping -``` - -```text -release(android): prepare internal alpha build metadata -``` - -## 6. Requirement and Document References - -When relevant, the commit body should reference affected IDs. - -Allowed examples: - -```text -Refs: SRS-156, SAD-013, SDD-017 -``` - -```text -Refs: SWE4-UV-011 -``` - -Do not force every commit to reference a requirement. Use references when the change affects requirements, architecture, detailed design, verification, release, security, or traceability. - -## 7. Pull Request Title Rule - -Pull request titles should follow the same format as commit messages when possible: - -```text -feat(voice): add persistent VoiceBar controls -``` - -## 8. Branch Naming - -Recommended branch format: - -```text -/ -``` - -Examples: - -```text -feature/voicebar-controls -fix/reconnect-state-sync -docs/baseline-candidate-v09 -release/internal-alpha-001 -hotfix/diagnostic-redaction -``` - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial Git commit message convention for Chanora. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/governance/legal-review-readiness.md b/docs/governance/legal-review-readiness.md deleted file mode 100644 index 7f3d515..0000000 --- a/docs/governance/legal-review-readiness.md +++ /dev/null @@ -1,200 +0,0 @@ -# Legal review readiness — DEC-012 sign-off checklist - -| Version | Date | Status | -|---|---|---| -| 0.1.0 | 2026-05-15 | Initial draft alongside v1.0.0-rc.1 | - -## Purpose - -DEC-012 in `product-decision-register.md` records the legal / -trademark / licensing review as the **only** outstanding gate before -the MVP public release per DEC-001 sequencing. That decision was -accepted as a *release gate* on 2026-05-14; the actual review work -has not been performed. - -This document is the engineering-side handoff package for that -review. It enumerates exactly what the reviewer needs to confirm, -points to the artefacts in this repository that answer each item, -and lists the work the reviewer must perform that the engineering -side cannot. - -Engineering does **not** make legal decisions. Items marked -"engineering: done" mean the underlying technical artefact is in -place; the corresponding legal confirmation is still required. - -## Scope - -Reviewer is expected to confirm or correct each of the following -before `v1.0.0-rc.1` is promoted to `v1.0.0` and any release -artefact is published publicly or to a store. - -### 1. Trademark — "Chanora" - -* **DEC-018** accepted "Chanora" as the public product name. -* Engineering: name appears in `Cargo.toml`, `pubspec.yaml`, the - About dialog, the AppBar title via the `appTitle` localisation - key, and every commit message. -* **Reviewer action**: - - Trademark registrability check in target jurisdictions (CN, US, - EU at minimum, per DEC-002 target platforms' user base). - - Confirm no conflicting registration in voice-communication - software / mobile-app categories. - - Issue go / no-go ruling. A no-go ruling triggers a rename which - invalidates `v1.0.0-rc.1` and forces a new RC. - -### 2. Non-affiliation statement — TeamSpeak - -* **DEC-019** accepted the working wording: - > Chanora is independent and is not affiliated with, endorsed by, - > sponsored by, or officially associated with TeamSpeak. -* Engineering: that exact sentence ships in: - - `NOTICE` (top of file). - - `README.md` `## License and trademark` section. - - The in-app About dialog (English: `aboutNonAffiliation` ARB key; - Chinese Simplified: `aboutNonAffiliation` in `app_zh.arb`, - translated by an engineer — translation should be reviewed for - legal precision). -* **Reviewer action**: - - Confirm the English wording is sufficient under target-market - consumer-protection and unfair-competition statutes. - - Confirm the Chinese-Simplified translation does not weaken the - statement. - - Confirm there is no remaining text anywhere in the product that - could imply affiliation (search hints: "TeamSpeak", "official", - "endorsed"). - -### 3. Trademark usage — "TeamSpeak" - -The product documentation and UI strings reference "TeamSpeak" in -several places where we describe interoperability (e.g. -"TeamSpeak-compatible servers"). This is nominative use. - -* **Reviewer action**: - - Confirm each occurrence of "TeamSpeak" in user-facing strings, - documentation, and store metadata is permissible nominative - use under target-jurisdiction trademark law. - - Recommend a `™` or `®` symbol convention if required. - -### 4. License posture — Chanora's own code - -* **DEC-020** accepted dual-license **Apache-2.0 OR MIT**. -* Engineering: the texts ship as `LICENSE-APACHE` and `LICENSE-MIT` - at the repository root; the aggregator `LICENSE` references both. - Cargo-level package manifests carry `license.workspace = true` - pointing to `Apache-2.0 OR MIT` in the workspace `Cargo.toml`. -* **Reviewer action**: - - Confirm the dual-license declaration is consistent with all - contributor agreements (none in place yet — see open items). - - Confirm `LICENSE` file contents satisfy each app store's source- - code-availability and inbound-license requirements. - -### 5. Third-party license posture — direct dependencies - -* `NOTICE` enumerates the direct dependency list as of v1.0.0-rc.1. -* Each direct dependency is permissively licensed - (`MIT`, `Apache-2.0`, `MIT OR Apache-2.0`, `BSD-3-Clause`). - No GPL / LGPL / AGPL surfaces in the direct set. -* **Reviewer artefacts** checked into the repository: - - `docs/security/license-inventory.md` and - `docs/security/license-inventory.html` — full transitive Rust - inventory generated by `cargo about generate` from - `about.toml`. Covers 364 crates across the workspace. - - `docs/security/flutter-license-inventory.md` — Flutter / Dart - inventory generated by `tools/dump_flutter_licenses.sh`. - Covers 94 packages including the Flutter SDK BSD-3-Clause - text. - - `deny.toml` — `cargo deny` configuration enforcing the - DEC-020 license posture as a CI guardrail. The `supply-chain` - job in `.github/workflows/ci.yml` runs `cargo deny check` on - every push and PR. -* **Reviewer action**: - - Confirm the `NOTICE` enumeration matches what the build tooling - actually links by spot-checking against the inventories above. - - Confirm each direct dependency's attribution obligations are - satisfied (Apache-2.0 requires a copy of the license text, the - NOTICE entry, and a list of changes in any modified copies). - - Confirm no copyleft transitive dependency creeps in via - `tsclientlib` or `cpal`. The most likely failure mode is a - crypto / DSP subdep with LGPL coverage; `cargo deny` config - should refuse those. - -### 6. `tsclientlib` posture specifically - -The project pins `tsclientlib` to a specific commit -(`04aa249` on `https://github.com/ReSpeak/tsclientlib`). The crate is -upstream-licensed `MIT OR Apache-2.0`. It implements the -TeamSpeak 3 protocol from publicly observed behaviour, not from -TeamSpeak proprietary sources. - -* **Reviewer action**: - - Confirm linking against `tsclientlib` does not by itself create - a derivative-work obligation under TeamSpeak's own licenses or - EULAs. - - Confirm using `tsclientlib` to talk to third-party - TeamSpeak-protocol servers does not create a trademark or - contract-tort exposure. - -### 7. Crypto + secure-storage compliance - -* `chacha20poly1305` (Apache-2.0 OR MIT) provides envelope - encryption for the identity at rest and bookmark passwords. -* `keyring` (Apache-2.0 OR MIT) hits the platform Secret Service / - Keychain / Credential Manager for the DEK. -* No symmetric or asymmetric primitive other than the above is - introduced by Chanora's own code; `tsclientlib` carries its own - protocol-level crypto. -* **Reviewer action**: - - Confirm export-control posture for the resulting binary - (cryptography category determination, ECCN, any EAR self- - classification needed for store distribution). - - Confirm any privacy-statement updates required by jurisdictions - that treat persistent device identifiers as personal data. - -### 8. Data handling — DEC-016 / DEC-017 - -* **DEC-016** No automatic diagnostic upload. The `export_diagnostics` - bridge function is invoked only on user action and the redacted - output is local-only (Clipboard or share-sheet). -* **DEC-017** Crash reporting disabled. Repository grep for - `sentry|crashlytics|bugsnag` returns zero hits as of v1.0.0-rc.1. -* Engineering: diagnostics redaction is enforced at write-time by - the in-bridge `RedactingLogLayer`; tests - `chanora_diagnostics::tests::*` cover the policy. -* **Reviewer action**: - - Confirm privacy policy text aligns: no telemetry, no automatic - upload, no crash reporting in MVP. - - Confirm app-store privacy-label entries are consistent. - -### 9. Store-listing copy - -Out of scope for engineering; reviewer drafts and validates per -DEC-002 staged platform list: - - - Google Play Store (Android arm64-v8a) - - Apple App Store (iOS, MVP gate) - - Microsoft Store / direct (Windows) - - Mac App Store / direct (macOS) - - Linux (direct distribution; no store) - -## Open engineering work blocking sign-off - -These are concrete items that engineering must close before the -reviewer's work can complete. They do **not** require legal input -themselves — they are listed here so the reviewer's scope is clear. - -| # | Item | Status | -|---|------|--------| -| 1 | `cargo about generate --workspace` output checked into `docs/security/license-inventory.{md,html}` | **Done** (v1.0.0-rc.2 candidate) — generated from `about.toml`. 364 transitive crates enumerated; CI fails on staleness. | -| 2 | Flutter `LicenseRegistry` dump checked into `docs/security/flutter-license-inventory.md` | **Done** (v1.0.0-rc.2 candidate) — generated by `tools/dump_flutter_licenses.sh`; 94 packages enumerated; CI fails on staleness. | -| 3 | `cargo deny check licenses` (with allow-list mirroring DEC-020) | **Done** (v1.0.0-rc.2 candidate) — config at `deny.toml`, CI job `supply-chain` runs `cargo deny check` on every push. | -| 4 | Live iOS and macOS build artefacts | **Open** — DEC-002 staged release allows deferring; today neither has a live build. See `staged-release-plan.md`. | - -## Out-of-scope - -The following are *not* part of DEC-012 and have their own owners -and decisions: - -* Cryptographic primitive selection (`chacha20poly1305`, key sizes, - KDF choice) — Security Architect; closed by DEC-013.2. -* Codec choice (Opus) — Software Architect. -* TLS / connection security — falls inside `tsclientlib`. diff --git a/docs/governance/path-migration-map.md b/docs/governance/path-migration-map.md deleted file mode 100644 index 14213ab..0000000 --- a/docs/governance/path-migration-map.md +++ /dev/null @@ -1,84 +0,0 @@ -# Documentation Path Migration Map - -**Document type:** Configuration / Migration Map -**Version:** 0.9.3 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/path-migration-map.md` - ---- - -## 1. Purpose - -This document maps the previous package-style filenames to the new repository documentation paths. - -## 2. Migration Map - -| Previous package filename | New repo path | -|---|---| -| `CHANORA_SAD_ASPICE_SWE2_Software_Architecture_Description_v0.9.2.md` | `docs/architecture/sad.md` | -| `CHANORA_SDD_ASPICE_SWE3_Software_Detailed_Design_v0.9.2.md` | `docs/architecture/sdd.md` | -| `CHANORA_SYSDES_ASPICE_SYS3_System_Architectural_Design_v0.9.2.md` | `docs/architecture/sysdes.md` | -| `CHANORA_CFG_Baseline_Approval_Record_v0.9.2.md` | `docs/governance/baseline-approval-record.md` | -| `CHANORA_CFG_Baseline_Candidate_Validation_Report_v0.9.2.md` | `docs/governance/baseline-candidate-validation-report.md` | -| `CHANORA_CFG_Decision_Impact_Assessment_v0.9.2.md` | `docs/governance/decision-impact-assessment.md` | -| `CHANORA_CFG_Document_Index_v0.9.2.md` | `docs/governance/document-index.md` | -| `CHANORA_CFG_Document_Naming_Convention_v0.9.2.md` | `docs/governance/document-naming-convention.md` | -| `CHANORA_CFG_Document_Review_Report_v0.9.2.md` | `docs/governance/document-review-report.md` | -| `CHANORA_CFG_Git_Commit_Message_Convention_v0.9.2.md` | `docs/governance/git-commit-message-convention.md` | -| `CHANORA_CFG_Product_Decision_Register_v0.9.2.md` | `docs/governance/product-decision-register.md` | -| `CHANORA_CFG_Traceability_Matrix_v0.9.2.md` | `docs/governance/traceability-matrix.md` | -| `CHANORA_I18N_Localization_Architecture_v0.9.2.md` | `docs/i18n/localization-architecture.md` | -| `CHANORA_LEGAL_Trademark_And_Attribution_Review_v0.9.2.md` | `docs/legal/trademark-and-attribution-review.md` | -| `CHANORA_PRIV_Privacy_Policy_v0.9.2.md` | `docs/privacy/privacy-policy.md` | -| `CHANORA_REFS_ASPICE_SWE2_SWE3_Integration_Note_v0.9.2.md` | `docs/references/aspice-swe2-swe3-integration-note.md` | -| `CHANORA_CFG_External_References_v0.9.2.md` | `docs/references/external-references.md` | -| `CHANORA_REL_Platform_Release_Policy_v0.9.2.md` | `docs/release/platform-release-policy.md` | -| `CHANORA_REL_Release_Readiness_Go_NoGo_Record_v0.9.2.md` | `docs/release/release-readiness-go-nogo-record.md` | -| `CHANORA_SRS_ASPICE_SWE1_Software_Requirements_Specification_v0.9.2.md` | `docs/requirements/srs.md` | -| `CHANORA_SYSRS_System_Requirements_Specification_v0.9.2.md` | `docs/requirements/sysrs.md` | -| `CHANORA_SEC_Dependency_And_Supply_Chain_Report_v0.9.2.md` | `docs/security/dependency-and-supply-chain-report.md` | -| `CHANORA_SEC_Diagnostic_Redaction_Audit_Report_v0.9.2.md` | `docs/security/diagnostic-redaction-audit-report.md` | -| `CHANORA_SEC_Secure_Storage_Audit_Report_v0.9.2.md` | `docs/security/secure-storage-audit-report.md` | -| `CHANORA_SEC_Security_Privacy_Legal_Guideline_v0.9.2.md` | `docs/security/security-privacy-legal-guideline.md` | -| `CHANORA_SEC_Threat_Model_v0.9.2.md` | `docs/security/threat-model.md` | -| `CHANORA_UIUX_Adaptive_Layout_Platform_Guide_v0.9.2.md` | `docs/ui-ux/adaptive-layout-platform-guide.md` | -| `CHANORA_UIUX_Material3_Component_Catalog_v0.9.2.md` | `docs/ui-ux/material3-component-catalog.md` | -| `CHANORA_UIUX_Material3_Design_Tokens_v0.9.2.md` | `docs/ui-ux/material3-design-tokens.md` | -| `CHANORA_UIUX_Material3_Guideline_v0.9.2.md` | `docs/ui-ux/material3-guideline.md` | -| `CHANORA_VER_ASPICE_SWE4_Unit_Verification_Plan_v0.9.2.md` | `docs/verification/swe4-unit-verification-plan.md` | -| `CHANORA_VER_ASPICE_SWE5_Software_Integration_Verification_Plan_v0.9.2.md` | `docs/verification/swe5-software-integration-verification-plan.md` | -| `CHANORA_VER_ASPICE_SWE6_Software_Verification_Plan_v0.9.2.md` | `docs/verification/swe6-software-verification-plan.md` | -| `CHANORA_VER_ASPICE_SYS4_System_Integration_Verification_Plan_v0.9.2.md` | `docs/verification/sys4-system-integration-verification-plan.md` | -| `CHANORA_VER_Master_Plan_v0.9.2.md` | `docs/verification/verification-master-plan.md` | - -## 3. Implementation Path Layout (DEC-022) - -The canonical implementation directory layout was adopted as DEC-022 -(register v0.9.5) and matches the README's sketch + SAD §7.2 module -decomposition. Implementation paths are listed here for traceability -alongside the documentation paths above. - -| Logical role | Repo path | Authority | -|---|---|---| -| Flutter application | `apps/chanora_flutter/` | SAD §7.1, DEC-022 | -| Rust orchestration / top-level API | `core/chanora_core/` | SAD §7.2 | -| Protocol adapter (tsclientlib isolation) | `crates/chanora_protocol/` | SAD §7.2, SAD-067, SysDes-011/029 | -| State synchronisation | `crates/chanora_state/` | SAD §7.2 | -| Audio subsystem | `crates/chanora_audio/` | SAD §7.2, DEC-011, DEC-011.1 | -| Storage (non-secret DB + platform secure store) | `crates/chanora_storage/` | SAD §7.2, SAD-067, DEC-013, DEC-013.1, DEC-013.2 | -| Diagnostics (logs, redaction, export) | `crates/chanora_diagnostics/` | SAD §7.2, DEC-016, DEC-017 | -| Typed Flutter/Rust bridge | `crates/chanora_bridge/` | SAD §7.2, DEC-014, SDD-079, SAD-068 | - -The Cargo workspace is declared at the repository root (`Cargo.toml`). -The Flutter application is **not** a Cargo workspace member; it is -owned by Flutter / Gradle / Xcode tooling and listed under the -workspace's `exclude` array along with the `poc/` spike directories. - -## 4. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Initial migration map from package filenames to repo docs paths. | -| 0.9.3 | 2026-05-14 | Added §3 Implementation Path Layout recording the DEC-022 directory adoption (apps/, core/, crates/) as the workspace was first scaffolded on `product/scaffold-v0`. | diff --git a/docs/governance/poc-results-summary.md b/docs/governance/poc-results-summary.md deleted file mode 100644 index 56f4d9b..0000000 --- a/docs/governance/poc-results-summary.md +++ /dev/null @@ -1,158 +0,0 @@ -# PoC Results Summary - -**Document type:** Governance / PoC Results Summary -**Version:** 0.6.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/poc-results-summary.md` - ---- - -## 1. Purpose - -This document is the single top-level entry point summarising the -outcome of the technical proof-of-concept (PoC) phase defined by -[`docs/architecture/proof-of-concept-plan.md`](../architecture/proof-of-concept-plan.md). - -It exists so that reviewers (security, audit, baseline-approval) can -read one page and follow pointers to evidence, rather than having to -crawl seven `VERIFICATION.md` files under `poc/`. - -This summary records facts as of **2026-05-13**. - -## 2. Status table - -| Spike | PoC plan exit criterion | Status | Evidence | -|---|---|---|---| -| `flutter_rust_bridge_hello` | Flutter can call Rust and receive event stream data | **PASS** | `poc/flutter_rust_bridge_hello/VERIFICATION.md` | -| `tsclientlib-connect-spike` | Rust can connect to a compatible server/test double | **PASS** | `poc/tsclientlib-connect-spike/VERIFICATION.md` | -| `secure-storage-spike` | Secret write/read/delete works through platform secure storage | **PASS (Linux only)** | `poc/secure-storage-spike/VERIFICATION.md` | -| `sqlite-storage-spike` | Schema, migration, and repository pattern are demonstrated | **PASS** | `poc/sqlite-storage-spike/VERIFICATION.md` | -| `diagnostics-redaction-spike` | Password and identity-secret samples are redacted (REDACT-TC-001..010 covered) | **PASS** | `poc/diagnostics-redaction-spike/VERIFICATION.md` | -| `audio-capture-playback-spike` (desktop half) + `audio-capture-playback-android-spike` (mobile half) | Capture/playback works on at least one desktop **and** one mobile target | **PASS** — desktop on Linux + PipeWire; mobile on a physical Motorola Moto G Stylus 5G running Android 14 arm64-v8a. iOS remains explicitly deferred per DEC-011.1. | `poc/audio-capture-playback-spike/VERIFICATION.md`, `poc/audio-capture-playback-android-spike/VERIFICATION.md` | - -Aggregate test count across the PoCs: **44 tests + 1 live-server CLI -run + 1 desktop-audio CLI round-trip + 1 Android playback + 1 Android -capture (real-device, with WAV file inspection)**, all passing in the -recorded runs. **All six PoC plan entries now PASS.** - -## 3. Toolchain exercised - -| Tool | Version | -|---|---| -| Rust toolchain | stable 1.95.0 (59807616e 2026-04-14) | -| Rust Android targets | aarch64-linux-android, armv7-linux-androideabi, x86_64-linux-android, i686-linux-android | -| Flutter SDK | 3.41.9 stable (Dart 3.11.5) | -| `flutter_rust_bridge` (Rust + Dart) and codegen | 2.12.0 | -| `tsclientlib` | git `04aa2491` (no published crates.io release) | -| `cpal` | 0.16 | -| `rusqlite` | 0.32 (bundled) | -| `keyring` | 3.6.3 (sync-secret-service + linux-native) | -| `linux-keyutils` | 0.2.5 | -| `regex` / `serde` / `serde_json` | 1 | -| Android SDK | platform 34, build-tools 34.0.0 | -| Android NDK | r26.3.11579264 | -| `cargo-ndk` | 4.1.2 | -| AGP / Gradle / Kotlin | 8.5.2 / 8.7 / 1.9.24 | -| `jni`, `ndk-context`, `android_logger` | 0.21, 0.1.1, 0.14 | -| Host OS for verification | Linux (Arch, kernel 7.0.5-arch1-1, x86_64) | -| Host audio server | PipeWire 1.6.4 (via pcm_pipewire ALSA plugin) | -| Host Secret Service backend | gnome-keyring (default collection observed locked; kernel keyutils backend used for hermetic tests) | -| Android test device | Motorola Moto G Stylus 5G (2023), Android 14 (SDK 34), arm64-v8a | - -## 4. Owner-confirmed decisions - -Recorded in [`docs/governance/product-decision-register.md`](product-decision-register.md) at version **0.9.5**: - -### From the PoC phase (decisions surfaced by the spikes) - -| Decision | Status | Closed by | -|---|---|---| -| **DEC-014** typed bridge | Accepted (`flutter_rust_bridge` 2.x pinned) | `flutter_rust_bridge_hello` | -| **DEC-013.1** SQLite crate | Accepted (`rusqlite` bundled) | `sqlite-storage-spike` | -| **DEC-013.2** Linux secure-storage backend policy | Accepted (Secret Service preferred, keyutils fallback) | `secure-storage-spike` | -| **DEC-011.1** audio crate | Accepted (desktop: `cpal`; Android: `cpal`-on-Oboe) / Deferred (iOS) | `audio-capture-playback-spike` (desktop) + `audio-capture-playback-android-spike` (mobile) | -| **DEC-022** canonical implementation directory layout | Accepted (README sketch — `apps/chanora_flutter/`, `core/chanora_core/`, `crates/chanora_*`) | Owner ruling on 2026-05-13 | -| **DEC-020** license | Accepted (Apache-2.0 OR MIT dual-license) | Owner ruling on 2026-05-14; license texts added as `LICENSE-APACHE` and `LICENSE-MIT`. | - -### From the 2026-05-14 owner-confirmation pass (all 17 previously-Proposed) - -| Decision | Status | Notes | -|---|---|---| -| DEC-001 Release type sequence | Accepted | Alpha → Beta → Public. | -| DEC-002 MVP platform scope | Accepted | All five platforms; staged release allowed. | -| DEC-003 Minimum iOS | Accepted | iOS 13. | -| **DEC-004 Minimum Android** | **Accepted — MODIFIED** | **API 28** (raised from the recommendation of API 24). Affects the Android spike's `minSdk = 24`; product `apps/chanora_flutter` must move it to 28. | -| DEC-005 Android target SDK | Accepted | Google Play-required API on upload date. | -| DEC-006 Connections in MVP | Accepted | Single connection. | -| DEC-007 AEC | Accepted | Enabled by default where supported. | -| DEC-008 AGC | Accepted | Enabled by default + toggle. | -| DEC-009 Noise suppression | Accepted | Enabled by default + toggle. | -| DEC-010 High-pass filter | Accepted | Enabled by default. | -| DEC-011 Audio path | Accepted | Platform-native first. | -| DEC-012 Legal review gate | Accepted (as a release gate) | The legal review work itself is still to be performed. | -| DEC-013 Local DB | Accepted | SQLite or equivalent. | -| **DEC-015 Product language for MVP** | **Accepted — MODIFIED** | **English + Chinese (Simplified)** at MVP (expanded from the recommendation of English-only). Affects translation pipeline and design-system text length budgets. | -| DEC-016 Diagnostics upload | Accepted | User-initiated local export only. | -| DEC-017 Crash reporting | Accepted | Disabled for MVP. | -| DEC-018 Product name | Accepted | Chanora. | -| DEC-019 Non-affiliation statement | Accepted (drafted wording) | Final legal sign-off still required under DEC-012. | -| DEC-021 Apple App Store SDK gate | Accepted | Xcode 26+ / iOS 26 SDK+ on or after 2026-04-28. | - -### Still open - -(none — DEC-020 closed on 2026-05-14; see register v0.9.6.) - -DEC-012 legal/trademark/licensing review remains a release-gating -*work* item but is not an open decision. - -## 5. Audit-report coverage - -| Audit ID | Verified by | Audit-report row updated? | -|---|---|---| -| SS-AUD-001 (identity secret absent from local DB) | `secure-storage-spike` | Yes — `docs/security/secure-storage-audit-report.md` §4 v0.9.3 | -| SS-AUD-002 (server password absent from local DB) | `secure-storage-spike` | Yes | -| SS-AUD-003 (no secrets in logs) | `secure-storage-spike` + cross-ref `diagnostics-redaction-spike` | Yes | -| SS-AUD-004 (no secrets in diagnostic export) | `diagnostics-redaction-spike` REDACT-TC-008 | Yes | -| SS-AUD-005 (safe error on backend failure) | `secure-storage-spike` (test + live CLI fallback) | Yes | -| SS-AUD-006 (delete removes entry) | `secure-storage-spike` | Yes | -| SS-AUD-007 (per-platform documentation) | Linux only — partial | Yes (status: Partial) | -| SS-AUD-008 (migration path safety) | Pending (depends on product `chanora_storage`) | Yes (status: Pending) | -| SS-TC-001 (Windows) | Not run | Status: Deferred | -| SS-TC-002 (macOS) | Not run | Status: Deferred | -| SS-TC-003 (Linux) | `secure-storage-spike` | **PoC Pass** | -| SS-TC-004 (Android) | Not run | Status: Deferred | -| SS-TC-005 (iOS) | Not run | Status: Deferred | -| REDACT-TC-001..010 | `diagnostics-redaction-spike` (12/12) | Yes — `docs/security/diagnostic-redaction-audit-report.md` §4 v0.9.3 | -| Export bundle policy §5 (all rows) | `diagnostics-redaction-spike` | Yes — §5 v0.9.3 | - -## 6. Open risks and gaps - -| ID | Risk | Owner | Recommended close path | -|---|---|---|---| -| RISK-PoC-001 | iOS audio (AVAudioEngine via cpal or a per-platform iOS adapter) is not verified. The desktop and Android halves of the PoC plan's audio criterion are met; iOS is explicitly deferred per DEC-011.1. | Audio Owner + iOS Owner | iOS spike on macOS + Xcode hardware; or accept the risk and discover it during product integration (not recommended). | -| RISK-PoC-002 | Windows / macOS / iOS / Android secure-storage adapters not implemented. SS-TC-001/002/004/005 unverified. | Platform Owners | Per-platform adapter spike or first-implementation-in-`chanora_storage` with the audit checks re-run on each target. | -| RISK-PoC-003 | ~~License (DEC-020) deferred. Blocks public/store release.~~ **CLOSED 2026-05-14.** DEC-020 Accepted as Apache-2.0 OR MIT dual-license; texts present in repository root. Release-gating legal review under DEC-012 remains pending as a separate *work* item, but no longer a license-choice blocker. | Product Owner + Legal | Closed. | -| RISK-PoC-004 | ~~DEC-001..012, 015..019, 021 still in Proposed status.~~ **CLOSED 2026-05-14.** All 17 decisions were owner-reviewed; statuses recorded in the register at v0.9.5. | Product Owner | Closed. | -| RISK-PoC-005 | Production code does not exist yet. README's "Implementation status: Not production-ready" remains accurate. | Software Architect | **Further progress 2026-05-14.** Internal Alpha (`v0.1.0-alpha.1`, 3bb038c) wired the connect/snapshot/disconnect cycle. **Internal Beta (`v0.2.0-beta.1`) reached the same day** with voice in/out: `chanora_audio` promoted from scaffold; PTT, Opus encode, decode + jitter buffer + mix all wired through to Flutter. README's status line remains accurate (not production-ready) but is now genuinely close to dogfoodable. | -| RISK-PoC-006 | **DEC-004 Android minimum was raised to API 28 from the spike's `minSdk = 24`.** The Android spike still builds and runs; product code in `apps/chanora_flutter` must move `minSdk` to 28 and may simplify its AAudio fallback logic accordingly. | Android Owner | Set `minSdk = 28` when the Android target is added to `apps/chanora_flutter`. | -| RISK-PoC-007 | **DEC-015 expanded the MVP language scope from English-only to English + Chinese (Simplified).** Adds zh-Hans translation, font, and design-system text-length-budget work to MVP. | Product Owner + i18n Owner | Land en + zh-Hans message catalogues in `chanora_flutter/lib/i18n/` at scaffolding time; verify Material 3 design tokens accommodate CJK text metrics. | - -## 7. Non-promotion reminder - -Per `proof-of-concept-plan.md` §4: **a PoC is not product code unless -explicitly promoted.** Nothing under `poc/` should be imported by -the future `apps/chanora_flutter` or `crates/chanora_*` trees -without an explicit promotion record per spike. - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial PoC results summary. Records the outcome of the first PoC batch (5 PASS, 1 PARTIAL), the toolchain versions exercised, the owner-confirmed decisions, audit-report coverage, and the open risks. | -| 0.2.0 | 2026-05-14 | Audio PoC promoted from PARTIAL to PASS after the Android spike verified the mobile half on a physical Motorola Moto G Stylus 5G running Android 14 arm64-v8a. All six PoC plan entries now PASS. RISK-PoC-001 narrowed from "mobile audio" to "iOS audio only". Android toolchain (NDK r26.3, cargo-ndk, AGP/Gradle/Kotlin, jni/ndk-context/android_logger) added to the toolchain table. | -| 0.3.0 | 2026-05-14 | Recorded the owner-confirmation pass on the 17 remaining Proposed decisions (register at v0.9.5). RISK-PoC-004 closed. Added RISK-PoC-006 (Android `minSdk` 24 → 28) and RISK-PoC-007 (MVP language expanded to English + Chinese Simplified) for the two decisions that diverged from the original recommendations. DEC-020 license remains the sole open release-gating decision. | -| 0.4.0 | 2026-05-14 | DEC-020 license closed as Apache-2.0 OR MIT dual-license (register v0.9.6). RISK-PoC-003 closed. No remaining open decisions; the only release-gating activity outstanding is the DEC-012 legal review *work*, which is sign-off rather than an architectural choice. | -| 0.5.0 | 2026-05-14 | Internal Alpha build reached. `poc/tsclientlib-connect-spike` promoted into `crates/chanora_protocol`; `core/chanora_core::ChanoraSession` wires the typed protocol API; `crates/chanora_bridge` exposes the FRB 2.12.0 boundary; `apps/chanora_flutter` runs the connect → snapshot → disconnect cycle end-to-end against `cn.teamspeak.app`. Verified by `apps/chanora_flutter/test/alpha_e2e_test.dart` + `core/chanora_core/tests/alpha_smoke.rs`. Tag: `v0.1.0-alpha.1` (commit 3bb038c). RISK-PoC-005 partially closed. | -| 0.6.0 | 2026-05-14 | **Internal Beta build reached** (same day as Alpha). `poc/audio-capture-playback-spike` promoted into `crates/chanora_audio`: cpal capture/playback + `audiopus` Opus encode + `tsclientlib::audio::AudioHandler` decode/jitter/mix. `chanora_protocol` extended with voice-out mpsc and voice-in mpsc; `chanora_core` adds `start_audio` / `set_ptt` / `audio_stats`. `chanora_bridge` adds matching DTOs (`BridgeAudioStats`). Flutter UI gains "Start audio" + hold-to-talk PTT + live frame counters. Verified end-to-end on `cn.teamspeak.app` by `apps/chanora_flutter/test/beta_e2e_test.dart`. Tag: `v0.2.0-beta.1`. Capture runs gracefully in playback-only mode on hosts with no usable microphone. | diff --git a/docs/governance/product-decision-register.md b/docs/governance/product-decision-register.md deleted file mode 100644 index 8015bd8..0000000 --- a/docs/governance/product-decision-register.md +++ /dev/null @@ -1,362 +0,0 @@ - -# CHANORA_CFG_Product_Decision_Register_v0.9.7.0.0 - -**Document type:** Configuration / Product Decision Register -**Version:** 0.9.8 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/product-decision-register.md` --- - -## 1. Purpose - -This document records key product, architecture, release, legal, and engineering decisions that affect Chanora scope, testing, architecture, app store eligibility, and release readiness. - -A decision marked **Proposed / Owner Confirmation Required** is a recommended decision that should be confirmed by the owner before Final / Approved Baseline. - -## 2. Decision Status Legend - -| Status | Meaning | -|---|---| -| Proposed / Owner Confirmation Required | Recommended decision; owner must confirm before Final. | -| Accepted | Confirmed and part of baseline. | -| Deferred | Not decided for this release; must not block scope if explicitly deferred. | -| Rejected | Not selected. | - -## 3. Key Blocking Decisions - -| Decision ID | Decision | Recommended decision | Status | Owner | Why it matters | -|---|---|---|---|---|---| -| DEC-001 | Release type | Internal Alpha first, then External Beta, then MVP Public / Store Release | Accepted | Product Owner | Controls release gate, verification bar, legal/privacy requirements, and platform scope. | -| DEC-002 | MVP platform scope | MVP target remains Windows, macOS, Linux, Android, and iOS; first release may be staged by channel/platform | Accepted | Product Owner + Engineering Owner | Controls verification matrix, build artifacts, store readiness, and support load. | -| DEC-003 | Minimum iOS version | iOS 13 minimum for Flutter support baseline; test latest iOS release separately | Accepted | Product Owner + iOS Owner | Controls iOS compatibility, test devices, and app store eligibility. | -| DEC-004 | Minimum Android version | **Android API 28 (Android 9.0)** minimum, raised from the original recommendation of API 24 by explicit owner ruling on 2026-05-14. Rationale: simplifies the audio path (AAudio is unconditionally available from API 26+ and stable from API 28), narrows the TLS / privacy / scoped-storage compatibility surface, and matches typical 2026 Android baselines. The cpal-on-Oboe Android spike was built with `minSdk = 24` and `cargo-ndk -P 26`; product code in `apps/chanora_flutter` must move `minSdk` to 28 and may simplify the AAudio-vs-OpenSL-ES fallback logic accordingly. | Accepted | Product Owner + Android Owner | Controls Android device support, runtime permissions, and Play Store eligibility. | -| DEC-005 | Android target SDK | Target the Google Play-required API level on the upload date; current release gate uses API 35+ unless newer Google policy applies | Accepted | Android Owner + Release Manager | Required for new apps and updates submitted to Google Play after the current policy date. | -| DEC-006 | Multiple server connections in MVP | Not in MVP; support one active server connection per client instance | Accepted | Product Owner + Software Architect | Reduces state synchronization, audio routing, UI complexity, and verification scope. | -| DEC-007 | AEC default state | Enabled by default on platforms/audio backends where supported and stable | Accepted | Audio Owner + Product Owner | Affects echo quality, CPU usage, platform behavior, and user experience. | -| DEC-008 | AGC default state | Enabled by default, with user setting to disable | Accepted | Audio Owner + Product Owner | Affects perceived loudness consistency and may affect advanced user preference. | -| DEC-009 | Noise suppression default state | Enabled by default, with user setting to disable | Accepted | Audio Owner + Product Owner | Improves typical voice quality but may affect voice naturalness and CPU usage. | -| DEC-010 | High-pass filter default state | Enabled by default | Accepted | Audio Owner | Removes low-frequency rumble and usually improves speech capture. | -| DEC-011 | Audio processing implementation path | Use platform-native audio processing first where available; use Rust/WebRTC-style processing as controlled fallback or later architecture option | Accepted | Software Architect + Audio Owner | Controls architecture, latency, CPU use, platform compatibility, and testing. | -| DEC-011.1 | Audio crate choice | `cpal` for desktop (empirically verified on Linux/PipeWire by `poc/audio-capture-playback-spike` on 2026-05-13) and for Android (cpal-on-Oboe, empirically verified on a Motorola Moto G Stylus 5G (2023) running Android 14 arm64-v8a by `poc/audio-capture-playback-android-spike` on 2026-05-13); iOS crate TBD pending an iOS spike that requires macOS + Xcode hardware | Accepted (desktop + Android) / Deferred (iOS) | Software Architect + Audio Owner | Pins the desktop and Android audio dependencies; iOS remains an open risk surface. | -| DEC-012 | Official SDK / trademark / licensing review | Public/store release is blocked until legal confirms TeamSpeak non-affiliation wording, trademark usage, OSS licenses, and `tsclientlib` license posture | Accepted (as a release gate) | Legal / Compliance + Product Owner | Public release risk and store metadata risk. Owner accepted the gate on 2026-05-14; the legal review itself is still to be performed and remains a public-release blocker. | -| DEC-013 | Local database choice | Use SQLite or equivalent embedded local database for non-secret local state; secrets remain in platform secure storage | Accepted | Software Architect + Storage Owner | Controls storage schema, migrations, backup/delete policy, and portability. | -| DEC-013.1 | SQLite crate | `rusqlite` with the `bundled` feature (SQLite statically linked into the binary; no system libsqlite3 dependency); verified by `poc/sqlite-storage-spike` on 2026-05-13 | Accepted | Software Architect + Storage Owner | Pins the embedded-DB dependency; locks reproducibility. | -| DEC-013.2 | Linux secure-storage backend policy | Prefer Secret Service (libsecret / gnome-keyring / kwallet / KeePassXC) on Linux; if the default collection is locked or D-Bus is unavailable, fall back to kernel keyutils with a clear user notice. Both backends are "equivalent" per SysRS-053 / SysRS-162; verified by `poc/secure-storage-spike` on 2026-05-13 | Accepted | Software Architect + Storage Owner + Security Reviewer | Closes the SysRS-162 ambiguity surfaced by the secure-storage PoC. | -| DEC-014 | Bridge choice | Use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs; **`flutter_rust_bridge` 2.x pinned** (empirically verified at 2.12.0 by `poc/flutter_rust_bridge_hello` on 2026-05-13) | Accepted | Software Architect | Controls API stability, maintainability, async event flow, and long-term code generation. | -| DEC-015 | Product language for MVP | **English + Chinese (Simplified) for MVP**, raised from the original recommendation of English-only by explicit owner ruling on 2026-05-14. Rationale: the demonstrated test-server population (verified live against `cn.teamspeak.app`) and broader TS3 audience include substantial Chinese-speaking users; shipping zh-Hans alongside en at MVP avoids a launch-window UX gap. Architecture remains i18n-ready so additional languages can be added later mechanically. Server-provided content is preserved verbatim and never translated (ADR-008 UTF-8 boundary, DEC-015 server-content rule retained). | Accepted | Product Owner | Controls localization scope and release schedule. | -| DEC-016 | Diagnostics upload policy | No automatic upload for MVP; user-initiated local diagnostic export only | Accepted | Product Owner + Legal + Security | Controls privacy policy, support workflow, and security review scope. | -| DEC-017 | Crash reporting | Disabled for MVP unless explicit opt-in provider and privacy policy are approved | Accepted | Product Owner + Legal + Security | Avoids privacy/legal complexity before public release. | -| DEC-018 | Public product name | Chanora | Accepted | Product Owner | Branding and legal identity. Trademark / registrability check remains under DEC-012 legal review before public release. | -| DEC-019 | Public non-affiliation statement | Use legal-approved wording; drafted text accepted as working copy: "Chanora is independent and is not affiliated with, endorsed by, sponsored by, or officially associated with TeamSpeak." Subject to final legal review under DEC-012 before public release. | Accepted (drafted wording) | Legal / Compliance | Required for public release and store metadata. | -| DEC-021 | Apple App Store submission SDK | Use Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later for App Store submission on or after 2026-04-28, unless Apple publishes a newer applicable requirement before upload | Accepted | iOS Owner + Release Manager | Controls App Store Connect upload eligibility and release pipeline. | -| DEC-020 | License model | **Dual-licensed under Apache-2.0 OR MIT (recipient's choice)**, the standard Rust-ecosystem permissive license model. Accepted on 2026-05-14. Compatible with every direct dependency in the PoC tree (`tsclientlib` MIT-OR-Apache-2.0, `flutter_rust_bridge` MIT, `cpal` Apache-2.0, `rusqlite` MIT, `keyring` MIT-OR-Apache-2.0, etc.) and with the Flutter framework's BSD-3-Clause. The license texts ship as `LICENSE-APACHE` and `LICENSE-MIT` at the repository root; an aggregator `LICENSE` points to both. `NOTICE` enumerates current direct-dependency attributions. The full OSS legal review (transitive deps, license obligations, OSS notices) remains under DEC-012 and is still required before public release. | Accepted | Product Owner + Legal | Business and OSS compliance decision. No longer a public-release blocker by itself; legal review under DEC-012 is the remaining gate. | -| DEC-022 | Canonical implementation directory layout | Accept the README's sketch as canonical: `apps/chanora_flutter/`, `core/chanora_core/`, `crates/chanora_protocol/`, `crates/chanora_audio/`, `crates/chanora_state/`, `crates/chanora_storage/`, `crates/chanora_diagnostics/`, `crates/chanora_bridge/`. Matches SAD §7.2 module decomposition | Accepted | Software Architect | Unblocks product-crate scaffolding; was not formalised by any prior doc. | -| DEC-023 | Windows desktop Global PTT priority | **P0 in MVP.** Resolves PTT-OPEN-001 from `gen2/chanora-desktop-ptt-review-summary-v0.9.2.md`. The Windows backend ladder (Raw Input → low-level keyboard hook → Focused fallback) is mandatory for the first public release; release notes shall not claim Global PTT support on Windows until live measurement confirms a Global level from a non-fallback rung. | Accepted | Product Owner + Windows Platform Owner | Sets the MVP commitment level for the most common desktop platform. | -| DEC-024 | macOS desktop Global PTT priority | **P0 in MVP, with explicit permission UX flow.** Resolves PTT-OPEN-002. The macOS backend shall request the Input Monitoring / Accessibility permission, accept user denial gracefully (continue at `L0Focused` without functional regression), and upgrade to Global asynchronously when the user grants the permission. | Accepted | Product Owner + macOS Platform Owner | Forces the permission UX to ship with the rest of the macOS audio path rather than as a follow-up. | -| DEC-025 | Officially-tested Linux environment for first public release | **GNOME on Wayland (only).** Resolves PTT-OPEN-003. The Linux backend shall use the freedesktop `org.freedesktop.portal.GlobalShortcuts` interface on GNOME-on-Wayland and fall back to Focused PTT on every other Linux environment (X11, sway, KDE, untested compositors). Release notes shall not claim Global PTT support outside the tested compositor. | Accepted | Product Owner + Linux Platform Owner | Bounds the verification matrix; honest claim on Linux. | -| DEC-026 | Mouse side-button support in first desktop PTT release | **Supported on Windows and macOS; Linux follows whatever the GlobalShortcuts portal exposes.** Resolves PTT-OPEN-004. The Raw Input backend (Windows) and the Event Tap backend (macOS) shall accept Mouse4 / Mouse5 bindings; the Linux portal binding accepts whatever the session exposes and the release notes shall not over-claim. | Accepted | Product Owner + UX Owner | Common dedicated PTT input class; shipping in MVP avoids a follow-up. | -| DEC-027 | PTT diagnostics privacy posture | **Capability and availability state only — no raw key codes ever leave the device.** Resolves PTT-OPEN-005. The diagnostic export shall name only `PttCapabilityLevel`, `backend_id`, `bound_input_class`, and `fallback_exercised`; the user's actual key value (scan code, virtual key, keysym) shall never be logged, persisted, or exported. `PttSanitizer` enforces this at write time. | Accepted | Security Reviewer + Privacy Reviewer | Closes a clear privacy risk that the gen2 review flagged; aligns with DEC-016. | -| DEC-028 | Missed-key-up watchdog requirement | **P0.** Resolves PTT-OPEN-006. The audio engine shall include a missed-key-up watchdog that clears `transmit_active` after a configured ceiling (default 30 s) when no key-up event arrives. The watchdog is a P0 release-gate item rather than an implementation-level concern because the failure mode (stuck transmission after the user has released the binding) is user-visible and reputation-relevant. | Accepted | Audio Owner + Software Architect | Prevents stuck-PTT bug class regardless of platform-input quirks. | -| DEC-029 | Flutter global-hotkey packages rejected for PTT | **Use the native Rust `DesktopPttBackend` trait + per-OS implementations (already specified in SDD-083 / SDD-084 / SDD-085); do not adopt `hotkey_manager`, `super_hot_key`, or any equivalent pub.dev package for PTT.** Rationale: those packages wrap the OS `RegisterHotKey` / `RegisterEventHotKey` semantics — they consume the key (suppressing it from other applications), they do not deliver a key-up event, and they do not support mouse side-buttons. PTT requires the opposite primitive (observe, do not consume, deliver both up and down). | Accepted | Software Architect + Audio Owner | Locks the v1 PTT capture path to the native backend; removes ambiguity for future maintainers tempted to "simplify" via a Flutter package. | -| DEC-030 | Voice activity detection deferred to P1 | **`TransmitMode::VoiceActivity` ships as a reserved enum variant with no v1 implementation.** The settings UI shows it as a disabled "coming soon" option. The actual implementation choice is deferred to a future baseline. Rationale: three viable backends were compared (RMS energy threshold — trivial but quality-poor; WebRTC VAD via the `webrtc-vad` crate — frozen-but-stable C++ BSD-3 dep, ~200 KB binary, industry baseline; Silero VAD via ONNX Runtime — best quality but ~8–16 MB binary uplift per platform plus an ONNX-runtime dependency surface). The v1 dependency-surface budget does not have room for the trade-off review required to pick correctly. Choosing too early risks either user-visible quality regression (RMS) or a forced ONNX adoption (Silero) before there is a comparable need for ML inference elsewhere (noise suppression, AEC). | Accepted | Audio Owner + Product Owner | Locks v1 to PTT + Continuous; preserves the enum surface so a P1 increment is non-breaking. | -| DEC-031 | Missed-key-up watchdog disabled on P0; redesign deferred to P1 | **The `MissedKeyUpWatchdog` is constructed and unit-tested but is NOT spawned by `ChanoraSession::start_audio` in the P0 baseline.** Supersedes DEC-028 for the v1 ship. Rationale: the original 30 s ceiling cut real users off mid-sentence when speaking through PTT for longer than the timeout — Mumble and TeamSpeak do not ship a comparable watchdog, so the protection is stricter than industry baseline while imposing a real UX cost. The watchdog's purpose (catching OS-level key-up loss when the app loses focus / is minimised / hits App Nap) remains valid; the fixed-timeout shape is the wrong implementation. P1 will reintroduce a redesigned variant using one of: (a) raised ceiling (~5 min, owner-tunable) only, (b) active OS-level key-state polling via `GetAsyncKeyState` / `CGEventSourceKeyState` / `XQueryKeymap` so we detect the actual OS desync directly, (c) audio-activity (RMS-silence) fallback once the level meter lands, or (d) a combination. The Rust unit tests for `MissedKeyUpWatchdog::spawn_on_signal` remain in `crates/chanora_audio/src/ptt.rs` so the P1 re-enable is non-breaking. | Accepted | Audio Owner + Product Owner | Eliminates a P0-class UX regression (long PTT speech cut off at 30 s) while preserving the implementation surface for P1. | - -## 4. Accepted MVP Defaults - -The "Recommended" defaults below have all been confirmed by the owner; -two were modified from the original recommendation (marked **MODIFIED**). - -| Area | Accepted MVP default | -|---|---| -| Release sequence | Internal Alpha → External Beta → MVP Public | -| MVP platforms | Windows, macOS, Linux, Android, iOS (staged release allowed) | -| Active connections | One active server connection | -| UI design system | Material 3 + Chanora Design System | -| Product language | **MODIFIED** — English + Chinese (Simplified) at MVP; i18n-ready architecture | -| Server content | Preserve and display Unicode; do not translate | -| Diagnostics | Local, user-initiated export only | -| Telemetry | None | -| Crash reporting | None unless later approved | -| Secret storage | Platform secure storage | -| Non-secret local storage | SQLite (`rusqlite` bundled) | -| Audio processing | Platform-native first; fallback strategy documented | -| AEC | Enabled by default where supported | -| AGC | Enabled by default (user-toggleable) | -| Noise suppression | Enabled by default (user-toggleable) | -| High-pass filter | Enabled by default | -| Android minimum | **MODIFIED** — API 28 (Android 9.0), raised from the original recommendation of API 24 | -| Android target | API 35 or newer per current Google Play policy on upload date | -| iOS minimum | iOS 13 | -| Apple App Store SDK gate | Xcode 26+ / iOS 26 SDK+ for uploads on or after 2026-04-28 | -| Audio crate | `cpal` (desktop, Android); iOS deferred | -| Bridge | Stable typed Flutter/Rust bridge; `flutter_rust_bridge` 2.x pinned | -| Implementation directory layout | `apps/chanora_flutter/`, `core/chanora_core/`, `crates/chanora_*` | -| License | **Dual-licensed under Apache-2.0 OR MIT**, recipient's choice (DEC-020) | - -## 5. Decision Impact Matrix - -| Decision | Affects SysRS | Affects SysDes | Affects SRS | Affects SAD | Affects SDD | Affects Verification | Affects Release | -|---|---|---|---|---|---|---|---| -| Minimum iOS / Android versions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | -| Android target SDK | No | No | Yes | No | No | Yes | Yes | -| Multiple active connections | Yes | Yes | Yes | Yes | Yes | Yes | Yes | -| AEC/AGC/NS/HPF defaults | Yes | Yes | Yes | Yes | Yes | Yes | Yes | -| Audio implementation path | No if behavior unchanged | Yes | Possibly | Yes | Yes | Yes | Yes | -| SDK/trademark/legal review | Yes | No | No | No | No | Yes | Yes | -| SQLite/equivalent choice | Possibly | Yes | Yes | Yes | Yes | Yes | Yes | -| Bridge choice | No if API behavior unchanged | Yes | Possibly | Yes | Yes | Yes | Yes | -| Apple App Store SDK gate | Yes | Yes | Yes | Yes | Yes | Yes | Yes | -| Diagnostics upload policy | Yes | Yes | Yes | Yes | Yes | Yes | Yes | -| Crash reporting | Yes if included | Yes if included | Yes if included | Yes if included | Yes if included | Yes | Yes | -| Flutter hotkey packages rejected for PTT (DEC-029) | No | Yes | Yes | Yes | Yes | Yes | No | -| VAD deferred to P1 (DEC-030) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - -## 6. Decisions That Must Be Confirmed By You - -All decisions in the register have been addressed by the owner. The -remaining release-gating *work* (not decisions) is the legal review -itself under DEC-012, which must complete before any public/store -release but is not an open decision: - -| Priority | Item | Status | -|---|---|---| -| P0 | DEC-012 legal/trademark/licensing review — perform the actual review work (non-affiliation wording final sign-off, trademark registrability check, transitive-dependency OSS obligations, `tsclientlib` license posture confirmation). | Pending; gate Accepted. | - -## 7. Open Decision Log - -| Decision ID | Owner | Decision | Status | Date | Notes | -|---|---|---|---|---|---| -| DEC-001 | Product Owner | Release type sequence | Accepted | 2026-05-14 | Internal Alpha → External Beta → MVP Public. | -| DEC-002 | Product Owner / Engineering | MVP platform strategy | Accepted | 2026-05-14 | All five platforms as target; staged release allowed. | -| DEC-003 | Product Owner / iOS Owner | Minimum iOS version | Accepted | 2026-05-14 | iOS 13. | -| DEC-004 | Product Owner / Android Owner | Minimum Android version | Accepted | 2026-05-14 | **API 28** (modified from the recommendation of API 24). | -| DEC-005 | Android Owner / Release Manager | Android target SDK | Accepted | 2026-05-14 | Google Play-required API on upload date (currently API 35+). | -| DEC-006 | Product Owner / Software Architect | Multiple server connections in MVP | Accepted | 2026-05-14 | Single connection in MVP. | -| DEC-007 | Audio Owner / Product Owner | AEC default | Accepted | 2026-05-14 | Enabled by default where supported. | -| DEC-008 | Audio Owner / Product Owner | AGC default | Accepted | 2026-05-14 | Enabled by default with user toggle. | -| DEC-009 | Audio Owner / Product Owner | Noise suppression default | Accepted | 2026-05-14 | Enabled by default with user toggle. | -| DEC-010 | Audio Owner | High-pass filter default | Accepted | 2026-05-14 | Enabled by default. | -| DEC-011 | Software Architect / Audio Owner | Audio processing path | Accepted | 2026-05-14 | Platform-native first; Rust/WebRTC-style fallback. | -| DEC-011.1 | Software Architect / Audio Owner | Audio crate (desktop / mobile) | Accepted (desktop: `cpal`; Android: `cpal`-on-Oboe) / Deferred (iOS) | 2026-05-13 | Closed by `poc/audio-capture-playback-spike` (desktop) and `poc/audio-capture-playback-android-spike` (Android). iOS crate TBD pending iOS spike. | -| DEC-012 | Legal / Compliance | SDK/trademark/licensing review | Accepted as a release gate | 2026-05-14 | Required before public/store release; legal review work still to be performed. | -| DEC-013 | Software Architect / Storage Owner | Local database | Accepted | 2026-05-14 | SQLite or equivalent for non-secret state. | -| DEC-013.1 | Software Architect / Storage Owner | SQLite crate | Accepted (`rusqlite` bundled) | 2026-05-13 | Closed by `poc/sqlite-storage-spike` 11/11. | -| DEC-013.2 | Software Architect / Storage Owner / Security Reviewer | Linux secure-storage backend policy | Accepted (Secret Service preferred, keyutils fallback) | 2026-05-13 | Closed by `poc/secure-storage-spike` 6/6. Resolves SysRS-053 / SysRS-162 ambiguity. | -| DEC-014 | Software Architect | Bridge choice | Accepted (`flutter_rust_bridge` 2.x pinned) | 2026-05-13 | Closed by `poc/flutter_rust_bridge_hello` 3/3. | -| DEC-015 | Product Owner | Product language for MVP | Accepted | 2026-05-14 | **English + Chinese (Simplified)** (modified from the recommendation of English-only). | -| DEC-016 | Product Owner / Legal / Security | Diagnostics upload policy | Accepted | 2026-05-14 | User-initiated local export only; no automatic upload. | -| DEC-017 | Product Owner / Legal / Security | Crash reporting | Accepted | 2026-05-14 | Disabled for MVP. | -| DEC-018 | Product Owner | Public product name | Accepted | 2026-05-14 | Chanora. Trademark check still required under DEC-012. | -| DEC-019 | Legal / Compliance | Public non-affiliation statement | Accepted (drafted wording) | 2026-05-14 | Final legal sign-off still required under DEC-012. | -| DEC-020 | Product Owner / Legal | License model | Accepted (Apache-2.0 OR MIT dual-license) | 2026-05-14 | Compatible with every direct dependency; texts ship as LICENSE-APACHE / LICENSE-MIT. Full OSS legal review remains under DEC-012. | -| DEC-021 | iOS Owner / Release Manager | Apple App Store SDK gate | Accepted | 2026-05-14 | Xcode 26+ / iOS 26 SDK+ on or after 2026-04-28. | -| DEC-022 | Software Architect | Canonical implementation directory layout | Accepted (README sketch) | 2026-05-13 | Closes the absence flagged during PoC review. | -| DEC-023 | Product Owner / Windows Platform Owner | Windows desktop Global PTT priority | Accepted (P0 / MVP) | 2026-05-15 | Resolves PTT-OPEN-001 from the gen2 desktop-PTT review. | -| DEC-024 | Product Owner / macOS Platform Owner | macOS desktop Global PTT priority | Accepted (P0 / MVP, permission-UX required) | 2026-05-15 | Resolves PTT-OPEN-002. | -| DEC-025 | Product Owner / Linux Platform Owner | Officially-tested Linux environment | Accepted (GNOME on Wayland only) | 2026-05-15 | Resolves PTT-OPEN-003. | -| DEC-026 | Product Owner / UX Owner | Mouse side-button support | Accepted (Windows + macOS; Linux portal-dependent) | 2026-05-15 | Resolves PTT-OPEN-004. | -| DEC-027 | Security / Privacy Reviewer | PTT diagnostics privacy posture | Accepted (capability + availability only, no key codes) | 2026-05-15 | Resolves PTT-OPEN-005. | -| DEC-028 | Audio Owner / Software Architect | Missed-key-up watchdog | Accepted (P0) | 2026-05-15 | Resolves PTT-OPEN-006. | -| DEC-029 | Software Architect / Audio Owner | Flutter global-hotkey packages rejected for PTT | Accepted | 2026-05-15 | Native `DesktopPttBackend` is the v1 PTT capture path; pub.dev hotkey packages consume the key, drop key-up events, and skip mouse side-buttons. | -| DEC-030 | Audio Owner / Product Owner | Voice activity detection deferred to P1 | Accepted (deferred to P1) | 2026-05-15 | `TransmitMode::VoiceActivity` reserved on the enum surface; UI shows "coming soon"; backend choice (RMS / WebRTC / Silero) deferred for dependency-surface review. | -| DEC-031 | Audio Owner / Product Owner | Missed-key-up watchdog disabled on P0; redesign deferred to P1 | Accepted (supersedes DEC-028 for P0) | 2026-05-16 | Watchdog implementation + tests retained; not spawned by `ChanoraSession::start_audio` in v1. P1 chooses between raised ceiling / OS key-state polling / RMS-silence fallback. | - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Updated decision register with proposed decisions for mobile minimum versions, audio defaults, audio implementation path, legal review, local database, bridge choice, diagnostics policy, and MVP release scope. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ for App Store Connect upload on or after 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-14 | Recorded owner-confirmed decisions surfaced during the initial PoC phase: DEC-014 Accepted (`flutter_rust_bridge` 2.x pinned); added DEC-011.1 Accepted for desktop (`cpal`) / Deferred for mobile; added DEC-013.1 Accepted (`rusqlite` bundled); added DEC-013.2 Accepted (Linux Secret Service preferred with keyutils fallback); added DEC-022 Accepted (canonical implementation directory layout per README sketch and SAD §7.2); DEC-020 explicitly Deferred and remains a public-release blocker. Evidence pointers: `poc/flutter_rust_bridge_hello/VERIFICATION.md`, `poc/secure-storage-spike/VERIFICATION.md`, `poc/sqlite-storage-spike/VERIFICATION.md`, `poc/audio-capture-playback-spike/VERIFICATION.md`. | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-14 | Promoted DEC-011.1 mobile half from Deferred to Accepted (Android), keeping iOS Deferred. Evidence: `poc/audio-capture-playback-android-spike/VERIFICATION.md` records empirical playback (22,050 frames at 44.1 kHz mono out of the device speaker) and capture (42,624 frames written to a valid 85,292-byte RIFF/WAVE mono 16-bit PCM file) on a physical Motorola Moto G Stylus 5G (2023) running Android 14 arm64-v8a, verifying the full Rust → cpal → Oboe → AAudio → Android audio HAL path. | - - -## Baseline Candidate 0.9.5 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-14 | Owner confirmation pass on all previously-Proposed decisions. Accepted: DEC-001, DEC-002, DEC-003, DEC-005, DEC-006, DEC-007, DEC-008, DEC-009, DEC-010, DEC-011, DEC-012 (as a release gate), DEC-013, DEC-015, DEC-016, DEC-017, DEC-018, DEC-019 (drafted wording), DEC-021. Two decisions modified from their original recommendations: **DEC-004 Android minimum** raised from API 24 to **API 28** (simpler audio path, narrower compatibility surface); **DEC-015 product language** expanded from English-only to **English + Chinese (Simplified)** for MVP (reflects the demonstrated TS3-compatible-server audience). DEC-020 license model remains Open / Deferred — the only public-release blocker outstanding. §4 renamed from "Recommended MVP Defaults" to "Accepted MVP Defaults" with MODIFIED rows annotated. §6 collapsed to the single remaining DEC-020 item. §7 dated and statused. | - - -## Baseline Candidate 0.9.6 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.6 | 2026-05-14 | DEC-020 license model closed: **Apache-2.0 OR MIT** dual-license (standard Rust-ecosystem permissive model). The license is compatible with every direct dependency in the PoC tree (tsclientlib, flutter_rust_bridge, cpal, rusqlite, keyring, hound, etc.) and with the Flutter framework's BSD-3-Clause. License texts added as `LICENSE-APACHE` and `LICENSE-MIT` at the repository root; the existing `LICENSE` file now aggregates both with the dual-license declaration and the standard Apache-2.0 inbound-contribution clause. `NOTICE` populated with current direct-dependency attributions. README §License rewritten. §4 updated. §6 collapsed: there is no longer any open decision — DEC-012 legal review remains a pending *work* item, not a pending decision. With this change, every previously-Proposed or Open decision in the register has been resolved; the only outstanding release-gating activity is the DEC-012 legal review itself (which is sign-off work, not an architectural choice). | - - -## Baseline Candidate 0.9.7 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.7 | 2026-05-14 | DEC-001 release-sequence progress recorded: Internal Alpha (`v0.1.0-alpha.1`, commit 3bb038c) completed on 2026-05-14; **Internal Beta first build (`v0.2.0-beta.1`)** reached the same day. Beta milestone adds voice in/out: `crates/chanora_audio` promoted from scaffold to a cpal-based capture + playback engine with `audiopus` Opus encoding and tsclientlib `AudioHandler` for decode + jitter buffer + mix; `crates/chanora_protocol` extended to forward inbound voice packets and accept outbound `OutPacket`s via mpsc channels; `core/chanora_core::ChanoraSession` exposes `start_audio`, `set_ptt`, and `audio_stats`; `crates/chanora_bridge` adds matching DTOs; the Flutter UI gains a "Start audio" action and a hold-to-talk PTT button with live frame counters. Verified end-to-end against `cn.teamspeak.app`; capture runs in graceful playback-only mode on hosts with no usable microphone (e.g. the PipeWire `auto_null` source on the verification host). No decision rows change; this entry documents progress against DEC-001 only. | -| 0.9.8 | 2026-05-15 | DEC-001 release-sequence progress recorded for the polished Internal Beta and the External Beta milestones, plus the first MVP-public release candidate. **`v0.3.0-beta.1`** ("Internal Beta polish") added the supervisor + reconnect-with-watchdog path (A.6), OS-connectivity-aware backoff (A.6.1), persistent identity at rest as a plain 0600 file (A.2), the redacted in-memory log sink + user-initiated diagnostic export per DEC-016 (A.3), the `SnapshotChanged` lifecycle event for UI auto-refresh (A.4), and the `mobile_voice_preset` config-surface plumb-through (A.5). **`v0.4.0-beta.2`** ("External Beta") added the server-password input, channel join via tap, self mute (input + output), master output gain, SQLite-backed bookmark list, ChaCha20-Poly1305 encryption of the identity at rest with the DEK in a separate `identity.dek` file, Android `AudioManager.setMode(MODE_IN_COMMUNICATION)` routing engagement via JNI, and the `.github/workflows/ci.yml` pipeline. **`v1.0.0-rc.1`** ("MVP Public release candidate") closes the v0.4 DEK-on-disk weakness on every keyring-reachable platform: `chanora_storage::IdentityFileStore` now stores the DEK in the OS keyring (Linux Secret Service via D-Bus / macOS Keychain / Windows Credential Manager / iOS Keychain via the `keyring` crate) and migrates pre-existing file-fallback installs into the keyring opportunistically; bookmark server passwords are ChaCha20-Poly1305-encrypted under the same per-install DEK and the legacy plain `password TEXT` column is upgraded into a new `password_blob BLOB` column on the next `update()`; `SessionEvent::SnapshotChanged` now fires on any tree mutation (the in-channel-move blind spot from A.4 is closed); the in-app About dialog surfaces DEC-018 / DEC-019 / DEC-020. New `docs/governance/legal-review-readiness.md` carries the DEC-012 handoff package (trademark check, non-affiliation wording, third-party license posture, `cargo about` deliverables, `cargo deny` lifelines); new `docs/governance/staged-release-plan.md` enumerates the DEC-002 platform staging (Linux + Android sideload GA on DEC-012 sign-off; Windows, macOS, iOS gate on per-platform signed-build availability). No decision rows change; DEC-012 remains the sole outstanding release gate. | -| 0.9.9 | 2026-05-15 | Recorded six new accepted decisions DEC-023 through DEC-028 closing the gen2 desktop-PTT review's open questions PTT-OPEN-001 through PTT-OPEN-006: Windows Global PTT is P0/MVP (DEC-023), macOS Global PTT is P0/MVP with permission UX (DEC-024), the officially-tested Linux environment is GNOME-on-Wayland only (DEC-025), mouse side buttons are supported on Windows + macOS and Linux follows the portal (DEC-026), PTT diagnostics carry capability/availability only with no raw key codes (DEC-027), and the missed-key-up watchdog is a P0 release-gate requirement (DEC-028). No prior decision rows are mutated. | -| 0.9.10 | 2026-05-15 | Code-side promotion: the Linux GNOME-Wayland backend (DEC-025) is now a live `org.freedesktop.portal.GlobalShortcuts` session — `CreateSession` + `BindShortcuts` + `Activated` / `Deactivated` signal subscription scoped to the session handle, owned by a dedicated tokio task per backend instance. The Flutter "Configure" button on Linux portal delegates to the portal's own system dialog (Q3a) rather than the in-app `_PttBindingCaptureDialog`. Descriptor transitions broadcast via a `watch::Sender` consumed by `chanora_core::ChanoraSession::start_audio` and forwarded to `SessionEvent::PttCapability`. Cancellation / failure path downgrades to `L0Focused` and re-emits. No decision rows mutate. | -| 0.9.11 | 2026-05-15 | Added DEC-029 and DEC-030 covering the v1 audio + PTT lifecycle redesign. DEC-029 rejects Flutter global-hotkey packages (`hotkey_manager`, `super_hot_key`, equivalents) for PTT — they consume the key, do not deliver key-up, and do not support mouse side-buttons; the native Rust `DesktopPttBackend` already specified in SDD-083 / SDD-084 / SDD-085 is the v1 capture path. DEC-030 defers Voice Activity Detection to P1: `TransmitMode::VoiceActivity` ships as a reserved enum variant with no v1 implementation pending a backend trade-off review (RMS vs WebRTC VAD vs Silero VAD differ by ~8–16 MB and an ONNX-runtime dependency surface). No prior decision rows mutate; §5 impact matrix and §7 open-decision log gain matching rows. | -| 0.9.12 | 2026-05-16 | Added DEC-031: missed-key-up watchdog is disabled on P0 (supersedes DEC-028 for the v1 ship). The 30 s default ceiling spec'd in DEC-028 was cutting real PTT users off mid-sentence whenever a single utterance crossed the timeout; the watchdog's intent (catching OS-level key-up loss) remains valid, but the fixed-timeout implementation is the wrong shape. The `MissedKeyUpWatchdog` Rust type and its unit tests remain in `crates/chanora_audio/src/ptt.rs`; only the `ChanoraSession::start_audio` spawn is removed. P1 will choose between a raised ceiling, OS key-state polling (`GetAsyncKeyState` / `CGEventSourceKeyState` / `XQueryKeymap`), an RMS-silence fallback paired with the audio level meter, or a combination. DEC-028 stays in the register as historical context. | - - -## Baseline Candidate 0.9.8 Update — DEC-032 - -### DEC-032 — Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle - -| Field | Value | -|---|---| -| Decision ID | DEC-032 | -| Title | Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle. | -| Status | **Resolved (canonical three-ABI set restored)** | -| Owner | Build/Toolchain | -| Restore-by | P0 release gate (must be restored before any P0 release upload). | -| Date recorded | 2026-05-18 | -| Date resolved | 2026-05-18 | -| Supersedes | None (temporary deviation from SDD-073 item 4 and SDD-118 item 3; does NOT supersede them). | - -**Resolution (2026-05-18).** All four exit criteria below are met. -The propagation gap (criterion 1) is closed by a workspace -`[patch.crates-io]` stanza pinning the `cmake` crate to a fork -carrying cmake-rs PR #257 -(), which forwards the -`ANDROID_ABI` and `ANDROID_PLATFORM` environment variables (set per- -invocation by `cargo-ndk` 4.x and reinforced by the SDD-118 item 5 -cleanEnv map) to the child `cmake` invocation as `-D` variables. The -fork is pinned by exact commit SHA -(`bdad5edc569d82151922c5c6c4685b1563f12aa1` on `pr2502/cmake-rs`, -branch `android-build`) for reproducibility — see the -`[patch.crates-io]` block in the workspace root `Cargo.toml`. Per-ABI -`cargo ndk --platform 28 -t build -p chanora_bridge` now passes -cleanly for all three ABIs (criterion 2). `abiFilters` in -`apps/chanora_flutter/android/app/build.gradle.kts` is restored to -`{arm64-v8a, armeabi-v7a, x86_64}` and the `TODO(x86_64/armv7 -follow-up)` comment removed (criterion 3). The SDD-118 item 10 -release-inspection assertion exercises every staged `.so` (including -`libc++_shared.so` per SDD-118 item 6 extended) for all three ABIs -again — no code change required, that assertion is driven by the -restored `abiFilters` set (criterion 4). Upstream tracking: re- -evaluate the `[patch.crates-io]` override once PR #257 merges and a -fresh `cmake` crates.io release lands; at that point the patch -should be removed in favour of a plain dep bump. - -**Context.** SDD-073 item 4 and SDD-118 item 3 mandate the canonical -three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` for the Android AAB. -`apps/chanora_flutter/android/app/build.gradle.kts:72-79` currently has -`abiFilters` reduced to `arm64-v8a` only with a `TODO(x86_64/armv7 -follow-up)` comment explaining the reduction. - -**Cause.** The `audiopus_sys` + `cmake-rs` + NDK toolchain-file -interaction does not propagate `ANDROID_ABI` as a CMake variable when -invoked via the Gradle Exec task chain. `armeabi-v7a` and `x86_64` -builds fail because the inner CMake configure step does not see the -correct `-DANDROID_ABI=` argument. `arm64-v8a` (the smoke-test -emulator target) builds cleanly because it happens to be the default -that `cmake-rs` emits when no `ANDROID_ABI` is propagated. - -**Scope.** Smoke-test build only. The P0 release **must** restore the -full three-ABI set before any release upload. Internal Beta / RC -builds for the smoke-test emulator path may continue using the -reduced set while the cmake-rs propagation fix is in flight. - -**Exit criteria (all four must be met to close DEC-032).** - -1. `audiopus_sys` / `cmake-rs` `ANDROID_ABI` propagation gap resolved - (research + builder-dispatch fix; root-cause whether upstream - `cmake-rs` patch, a builder-side env override, or a Gradle-Exec - level argument injection is the correct fix). -2. All three ABIs (`arm64-v8a`, `armeabi-v7a`, `x86_64`) compile - cleanly in CI for `chanora_bridge` cdylib. -3. The `abiFilters` declaration in - `apps/chanora_flutter/android/app/build.gradle.kts` is restored to - the canonical three-ABI set, and the `TODO(x86_64/armv7 - follow-up)` comment removed. -4. The SDD-118 item 10 release-inspection assertion confirms that all - three `libchanora_bridge.so` files **and** all three - `libc++_shared.so` co-staged files (per SDD-118 item 6 extended, - absorbed into the traceability matrix v0.9.9 addendum) are present - in any release AAB. - -**Impact assessment.** - -- `arm64-v8a` installs work on all 64-bit modern Android devices, - including the smoke-test emulator and every device meeting the - DEC-004 API 28 minimum on 64-bit hardware. -- `armeabi-v7a` (32-bit ARM Android, ~1% of the 2026 active install - base for app-stores that still permit 32-bit) installations are - **blocked** until restoration. Affected users see Play Store - filtering and cannot install the AAB. -- `x86_64` (some Android emulators outside the smoke-test loop, rare - Chromebook deployments, some VMs) installations are **blocked** - until restoration. -- **P0 release-gate cannot pass** until the three-ABI set is - restored: release-inspection assertion (SDD-118 item 10) would - fail, and the canonical SDD-073 item 4 / SDD-118 item 3 contract - would be violated. -- No SDD edit is required: the deviation is governance-layer only - and the SDD canonical intent is unchanged. - -**Cross-references.** - -- SDD-073 item 4 (canonical Android ABI set). -- SDD-118 item 3 (Gradle automation enforcing the three-ABI set); - also item 6 (extended) for `libc++_shared.so` co-staging and item - 10 for the release-inspection assertion that any future restoration - must satisfy. -- `apps/chanora_flutter/android/app/build.gradle.kts:72-79` - (in-source TODO comment marking the deviation site). -- Audit task `ses_1c7645e36ffeY007MaYPep4wqs` (auditor New-D — origin - of this DEC entry). -- Traceability matrix v0.9.9 §D (governance cross-reference). -- DEC-031 (separate temporary deviation, for `MissedKeyUpWatchdog` - P0 disable) — listed only as precedent for the - "Active (temporary deviation)" status pattern; no direct technical - overlap. - -**§3 row (for canonical table consistency).** - -| Decision ID | Decision | Recommended decision | Status | Owner | Why it matters | -|---|---|---|---|---|---| -| DEC-032 | Android `abiFilters` set during P0 smoke-test cycle | Canonical three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` (per SDD-073 item 4 / SDD-118 item 3) restored 2026-05-18 after the `audiopus_sys` + `cmake-rs` + NDK toolchain-file `ANDROID_ABI` propagation gap was closed via a workspace `[patch.crates-io]` override pinning `cmake` to a fork carrying cmake-rs PR #257 | **Resolved** | Build/Toolchain | Multi-ABI install support restored; P0 release-gate ABI blocker cleared. Re-evaluate the `[patch.crates-io]` override once cmake-rs PR #257 merges and a fresh release lands. | - -**§5 row (impact matrix).** - -| Decision | Affects SysRS | Affects SysDes | Affects SRS | Affects SAD | Affects SDD | Affects Verification | Affects Release | -|---|---|---|---|---|---|---|---| -| `abiFilters` temporary reduction (DEC-032) | No | No | No | No | No (canonical intent unchanged; SDD-073 item 4 / SDD-118 item 3 stand) | Yes (release-inspection assertion path) | Yes (release-gate blocker until restored) | - -**§7 row (open decision log).** - -| Decision ID | Owner | Decision | Status | Date | Notes | -|---|---|---|---|---|---| -| DEC-032 | Build/Toolchain | Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle | Resolved (2026-05-18) | 2026-05-18 | Canonical three-ABI set restored 2026-05-18. Root cause (`audiopus_sys` + `cmake-rs` + NDK toolchain-file `ANDROID_ABI` propagation gap) closed by a workspace `[patch.crates-io]` override pinning the `cmake` crate to fork `pr2502/cmake-rs` @ `bdad5edc569d82151922c5c6c4685b1563f12aa1` carrying cmake-rs PR #257 (forwards `ANDROID_ABI` / `ANDROID_PLATFORM` env vars as `-D` variables to the child cmake). All four exit criteria met. Follow-up: drop the `[patch.crates-io]` override once PR #257 merges and a fresh `cmake` release lands. SDD-073 item 4 / SDD-118 item 3 unchanged. | - -### Change history - -| Version | Date | Description | -|---|---|---| -| 0.9.8 | 2026-05-18 | Added DEC-032: temporary reduction of Android `abiFilters` to `arm64-v8a` only during the P0 smoke-test cycle. Status: Active (temporary deviation) from SDD-073 item 4 / SDD-118 item 3, which both remain unchanged. Restore-by gate: any P0 release upload must restore the canonical three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` and satisfy the SDD-118 item 10 release-inspection assertion (including the `libc++_shared.so` co-staging per SDD-118 item 6 extended). Root cause: `audiopus_sys` + `cmake-rs` + NDK toolchain-file `ANDROID_ABI` propagation gap. Owner: Build/Toolchain. Cross-references: SDD-073 item 4, SDD-118 item 3 (+ item 6 extended, item 10), `apps/chanora_flutter/android/app/build.gradle.kts:72-79` (in-source TODO), audit task ses_1c7645e36ffeY007MaYPep4wqs, traceability matrix v0.9.9 addendum §D. No prior decision row mutates. | -| 0.9.8.1 | 2026-05-18 | DEC-032 **Resolved**: canonical three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` restored in `apps/chanora_flutter/android/app/build.gradle.kts`. Root cause closed by a workspace `[patch.crates-io]` stanza in the repo-root `Cargo.toml` pinning the `cmake` crate to fork `pr2502/cmake-rs` @ commit `bdad5edc569d82151922c5c6c4685b1563f12aa1` (branch `android-build`), which carries cmake-rs PR #257 forwarding the `ANDROID_ABI` and `ANDROID_PLATFORM` environment variables (set per invocation by `cargo-ndk` 4.x and reinforced by the SDD-118 item 5 cleanEnv map) to the child `cmake` invocation as `-D` variables. Verification (host: Linux): `cargo ndk --platform 28 -t arm64-v8a build -p chanora_bridge`, `... -t armeabi-v7a ...`, and `... -t x86_64 ...` all pass cleanly. `cargo check --workspace --all-targets` passes on the host target. SDD-073 item 4 / SDD-118 item 3 unchanged (canonical intent was always the three-ABI set). Follow-up: re-evaluate the `[patch.crates-io]` override once cmake-rs PR #257 merges and a fresh `cmake` release lands; at that point switch to a plain dep bump and remove the override. No prior decision row mutates. | diff --git a/docs/governance/repo-format-validation-report.md b/docs/governance/repo-format-validation-report.md deleted file mode 100644 index d4debac..0000000 --- a/docs/governance/repo-format-validation-report.md +++ /dev/null @@ -1,77 +0,0 @@ -# Repo Documentation Format Validation Report - -**Document type:** Configuration / Validation Report -**Version:** 0.9.3 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/repo-format-validation-report.md` - ---- - -## 1. Package - -```text -chanora-docs-repo-format-v0.9.3 -``` - -## 2. File Count - -| Type | Count | -|---|---:| -| Markdown files under docs/ | 38 (added `docs/architecture/desktop-ptt-architecture.md`) | -| README files | 1 | - -## 3. Naming Check - -| Check | Result | -|---|---:| -| Old `CHANORA_*_v*.md` filename references outside migration map | 0 | -| Old `CHANORA_*_v*.zip` package references outside migration map | 0 | -| CJK characters in en-only doc set | 0 | - -## 4. Defined ID Counts - -| ID family | Defined IDs | -|---|---:| -| SysRS | 302 | -| SysDes | 148 | -| SRS | 203 | -| SAD | 80 | -| SDD | 93 | - -## 5. Undefined Reference Check - -| ID family | Undefined references | -|---|---:| -| SysRS | 0 | -| SysDes | 0 | -| SRS | 0 | -| SAD | 0 | -| SDD | 0 | - -## 6. Direct-Layer Rule Check - -| Rule | Result | -|---|---:| -| SRS direct SysRS references | 0 | -| SAD direct SysRS references | 0 | -| SAD direct SysDes references | 0 | -| SDD direct SysRS references | 0 | -| SDD direct SysDes references | 0 | -| SDD direct SRS references | 0 | - -## 7. Old Reference Details - -| Type | Values | -|---|---| -| Old markdown filename references outside migration map | None | -| Old ZIP filename references outside migration map | None | - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Validated repository-format documentation package and internal filename reference updates. | -| 0.9.3 | 2026-05-15 | Re-validated repository-format after desktop PTT update: added `docs/architecture/desktop-ptt-architecture.md`; ID totals advance to 302 / 148 / 203 / 79 / 92; naming, undefined-reference, and direct-layer-rule counts remain at zero. | -| 0.9.4 | 2026-05-15 | P0 audit follow-up: ID totals advance to 302 / 148 / 203 / 80 / 93 after adding `SAD-080` (sources SRS-200) and `SDD-093` (sources SAD-080). Direct-layer-rule and undefined-reference counts remain zero. | diff --git a/docs/governance/repository-bootstrap-plan.md b/docs/governance/repository-bootstrap-plan.md deleted file mode 100644 index e35fe16..0000000 --- a/docs/governance/repository-bootstrap-plan.md +++ /dev/null @@ -1,72 +0,0 @@ -# Repository Bootstrap Plan - -**Document type:** Governance / Repository Bootstrap Plan -**Version:** 0.1.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/governance/repository-bootstrap-plan.md` - ---- - -## 1. Purpose - -This document defines the files and directories that should exist before product implementation begins. - -## 2. Bootstrap Scope - -This bootstrap package intentionally excludes CI workflow files. - -The goal is to establish: - -- repository metadata; -- contributor guidance; -- security policy; -- changelog; -- license placeholder; -- notice placeholder; -- editor and ignore rules; -- local command placeholders; -- documentation validation script; -- future scaffold plan. - -## 3. Required Root Files - -| File | Purpose | -|---|---| -| `README.md` | App/project overview | -| `CONTRIBUTING.md` | Contribution rules | -| `SECURITY.md` | Security reporting and security gates | -| `CHANGELOG.md` | Release/change history | -| `LICENSE` | License placeholder until final license decision | -| `NOTICE` | Non-affiliation and attribution placeholder | -| `.editorconfig` | Editor formatting baseline | -| `.gitignore` | Ignore rules | -| `.env.example` | Safe local environment template | -| `justfile` | Local command entrypoint | - -## 4. Required Tooling Files - -| File | Purpose | -|---|---| -| `tools/validate_docs.py` | Local documentation and traceability validation | - -## 5. Future Work - -CI workflow files should be added later after this bootstrap is committed and the repo structure is accepted. - -Recommended later CI files: - -```text -.github/workflows/docs.yml -.github/workflows/repo-health.yml -.github/workflows/flutter.yml -.github/workflows/rust.yml -.github/workflows/security.yml -``` - -## 6. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial repository bootstrap plan excluding CI. | diff --git a/docs/governance/staged-release-plan.md b/docs/governance/staged-release-plan.md deleted file mode 100644 index 3504332..0000000 --- a/docs/governance/staged-release-plan.md +++ /dev/null @@ -1,111 +0,0 @@ -# Staged MVP release plan — DEC-002 channels - -| Version | Date | Status | -|---|---|---| -| 0.1.0 | 2026-05-15 | Initial draft alongside v1.0.0-rc.1 | - -## Purpose - -DEC-002 in `product-decision-register.md` accepts a five-platform -MVP target (Windows, macOS, Linux, Android, iOS) and explicitly -permits a **staged release** in which not all platforms ship on the -same day. This document records the staging plan for the MVP public -release. - -## Channel definitions - -* **GA — Linux desktop**: x86_64 GNU/Linux. Direct distribution - via the GitHub Releases page (release tarball + AppImage when - the bundle is added). No app store. -* **GA — Android**: arm64-v8a APK. Direct distribution from the - Releases page during early MVP. Play Store submission deferred - until DEC-012 legal sign-off includes Play-specific consumer- - protection review (`docs/governance/legal-review-readiness.md` - §9). Other Android ABIs (armeabi-v7a, x86_64) are deferred to - v1.1. -* **Beta — Windows**: x86_64 MSI / portable zip. The build steps - are documented in `docs/release/windows-build.md`; a live - artefact has not yet been produced because the development - toolchain ran on Linux. Public bits land once a Windows builder - produces a signed artefact. -* **Beta — macOS**: Apple Silicon (`aarch64-apple-darwin`) + Intel - (`x86_64-apple-darwin`) universal `.app`. Same gating as Windows: - build documentation only at v1.0.0-rc.1; an Apple-side builder - must produce a notarised artefact. -* **Beta — iOS**: arm64 IPA. Same gating; in addition the - `mobile_voice_preset` AAudio engagement on Android is documented - as a routing hint, and the iOS equivalent - (`AVAudioSession.Mode.voiceChat`) is not yet wired. - -## Promotion schedule - -Each row triggers when the listed prerequisite is satisfied. There -is no calendar. - -| Order | Channel | Prerequisite | -|---|---|---| -| 1 | Linux GA | DEC-012 legal sign-off; `v1.0.0` tag cut from `v1.0.0-rc.N` after all RC reviews close. | -| 2 | Android GA (sideload) | Same prerequisite; APK signed with the project key; Releases page updated. | -| 3 | Android Play Store | DEC-012 §9 Play-listing review complete; signing key migrated to Play App Signing if not already there. | -| 4 | Windows Beta | Live x86_64 Windows builder produces a signed MSI; smoke test on a Windows 11 host that the build host can verify. | -| 5 | macOS Beta | Live `aarch64-apple-darwin` build with code-signing certificate and notarisation; smoke test. | -| 6 | iOS Beta | TestFlight build cycle; per-device entitlement review; mic permission flow validated. | -| 7 | Windows / macOS / iOS GA | Each platform promoted from Beta after its first round of public-Beta feedback is triaged. | - -## Per-platform readiness as of v1.0.0-rc.1 - -### Linux x86_64 - -* Cargo build: green (`cargo check --workspace`, `cargo test - --workspace` with `CHANORA_DISABLE_KEYRING=1`). -* Flutter build: `flutter build linux --release` documented; live - bundle exists at `apps/chanora_flutter/build/linux/x64/`. -* Audio: cpal-on-PipeWire / ALSA verified through Beta lifecycle. -* Secure storage: Secret Service via D-Bus when a session is - available; file-fallback when not. -* Status: **GA-ready** pending DEC-012. - -### Android arm64-v8a - -* Cargo + cargo-ndk build: green; the APK pipeline produced - `app-release.apk` for v0.4.0-beta.2. -* Audio: cpal-on-AAudio with `AudioManager.MODE_IN_COMMUNICATION` - engaged via JNI on engine start. -* Secure storage: keyring crate falls back to file on Android in - v1.0.0-rc.1 (no Android Keystore wiring yet). The identity and - bookmark passwords remain ChaCha20-Poly1305-encrypted under the - file-DEK in this configuration. -* Status: **GA-ready for sideload** pending DEC-012; Play Store - promotion is a separate gate. - -### Windows / macOS / iOS - -* Build docs exist (`docs/release/windows-build.md`, - `docs/release/ios-build.md`); macOS does not have a dedicated - doc yet because the build is a straightforward - `flutter build macos` once Apple-side signing is configured. -* Status: **Beta-track**. The RC tag still ships for these - platforms in source form (anyone with the appropriate toolchain - can build), but no signed binary is included. - -## Rollback policy - -Each platform's Releases-page artefact carries the exact `v1.0.0-rc.N` -or `v1.0.0` tag. If a critical regression surfaces in a channel: - -1. Mark the affected Releases asset "deprecated — do not download" in - the GitHub UI within 24h. -2. Cut a `v1.0.x` patch from the `release-1.0` branch (created - when `v1.0.0` is tagged). -3. Re-promote per the schedule above; no platform fast-tracks the - schedule, no platform skips a channel. - -## Out-of-scope for MVP - -* iOS hardware AEC engagement (`AVAudioSession.Mode.voiceChat`). -* Android `setInputPreset(VOICE_COMMUNICATION)` (RISK-AUDIO-MOBILE-001). -* Android Keystore-backed DEK (the file-fallback path is exercised in - the current build). -* Multi-server connection (DEC-006: explicitly out of MVP). -* Crash reporting (DEC-017: explicitly disabled). -* Automatic diagnostic upload (DEC-016: user-initiated only). diff --git a/docs/governance/traceability-matrix.md b/docs/governance/traceability-matrix.md deleted file mode 100644 index 03008ed..0000000 --- a/docs/governance/traceability-matrix.md +++ /dev/null @@ -1,1160 +0,0 @@ - -# Chanora Requirements and Design Traceability Matrix - -**Version:** 0.9.11 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Lifecycle hierarchy:** `SysRS -> SysDes -> SRS -> SAD -> SDD` - -**Repo path:** `docs/governance/traceability-matrix.md` --- - -## 1. Strict Hierarchy - -The Chanora documentation hierarchy shall follow this structure strictly: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -``` - -Direct-source rules: - -| Document | Direct upstream source allowed | -|---|---| -| SysDes | SysRS | -| SRS | SysDes only | -| SAD | SRS only | -| SDD | SAD only | - -Prohibited direct links: - -| Document | Prohibited direct source | -|---|---| -| SRS | SysRS | -| SAD | SysRS, SysDes | -| SDD | SysRS, SysDes, SRS | - -## 2. Current Baseline Documents - -| Layer | Current baseline | ID range | -|---|---|---| -| SysRS | `chanora_SysRS_v0.7.md` | SysRS-001 through SysRS-285 | -| SysDes | `chanora_SysDes_ASPICE_SYS3_v0.6.md` | SysDes-001 through SysDes-132 | -| SRS | `chanora_SRS_ASPICE_SWE1_v0.5.md` | SRS-001 through SRS-184 | -| SAD | `chanora_SAD_ASPICE_SWE2_v0.3.md` | SAD-001 through SAD-060 | -| SDD | `chanora_SDD_ASPICE_SWE3_v0.3.md` | SDD-001 through SDD-070 | - -## 3. Coverage Rules - -| Upstream layer | Downstream layer | Coverage rule | -|---|---|---| -| SysRS | SysDes | SysRS shall be fully covered by SysDes. | -| SysDes | SRS | Software-team-related SysDes items shall be fully covered by SRS. | -| SRS | SAD | SAD shall cover all SRS items. | -| SAD | SDD | SDD shall cover all SAD items. | - -## 4. Baseline Coverage Summary - -| Source | Target | -|---|---| -| SysRS-001 through SysRS-257 | SysDes-001 through SysDes-110 | -| SysRS-258 through SysRS-285 | SysDes-111 through SysDes-132 | -| SysDes-001 through SysDes-110 | SRS-001 through SRS-143 | -| SysDes-111 through SysDes-132 | SRS-144 through SRS-184 | -| SRS-001 through SRS-030 | SAD-032, SAD-039, SAD-040, SAD-041 | -| SRS-031 through SRS-060 | SAD-033, SAD-039, SAD-041 | -| SRS-061 through SRS-090 | SAD-034, SAD-039, SAD-041 | -| SRS-091 through SRS-110 | SAD-035 | -| SRS-111 through SRS-124 | SAD-036, SAD-050 | -| SRS-125 through SRS-134 | SAD-037, SAD-049 | -| SRS-135 through SRS-143 | SAD-038 | -| SRS-144 through SRS-184 | SAD-001 through SAD-031, SAD-039 through SAD-060 | -| SAD-001 through SAD-007 | SDD-001 through SDD-010 | -| SAD-008 through SAD-011 | SDD-011 through SDD-015 | -| SAD-012 through SAD-016 | SDD-016 through SDD-026 | -| SAD-017 through SAD-019 | SDD-027 through SDD-030 | -| SAD-020 through SAD-027 | SDD-031 through SDD-041 | -| SAD-028 through SAD-031 | SDD-042 through SDD-045 | -| SAD-032 through SAD-038 | SDD-046 through SDD-050 | -| SAD-039 through SAD-045 | SDD-046 through SDD-050, SDD-055, SDD-056 | -| SAD-046 through SAD-050 | SDD-051 through SDD-058, SDD-061 | -| SAD-051 through SAD-060 | SDD-057 through SDD-070 | - -## 5. Change Impact Rules - -| Changed layer | Required impact analysis | -|---|---| -| SysRS | Review SysDes coverage; update SRS only through updated SysDes. | -| SysDes | Review affected SRS requirements; SRS shall not bypass SysDes. | -| SRS | Review affected SAD items; SAD shall link only to SRS. | -| SAD | Review affected SDD items; SDD shall link only to SAD. | -| SDD | Review implementation, unit construction, and verification evidence. | - -## 6. Traceability Verification Checklist - -| Check | Expected result | -|---|---| -| SysDes references SysRS | Allowed | -| SRS references SysRS | Not allowed | -| SRS references SysDes | Required | -| SAD references SRS | Required | -| SAD references SysRS or SysDes | Not allowed | -| SDD references SAD | Required | -| SDD references SysRS, SysDes, or SRS | Not allowed | -| Latest SAD ID range | SAD-001 through SAD-060 | -| Latest SDD ID range | SDD-001 through SDD-070 | - - -## 8. Verification Work Product Traceability - -Verification work products are downstream evidence-producing artifacts. They do not change the strict engineering hierarchy. - -| Verification document | Direct verification source | Coverage | -|---|---|---| -| `chanora_SWE4_Unit_Verification_Plan_v0.1.md` | SDD | SDD-001 through SDD-070 | -| `chanora_SWE5_Software_Integration_Verification_Plan_v0.1.md` | SAD and SDD | SAD-001 through SAD-060 and SDD-001 through SDD-070 | -| `chanora_SWE6_Software_Verification_Plan_v0.1.md` | SRS | SRS-001 through SRS-184 | -| `chanora_SYS4_System_Integration_Verification_Plan_v0.1.md` | SysDes | SysDes-001 through SysDes-132 | -| `chanora_Verification_Master_Plan_v0.1.md` | Verification planning baseline | SWE.4, SWE.5, SWE.6, SYS.4 | - -## 9. Verification Change Impact - -| Changed artifact | Verification impact | -|---|---| -| SDD | Re-select SWE.4 unit verification measures and affected SWE.5 integration measures. | -| SAD | Update SDD if needed and re-select affected SWE.5 integration measures. | -| SRS | Update SAD/SDD if needed and re-select affected SWE.6 verification measures. | -| SysDes | Update downstream engineering artifacts if needed and re-select affected SYS.4 measures. | -| SysRS | Update SysDes and downstream artifacts if requirements intent changes. | - - -## 10. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial strict traceability matrix. | -| 0.2.0 | 2026-05-14 | Updated current baseline to SAD v0.3 and SDD v0.3, with SAD-001 through SAD-060 and SDD-001 through SDD-070 coverage. | -| 0.3.0 | 2026-05-14 | Added downstream verification work product traceability for SWE.4, SWE.5, SWE.6, and SYS.4. | - ---- - -## 11. Product Decision Traceability Addendum - -| Source | Target | -|---|---| -| SysRS-286 through SysRS-295 | SysDes-133 through SysDes-141 | -| SysDes-133 through SysDes-141 | SRS-185 through SRS-194 | -| SRS-185 through SRS-194 | SAD-061 through SAD-070 | -| SAD-061 through SAD-070 | SDD-071 through SDD-080 | -| SDD-071 through SDD-080 | SWE.4 addendum SWE4-UV-031 through SWE4-UV-034 | -| SAD-061 through SAD-070 and SDD-071 through SDD-080 | SWE.5 addendum SWE5-IV-014 | -| SRS-185 through SRS-194 | SWE.6 addendum SWE6-SV-016 | -| SysDes-133 through SysDes-141 | SYS.4 addendum SYS4-SIV-015 | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - ---- - -## 12. Platform Release Policy Traceability - -| Policy document | Covered decisions | -|---|---| -| `docs/release/platform-release-policy.md` | iOS runtime target, Apple App Store Connect upload SDK gate, Android runtime target, Google Play target API gate | - -The Apple App Store Connect upload gate remains linked through: - -```text -SysRS-287 -> SysDes-134 -> SRS-186 -> SAD-062 -> SDD-072 -``` - -The corrected effective date is: - -```text -Since 2026-04-28: -App Store Connect upload builds require Xcode 26 or later -using iOS 26 / iPadOS 26 SDK or later. -``` - -This build-SDK gate is separate from the iOS runtime deployment target. - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Traceability Addendum (Baseline Candidate 0.9.3) - -Strict layered sourcing for the desktop PTT chain: - -```text -SysRS-296..302 - -> SysDes-142..148 - -> SRS-195..203 - -> SAD-071..079 - -> SDD-081..092 -``` - -| SysRS | SysDes | SRS | SAD | SDD | -|---|---|---|---|---| -| SysRS-296 (Focused PTT mandatory) | SysDes-142, SysDes-144 | SRS-201 | SAD-075 | SDD-089 | -| SysRS-297 (Global PTT capability-dependent) | SysDes-142 | SRS-195 | SAD-071 | SDD-081 | -| SysRS-298 (Capability exposed) | SysDes-143, SysDes-147, SysDes-148 | SRS-196 | SAD-076, SAD-078 | SDD-082, SDD-088, SDD-091 | -| SysRS-299 (Windows ladder) | SysDes-145 | SRS-197 | SAD-072 | SDD-083, SDD-084 | -| SysRS-300 (macOS permission-aware) | SysDes-145 | SRS-198 | SAD-073 | SDD-085 | -| SysRS-301 (Linux GNOME-Wayland) | SysDes-145 | SRS-199 | SAD-074 | SDD-086 | -| SysRS-302 (No raw key history) | SysDes-146 | SRS-202 | SAD-077 | SDD-090 | -| (DEC-026 mouse buttons) | SysDes-142, SysDes-145 | SRS-200 | SAD-080 | SDD-093 | -| (DEC-028 missed-key-up watchdog) | SysDes-142, SysDes-144 | SRS-203 | SAD-079 | SDD-092 | - -Verification coverage: - -```text -SDD-081..092 -> SWE4-UV-035..039 -SAD-071..079 + SDD-081..092 -> SWE5-IV-015 -SRS-195..203 -> SWE6-SV-017 -SysDes-142..148 -> SYS4-SIV-016 -``` - -No forbidden direct links introduced: SRS continues to source from SysDes only, SAD from SRS only, SDD from SAD only. - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT traceability rows covering SysRS-296..302 -> SysDes-142..148 -> SRS-195..203 -> SAD-071..079 -> SDD-081..092 and the verification coverage onto SWE.4 / SWE.5 / SWE.6 / SYS.4. | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-15 | Corrected SRS-200 traceability row: SAD coverage moves from the narrative `SAD-072..074` annotation to the dedicated `SAD-080`, with SDD coverage in the new `SDD-093`. The change preserves strict layer discipline (SRS-200 -> SAD-080 -> SDD-093). No other rows mutate. | - - -## v1 Audio + PTT Lifecycle Traceability Addendum (Baseline Candidate 0.9.5) - -Strict layered sourcing for the v1 audio + PTT lifecycle chain: - -```text -SysRS-303..304 - -> SysDes-149..151 - -> SRS-204..207 - -> SAD-081..083 - -> SDD-094..097 -``` - -| SysRS | SysDes | SRS | SAD | SDD | Cross-reference | -|---|---|---|---|---|---| -| SysRS-303 (Transmit modes, lifecycle, listen-only, hard-mute) | SysDes-149, SysDes-150 | SRS-204, SRS-205, SRS-207 | SAD-081, SAD-083 | SDD-094, SDD-095, SDD-097 | DEC-029 (native PTT backend locked), DEC-030 (VAD deferred) | -| SysRS-304 (PTT release tail) | SysDes-151 | SRS-206 | SAD-082 | SDD-096 | — | - -No forbidden direct links introduced: SRS continues to source from SysDes only, SAD from SRS only, SDD from SAD only. DEC-029 / DEC-030 are governance cross-references and do not act as engineering-layer direct sources. - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added v1 audio + PTT lifecycle traceability rows covering SysRS-303..304 -> SysDes-149..151 -> SRS-204..207 -> SAD-081..083 -> SDD-094..097, with DEC-029 (Flutter hotkey packages rejected) and DEC-030 (VAD deferred to P1) recorded as governance cross-references. | - - -## Android P0 Reconciliation Traceability Addendum (Baseline Candidate 0.9.6) - -This addendum incorporates the Wave 2A.2 / Wave 2B Android P0 deltas across -SysRS, SRS, SAD, SDD, Verification, and Code. It does not relax any -hierarchy rule: SRS continues to source from SysDes only, SAD from SRS only, -SDD from SAD only, and Verification remains downstream evidence. - -### A. Changed item: SysRS-288 (API 24 -> API 28 per DEC-004) - -```text -SysRS-288 (API 28 baseline, DEC-004) - -> SysDes-135 (Android platform baseline) - -> SRS-187 (API 28 minimum) - -> SAD-063 (Android build config isolation, API 28 baseline) - -> SDD-073 (AndroidBuildConfig API 28, NDK ABIs, AAB, R8) - -> SWE4-UV-040 (build-config unit), SWE5-IV-020 (AAB pipeline integration), - SWE6-SV-022 (Android minimum API qualification), - SYS4-SIV-015 (strengthened Android target gate) - -> android-p0-acceptance TC-0.x (device matrix floor row), TC-13 -Code anchors: apps/chanora_flutter/android/app/build.gradle.kts (SDD-073/SDD-109). -Governance cross-reference: decision-impact-assessment.md §2 row updated to API 28. -``` - -### B. New items: SysRS-305, SysRS-306 (Android in-call mode + RECORD_AUDIO timing) - -Both items currently trace through SysDes-135 as the nearest SysDes -anchor. A SysDes follow-up is recommended to introduce dedicated derivation -items so that the `Source SysDes` field for SRS-208/209/210..215 can be -tightened beyond the general Android platform baseline (see §F). - -```text -SysRS-305 (Android in-call audio mode engagement) - -> SysDes-135 - -> SRS-208 (in-call audio mode on voice-session connect/release) - -> SAD-084 (AndroidAudioModeController) - -> SDD-108 (AndroidAudioModeController snapshot/restore + refcount) - -> SWE4-UV-045 (unit), SWE5-IV-018 (FGS + mode round-trip), - SWE6-SV-020 (in-call mode round-trip qualification), - SYS4-SIV-017 (in-call mode + Bluetooth SCO awareness) - -> android-p0-acceptance TC-6, TC-3.4 -``` - -```text -SysRS-306 (RECORD_AUDIO runtime acquisition + listen-only fallback) - -> SysDes-135 - -> SRS-209 (RECORD_AUDIO + listen-only fallback) - -> SAD-085 (Android permission adapter, listen-only first-class) - -> SDD-106 (AndroidPermissionRequester) - -> SWE4-UV-041 (unit state machine), SWE5-IV-017 (permission deny + FGS not started + listen-only), - SWE6-SV-019 (RECORD_AUDIO timing + listen-only qualification) - -> android-p0-acceptance TC-2 -Code anchors: AndroidPermissionRequester.kt (SDD-106), MainActivity.kt (SDD-106). -``` - -### C. New SRS items derived from SysDes-135 for the Android voice audio backend - -| SRS | Source SysDes | SysRS addressed | SAD | SDD | SWE.4 | SWE.5 | SWE.6 | Acceptance | -|---|---|---|---|---|---|---|---|---| -| SRS-210 (Android mouth-to-ear latency ≤150 ms low-latency / ≤250 ms fallback) | SysDes-135 | SysRS-055, SysRS-288 | SAD-081 (audio engine) + SAD-084 (mode controller dependency) | PENDING_SDD (latency budget item — reserved as SDD-111) | PENDING | PENDING | PENDING | TC-6 supporting (mode → routing), latency measurement deferred to P1 device lab | -| SRS-211 (AAudio input preset VOICE_COMMUNICATION + fallback) | SysDes-135 | SysRS-055, SysRS-305 | SAD-081 | PENDING_SDD (reserved as SDD-112) | PENDING | PENDING | PENDING | TC-6 indirect | -| SRS-212 (Hardware AEC/NS/AGC engagement + software fallback) | SysDes-135 | SysRS-055, SysRS-305 | SAD-081 | PENDING_SDD (reserved as SDD-113) | PENDING | PENDING | PENDING | TC-6 indirect; AndroidManifest.xml carries SDD-113 trace comment | -| SRS-213 (AAUDIO_USAGE_VOICE_COMMUNICATION / CONTENT_TYPE_SPEECH on output) | SysDes-135 | SysRS-305 | SAD-081 | PENDING_SDD (reserved as SDD-114) | PENDING | PENDING | PENDING | TC-6 supporting | -| SRS-214 (AAUDIO sharing-mode EXCLUSIVE best-effort + SHARED fallback) | SysDes-135 | SysRS-055 | SAD-081 | PENDING_SDD (reserved as SDD-115) | PENDING | PENDING | PENDING | — | -| SRS-215 (Foreground service hosting for background mic capture) | SysDes-135 | SysRS-217, SysRS-111 chain | SAD-086 (AndroidVoiceForegroundService) | SDD-107 (AndroidVoiceForegroundService) + PENDING_SDD reserved as SDD-116 for `foregroundServiceType="microphone"` manifest binding | SWE4-UV-044 (FGS lifecycle) | SWE5-IV-016 (JNI → FGS), SWE5-IV-017 (permission deny → FGS not started) | SWE6-SV-018 (FGS satisfies SRS-111) | TC-3, TC-3.4 | - -PENDING_SDD rows above are reserved for the in-flight detailed-designer -task that authors SDD-111..SDD-116. At the time of this revision, the SDD -file contains SDD-001..SDD-110 only. See §G. - -> **Status pointer (v0.9.7+):** SDD-111..SDD-116 have since been authored -> in `docs/architecture/sdd.md` (SDD v0.9.9). For the resolved -> SRS-210..SRS-215 → SDD-111..SDD-116 mapping, see the -> "Android Voice Audio Backend SDD Closure Addendum (Baseline Candidate -> 0.9.7)" below and its subsequent §A delta inventory. The PENDING_SDD -> markers above are retained for historical context only. - -### D. New SAD items (Android-specific allocations) - -| SAD | Source SRS | SDD | Code anchors | -|---|---|---|---| -| SAD-084 (AndroidAudioModeController) | SRS-208 | SDD-108 | (Android Kotlin scaffolding pending; AndroidManifest.xml carries SDD-108 trace) | -| SAD-085 (Android permission adapter, listen-only first-class) | SRS-209 | SDD-106 | AndroidPermissionRequester.kt, MainActivity.kt | -| SAD-086 (AndroidVoiceForegroundService) | SRS-111 (Android-specific allocation) | SDD-107 | AndroidVoiceForegroundService.kt, AndroidManifest.xml | - -### E. New / refreshed SDD items and their Code + Verification anchors - -| SDD | Source SAD | Code anchor (this session) | Verification | -|---|---|---|---| -| SDD-028 (BackIntentService — expanded full spec) | SAD-018 | BackIntentBridge.kt, back_intent_policy.dart, back_intent_service.dart, MainActivity.kt, AndroidManifest.xml | SWE4-UV-042, SWE5-IV-019, SWE6-SV-021, TC-11, TC-12 | -| SDD-073 (AndroidBuildConfig — refreshed: API 28, NDK ABIs, AAB, R8) | SAD-063 | apps/chanora_flutter/android/app/build.gradle.kts | SWE4-UV-040, SWE5-IV-020, SWE6-SV-022, SWE6-SV-023, SYS4-SIV-015 (strengthened), SYS4-SIV-018, TC-0.x, TC-13 | -| SDD-105 (AndroidJniBootstrap) | SAD-063 (Android platform services bootstrap) | ChanoraApplication.kt, MainActivity.kt | SWE4-UV-043, SWE5-IV-016 | -| SDD-106 (AndroidPermissionRequester) | SAD-085 | AndroidPermissionRequester.kt, MainActivity.kt | SWE4-UV-041, SWE5-IV-017, SWE6-SV-019, TC-2 | -| SDD-107 (AndroidVoiceForegroundService) | SAD-086 | AndroidVoiceForegroundService.kt, AndroidManifest.xml | SWE4-UV-044, SWE5-IV-016, SWE5-IV-017, SWE5-IV-018, SWE6-SV-018, TC-3 | -| SDD-108 (AndroidAudioModeController) | SAD-084 | (Kotlin controller scaffolding pending; AndroidManifest.xml carries SDD-108 trace) | SWE4-UV-045, SWE5-IV-018, SWE6-SV-020, SYS4-SIV-017, TC-6 | -| SDD-109 (AndroidAaBuildPipeline) | SAD-063 / SAD-037 | apps/chanora_flutter/android/app/build.gradle.kts | SWE5-IV-020, SWE6-SV-023, SYS4-SIV-018, TC-13 | -| SDD-110 (AndroidPttCapability — Focused only on Android) | SAD-086 (Android-specific PTT allocation) / SAD-075 (Focused) | (capability badge wiring; pending Kotlin/Dart) | SWE4-UV-046, SWE6-SV-024, TC-4, TC-10 | -| SDD-111 (reserved — AndroidVoiceLatencyBudget for SRS-210) | SAD-081 | PENDING_SDD | PENDING | -| SDD-112 (reserved — AAudioInputPreset for SRS-211) | SAD-081 | PENDING_SDD | PENDING | -| SDD-113 (reserved — AndroidHardwareEffects for SRS-212; AndroidManifest.xml already carries SDD-113 trace) | SAD-081 | AndroidManifest.xml (trace-only; spec PENDING) | PENDING | -| SDD-114 (reserved — AAudioOutputUsage for SRS-213) | SAD-081 | PENDING_SDD | PENDING | -| SDD-115 (reserved — AAudioSharingMode for SRS-214) | SAD-081 | PENDING_SDD | PENDING | -| SDD-116 (reserved — ForegroundServiceTypeManifest for SRS-215) | SAD-086 | AndroidManifest.xml (trace-only; spec PENDING) | PENDING | - -### F. Code → SDD / SRS back-fill trace summary (this session) - -| Code path | SDD trace | SRS trace (via test header where applicable) | -|---|---|---| -| apps/chanora_flutter/test/widget_test.dart | — | SRS header comments added (verification stub) | -| apps/chanora_flutter/test/alpha_e2e_test.dart | — | SRS header comments added | -| apps/chanora_flutter/test/beta_e2e_test.dart | — | SRS header comments added | -| apps/chanora_flutter/android/app/src/main/AndroidManifest.xml | SDD-107, SDD-108, SDD-113 (reserved) | indirectly SRS-111, SRS-208, SRS-212 | -| apps/chanora_flutter/android/app/build.gradle.kts | SDD-073, SDD-109 | SRS-187, SRS-188, SRS-119 | -| .../kotlin/.../ChanoraApplication.kt | SDD-105 | SRS via SAD-063 → SRS-187 | -| .../kotlin/.../MainActivity.kt | SDD-105, SDD-028, SDD-106 | SRS-163, SRS-209 | -| .../kotlin/.../AndroidVoiceForegroundService.kt | SDD-107 | SRS-111 | -| .../kotlin/.../AndroidPermissionRequester.kt | SDD-106 | SRS-209 | -| .../kotlin/.../BackIntentBridge.kt | SDD-028 | SRS-163 | -| lib/services/back_intent_policy.dart | SDD-028 | SRS-163 | -| lib/services/back_intent_service.dart | SDD-028 | SRS-163 | - -### G. Verification document anchors added this session - -```text -SWE4-UV-040..046 -> SDD-028 (exp), SDD-073 (ref), SDD-105, SDD-106, SDD-107, SDD-108, SDD-110 -SWE5-IV-016..020 -> SAD-018, SAD-063, SAD-077, SAD-081, SAD-084, SAD-085, SAD-086 - + SDD-028 (exp), SDD-073 (ref), SDD-105..110 -SWE6-SV-018..024 -> SRS-111, SRS-119, SRS-163, SRS-187, SRS-188, SRS-208, SRS-209 -SYS4-SIV-015 (strengthened), SYS4-SIV-017, SYS4-SIV-018 - -> SysDes-135 (Android subset of SysDes-133..148) -docs/verification/android-p0-acceptance.md TC-1..TC-13 - -> cross-links SRS-111, SRS-119, SRS-163, SRS-187, SRS-188, SRS-208, SRS-209, - SRS-201; SDD-028, SDD-106..110; DEC-004, DEC-006, DEC-027 -``` - -### H. Orphans, Conflicts, and Dangling References - -#### H.1 Orphans (items whose upward trace is incomplete pending an owner action) - -| Orphan ID | Issue | Proposed owner | -|---|---|---| -| SRS-210..215 (`Source SysDes` = SysDes-135 generic) | SysDes lacks dedicated derivation items for the Android voice audio backend; SRS-210..215 currently reuse the generic Android platform baseline. Per SRS-187 §18 self-flag, a SysDes follow-up is required. | system-designer (add SysDes derivation items downstream of SysRS-055 / SysRS-305 covering the Android voice audio backend) | -| SRS-208 / SRS-209 (`Source SysDes` = SysDes-135 generic) | Same shape: SysDes-135 reused for SysRS-305/306 pending dedicated SysDes items. | system-designer | -| SDD-111..SDD-116 | Not yet authored at read time; SRS-210..215 lack a direct SDD anchor. Reserved as PENDING_SDD in §C / §E. | detailed-designer (in flight per the task brief) | - -#### H.2 Conflicts - -| Conflict | Detail | Proposed resolution path | -|---|---|---| -| SRS-111 dual allocation: SAD-036 (cross-cutting diagnostics/foreground-service range) AND SAD-086 (Android-specific FGS) | SAD §coverage row explicitly states "SAD-036 retains the cross-cutting diagnostics allocation for the SRS-111–124 range" while SAD-086 is the Android-specific allocation. The coverage rows at lines 64–71 of this matrix still show SRS-111..124 → SAD-036, SAD-050. This is **acceptable as a cross-cutting + platform-specific split** (SAD-036 retains the cross-platform allocation; SAD-086 is the Android specialisation), and not a true conflict, but it should be made explicit in §4 baseline-coverage rows. **Alternative**: a SysRS split that separates the cross-platform foreground-service obligation from the Android-specific one — recommended only if future audits flag the dual allocation as ambiguous. | software-architect to record the cross-cutting + platform-specific split as the intended pattern in SAD §coverage; OR system-requirements to split SysRS upstream if a single SAD allocation is preferred by ASPICE auditors. **Do not resolve here** by editing upstream docs. | -| SDD-110 source SAD ambiguity | SDD-110 (`AndroidPttCapability`) sources from "SAD-086 Android-specific PTT allocation / SAD-075 Focused PTT". SAD-086 is defined as `AndroidVoiceForegroundService`, not as the PTT allocation. The Android-specific PTT obligation traces through SysRS-298 (capability exposure) → SRS-196 / SAD-076 (capability badge) and SysRS-297 → SRS-195 / SAD-071 (Global PTT capability-dependent). SDD-110's anchor should be SAD-076 + SAD-071, not SAD-086. | software-architect / detailed-designer to correct the `Source SAD` field on SDD-110. Flag-only here. | - -#### H.3 Dangling references - -| Source row | Target ID | Status | -|---|---|---| -| SRS-210..215 → "SDD-111..SDD-116" (reserved) | SDD-111..SDD-116 | Not yet present in `docs/architecture/sdd.md` (file ends at SDD-110). Tracked as PENDING_SDD per §C and §E. **Not a defect** — the in-flight detailed-designer task owns these. | -| android-p0-acceptance.md TC-13 → "SRS-119" + "SRS-188" + "SDD-109" | all present | OK | -| SAD-086 narrative anchor for SDD-110 (PTT) | SAD-086 exists but its scope is FGS, not PTT | Dangling-by-scope (see §H.2). | - -### I. Items intentionally left as PENDING_* - -| ID | Reason | -|---|---| -| SDD-111 | Reserved for SRS-210 Android voice latency budget. PENDING_SDD. | -| SDD-112 | Reserved for SRS-211 AAudio input preset. PENDING_SDD. | -| SDD-113 | Reserved for SRS-212 hardware AEC/NS/AGC engagement (AndroidManifest.xml already carries the trace comment in anticipation). PENDING_SDD. | -| SDD-114 | Reserved for SRS-213 AAudio output usage/content-type. PENDING_SDD. | -| SDD-115 | Reserved for SRS-214 AAudio sharing-mode best-effort. PENDING_SDD. | -| SDD-116 | Reserved for SRS-215 foreground-service-type manifest binding (AndroidManifest.xml already carries the trace comment in anticipation). PENDING_SDD. | -| SWE.4 / SWE.5 / SWE.6 anchors for SRS-210..215 | PENDING — to be added by verification-planner once SDD-111..116 land. | - -### J. Decision - -**TRACEABILITY_GAPS_REMAIN.** The chain SysRS-288 / 305 / 306 → SRS-187 / -208 / 209 → SAD-063 / 084 / 085 / 086 → SDD-073 / 106 / 107 / 108 → Code -→ SWE.4 / SWE.5 / SWE.6 / SYS.4 / android-p0-acceptance is **closed end -to end**. The gaps that remain are: - -1. **SDD-111..SDD-116 not yet authored** — blocks the downward chain from - SRS-210..215 to Code and Verification. Owner: detailed-designer (in - flight per task brief). -2. **SysDes lacks dedicated derivation items for the Android voice audio - backend and for SysRS-305 / SysRS-306** — SRS-208..215 currently reuse - SysDes-135 as a generic anchor. Owner: system-designer. -3. **SDD-110 `Source SAD` field cites SAD-086** (which is the FGS - allocation) instead of the SAD-071 / SAD-076 PTT capability allocations. - Owner: detailed-designer (one-line correction in SDD). - -No code-without-SDD-or-upstream-trace condition was found: every code -anchor added this session carries an SDD or SRS reference comment, and -every SDD reference resolves to an existing SDD item (SDD-028, SDD-073, -SDD-105..110). **BLOCKED_REQUIREMENT_GAP is not raised.** - -### K. Recommended next agents - -1. **detailed-designer** — author SDD-111..SDD-116 covering SRS-210..215; - correct the `Source SAD` field on SDD-110 to cite SAD-071 / SAD-076. -2. **system-designer** — introduce dedicated SysDes derivation items for - SysRS-305 / SysRS-306 and for the Android voice audio backend so that - SRS-208..215 can tighten their `Source SysDes` away from the generic - SysDes-135. -3. **verification-planner** — once SDD-111..116 land, extend SWE.4 / SWE.5 - / SWE.6 to cover SRS-210..215 and add the corresponding android-p0 - acceptance test rows. -4. **software-architect** — formalise the SAD-036 + SAD-086 cross-cutting - + platform-specific allocation pattern explicitly in SAD §coverage so - it is not re-flagged as a dual-allocation conflict by future audits. - -| Version | Date | Description | -|---|---|---| -| 0.9.6 | 2026-05-18 | Added Android P0 reconciliation addendum incorporating SysRS-288 (API 28 per DEC-004), SysRS-305 (in-call audio mode), SysRS-306 (RECORD_AUDIO timing); SRS-187 (refreshed), SRS-208, SRS-209, SRS-210..215; SAD-063 (refreshed), SAD-084, SAD-085, SAD-086; SDD-028 (expanded), SDD-073 (refreshed), SDD-105..SDD-110, with SDD-111..SDD-116 reserved as PENDING_SDD; SWE4-UV-040..046, SWE5-IV-016..020, SWE6-SV-018..024, SYS4-SIV-015 (strengthened) + SYS4-SIV-017..018, and android-p0-acceptance.md TC-1..TC-13. Code back-fill traces recorded for AndroidManifest.xml, build.gradle.kts, ChanoraApplication.kt, MainActivity.kt, AndroidVoiceForegroundService.kt, AndroidPermissionRequester.kt, BackIntentBridge.kt, back_intent_policy.dart, back_intent_service.dart, and the three Flutter test files. Three gaps flagged: SDD-111..116 in flight, SysDes dedicated derivation items pending for SysRS-305/306 + Android voice audio backend, SDD-110 `Source SAD` field cites wrong SAD ID. TRACEABILITY_GAPS_REMAIN (no BLOCKED_REQUIREMENT_GAP). | - - -## Android Voice Audio Backend SDD Closure Addendum (Baseline Candidate 0.9.7) - -This addendum closes the `PENDING_SDD` markers recorded in §C / §E / §I of -the 0.9.6 addendum, after `docs/architecture/sdd.md` was extended with -SDD-111..SDD-116 (Android voice audio backend detailed design, sourced -from SAD-077 / SAD-081 / SAD-084 / SAD-085 / SAD-086 per the SDD v0.9.9 -revision). Per the strict hierarchy rules in §1, SRS-210..SRS-215 continue -to source from SysDes only; SDD-111..SDD-116 continue to source from SAD -only. No forbidden direct links are introduced. - -### A. SRS-210..SRS-215 → SDD-111..SDD-116 closure mapping - -The following table supersedes the corresponding rows in §C of the 0.9.6 -addendum. `Source SysDes` remains SysDes-135 pending the system-designer -follow-up recorded in §B below; the SDD anchors are now concrete. - -| SRS | Source SysDes | SAD | SDD (closed) | SWE.4 / SWE.5 / SWE.6 | Acceptance | -|---|---|---|---|---|---| -| SRS-210 (Android mouth-to-ear latency ≤150 ms low-latency / ≤250 ms fallback) | SysDes-135 | SAD-081 (audio engine) + SAD-084 (mode controller dependency) | SDD-111 (AndroidVoiceAudioBackend) + SDD-112 (AndroidVoiceStreamConfig — performance mode) + SDD-116 (AndroidVoiceVerificationMatrix — latency observation contract) | PENDING (verification-planner) | TC-6 supporting; device-lab latency measurement per SDD-116 | -| SRS-211 (AAudio input preset VOICE_COMMUNICATION + fallback) | SysDes-135 | SAD-081 | SDD-112 (AndroidVoiceStreamConfig — input preset retry ladder) | PENDING (verification-planner) | TC-6 indirect | -| SRS-212 (Hardware AEC/NS/AGC engagement + software fallback) | SysDes-135 | SAD-081 | SDD-113 (AndroidHardwareAudioEffects — session-id-bound engagement + per-effect software fallback) | PENDING (verification-planner) | TC-6 indirect; AndroidManifest.xml carries SDD-113 trace comment | -| SRS-213 (AAUDIO_USAGE_VOICE_COMMUNICATION / CONTENT_TYPE_SPEECH on output) | SysDes-135 | SAD-081 | SDD-112 (AndroidVoiceStreamConfig — output usage + content type) | PENDING (verification-planner) | TC-6 supporting | -| SRS-214 (AAUDIO sharing-mode EXCLUSIVE best-effort + SHARED fallback) | SysDes-135 | SAD-081 | SDD-112 (AndroidVoiceStreamConfig — sharing-mode fallback) | PENDING (verification-planner) | — | -| SRS-215 (Foreground service hosting for background mic capture) | SysDes-135 | SAD-086 (AndroidVoiceForegroundService) | SDD-107 (AndroidVoiceForegroundService) + SDD-114 (AndroidVoiceManifestRequirements — `foregroundServiceType="microphone"` manifest binding) + SDD-115 (AndroidVoiceLifecycleSequencing — service-start-before-stream-open ordering) | SWE4-UV-044, SWE5-IV-016/017/018, SWE6-SV-018 | TC-3, TC-3.4 | - -### B. Code-anchor refresh for SDD-114 and SDD-115 - -The 0.9.6 §F table is extended with the following anchors that newly -resolve to concrete SDD items (replacing the PENDING_SDD reservations for -SRS-212 / SRS-215 manifest binding): - -| Code path | SDD trace | SRS trace (indirect) | Status | -|---|---|---|---| -| apps/chanora_flutter/android/app/src/main/AndroidManifest.xml | SDD-105 (application element), SDD-107, SDD-108, SDD-113, SDD-114 (back-fill: all voice-subsystem manifest declarations), SDD-116 (device-matrix observation contract — trace-only, no manifest delta) | SRS-111, SRS-208, SRS-212, SRS-215 | Confirmed: SDD-105 application-element trace and SDD-107/108/113 traces present after Wave 2B-1 + fast-builder fix | -| apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt | SDD-105 (bootstrap), SDD-028 (back-intent), SDD-106 (permission requester, with M-4 fix) | SRS-163, SRS-209 | Confirmed after fast-builder M-4 fix | -| crates/chanora_audio/src/engine.rs | SDD-115 (AndroidVoiceLifecycleSequencing — forward/reverse order; supersedes the prior no-op rationale comment at engine.rs:316-323 per SDD-113 item 5) | SRS-210..215 (via SDD-115) | PENDING_CODE — lifecycle sequencing implementation not yet landed; SDD-115 anchor recorded here so future code edit carries the trace | - -### C. Remaining open issues (carried forward from prior auditor pass) - -The closure of SDD-111..SDD-116 does not resolve three orthogonal issues -that remain owned by other agents. They are recorded here unchanged from -the 0.9.6 §H / §J reading, with proposed owners restated for clarity. - -| # | Open issue | Proposed owner | Resolution scope | -|---|---|---|---| -| 1 | **SDD-110 `Source SAD` field cites SAD-086 (FGS), should cite SAD-071 (Global PTT capability-dependent) and/or SAD-076 (capability badge).** SDD-110 anchors the Android PTT capability; SAD-086 is the FGS allocation, not the PTT allocation. The matrix continues to record SDD-110's current `Source SAD` field as authored (SAD-086 / SAD-075). This is an SDD-content fix, NOT a matrix fix. | detailed-designer | One-line correction to SDD-110's `Source SAD` field in `docs/architecture/sdd.md`. Do not edit upstream from the matrix. | -| 2 | **SysDes-135 generic reuse for SysRS-305, SysRS-306, and SRS-208..SRS-215.** SysDes-135 is the Android platform baseline; using it as the direct upstream for the in-call mode, RECORD_AUDIO timing, and voice-audio-backend SRS items is overloaded. SRS hierarchy discipline is preserved (SRS continues to source from SysDes only), but the SysDes anchor will be tightened in the next SysDes revision by introducing dedicated derivation items downstream of SysRS-055 / SysRS-305 / SysRS-306. | system-architect (system-designer) | Add dedicated SysDes items; then SRS-208..215 `Source SysDes` fields can be re-pointed in a follow-up SRS revision. | -| 3 | **SRS-111 dual allocation: SAD-036 (cross-cutting diagnostics/foreground-service range) AND SAD-086 (Android-specific FGS).** Acknowledged as the intended cross-cutting + platform-specific allocation pattern, not a true conflict. The pattern should be formalised explicitly in SAD §coverage so future audits do not re-flag it. | software-architect | Add an explicit "cross-cutting + platform-specific allocation" note to SAD §coverage. Do not resolve here. | - -### D. Decision - -**TRACEABILITY_GAPS_REMAIN.** The PENDING_SDD blockage that prevented -SRS-210..SRS-215 from reaching the SDD layer is now closed: every SRS in -that range has at least one concrete SDD anchor (SDD-111..SDD-116, plus -the previously-landed SDD-107 for SRS-215). The end-to-end chain -SysRS → SysDes → SRS → SAD → SDD now closes for SRS-210..SRS-215. - -Remaining gaps are non-blocking with respect to BLOCKED_REQUIREMENT_GAP: - -1. **SWE.4 / SWE.5 / SWE.6 verification anchors for SRS-210..SRS-215** — - PENDING for verification-planner now that SDD-111..SDD-116 are - authored. Acceptance test coverage in `android-p0-acceptance.md` - TC-1..TC-13 already cross-links SRS-210..215 indirectly via TC-6 and - TC-3 / TC-3.4; dedicated SWE.4 / SWE.5 / SWE.6 rows are still owed. -2. **`crates/chanora_audio/src/engine.rs` lifecycle sequencing - implementation per SDD-115** — PENDING_CODE; SDD-115 anchor recorded - in §B above so the future code edit is pre-traced and the prior - no-op rationale comment at engine.rs:316-323 is superseded per - SDD-113 item 5. -3. **Open issues 1–3 from §C above** (SDD-110 `Source SAD` correction, - SysDes-135 generic reuse tightening, SRS-111 dual-allocation pattern - formalisation) — each carries a named proposed owner. None are - matrix-layer fixes. - -**BLOCKED_REQUIREMENT_GAP is not raised.** No code anchor exists without -either an SDD reference or an upstream-traceable SRS comment. The -`engine.rs` SDD-115 PENDING_CODE row in §B is a forward-looking trace -reservation for a code change that has not been made; it is not a -code-without-SDD condition. - -### E. Recommended next agents - -1. **verification-planner** — extend SWE.4 / SWE.5 / SWE.6 to cover - SRS-210..SRS-215 against SDD-111..SDD-116, and add corresponding - android-p0-acceptance test rows (particularly latency measurement - per SDD-116, hardware-effect attach evidence per SDD-113, and - lifecycle ordering per SDD-115). -2. **detailed-designer** — correct the `Source SAD` field on SDD-110 - in `docs/architecture/sdd.md` from SAD-086 to SAD-071 / SAD-076 (one- - line change; see open issue 1 in §C). -3. **system-architect** — introduce dedicated SysDes derivation items - downstream of SysRS-055 / SysRS-305 / SysRS-306 covering the Android - voice audio backend, in-call mode engagement, and RECORD_AUDIO - timing, so that SRS-208..SRS-215 can tighten their `Source SysDes` - fields away from the generic SysDes-135 (see open issue 2 in §C). -4. **software-architect** — formalise the SAD-036 + SAD-086 cross- - cutting + platform-specific allocation pattern explicitly in SAD - §coverage (see open issue 3 in §C). -5. **codex-builder** — implement the SDD-115 lifecycle sequencing in - `crates/chanora_audio/src/engine.rs`, superseding the prior no-op - rationale comment at engine.rs:316-323 per SDD-113 item 5 (see §B - PENDING_CODE row). - -| Version | Date | Description | -|---|---|---| -| 0.9.7 | 2026-05-18 | Closed PENDING_SDD markers for SRS-210..SRS-215 after SDD-111..SDD-116 landed in `docs/architecture/sdd.md` (Android voice audio backend detailed design, SDD v0.9.9). Concrete SRS → SDD mapping recorded in §A: SRS-210 → SDD-111+112+116; SRS-211 → SDD-112; SRS-212 → SDD-113; SRS-213 → SDD-112; SRS-214 → SDD-112; SRS-215 → SDD-107+114+115. Code-anchor refresh in §B added SDD-114 trace to AndroidManifest.xml (back-fill of Wave 2B-1 manifest declarations), confirmed SDD-105 application-element trace and SDD-106 M-4 fix on MainActivity.kt after fast-builder pass, and recorded SDD-115 as PENDING_CODE on `crates/chanora_audio/src/engine.rs` (lifecycle sequencing implementation not yet landed; SDD-113 item 5 supersedes the prior no-op rationale comment). Three open issues carried forward unchanged: SDD-110 `Source SAD` field cites SAD-086 instead of SAD-071 / SAD-076 (owner: detailed-designer); SysDes-135 generic reuse for SysRS-305/306 + SRS-208..215 (owner: system-architect); SRS-111 dual allocation SAD-036 + SAD-086 (owner: software-architect). TRACEABILITY_GAPS_REMAIN; BLOCKED_REQUIREMENT_GAP not raised. | - - -## End-to-End Closure Addendum (Baseline Candidate 0.9.8) - -This addendum incorporates the deltas accumulated since the 0.9.7 addendum -across SysDes, SRS, SAD, SDD, and Code. It records the resolution of the -three open issues carried forward by the 0.9.7 audit and re-runs the -end-to-end traceability check for the six chains exercised by the most -recent sub-wave. Strict hierarchy discipline is preserved at every layer -(`SysDes -> SysRS`, `SRS -> SysDes`, `SAD -> SRS`, `SDD -> SAD`, -verification downstream of all four). - -### A. Delta inventory (since 0.9.7) - -#### A.1 SysDes (`docs/architecture/sysdes.md`, baseline 0.9.6 → 0.9.7) - -| New SysDes | Subsystem | Source SysRS | Replaces (generic anchor) | -|---|---|---|---| -| SysDes-152 | Android in-call audio mode subsystem | SysRS-305 | SysDes-135 (generic Android baseline) | -| SysDes-153 | Android RECORD_AUDIO runtime permission acquisition flow | SysRS-306 | SysDes-135 (generic) | -| SysDes-154 | Android voice audio backend subsystem | SysRS-055 (+ SysRS-305 refinement) | SysDes-135 (generic) | -| SysDes-155 | macOS runtime baseline (parallel to SysDes-133 iOS / SysDes-135 Android) | SysRS-002, SysRS-050, SysRS-193 | none (new platform-baseline element) | - -SysDes §17 SysRS-coverage statement extended to record the -SysRS-305/306 → SysDes-152..154 mapping and the SysRS-002/050/193 macOS-slice -→ SysDes-155 mapping; SysDes-135 retained unchanged as the platform-baseline -context item. - -#### A.2 SRS (`docs/requirements/srs.md`, baseline 0.9.7 → 0.9.8) - -`Source SysDes` retargeted on the eight Android voice-audio SRS items: - -| SRS | Primary `Source SysDes` (new) | Secondary `Source SysDes` | -|---|---|---| -| SRS-208 | SysDes-152 | SysDes-135 (context) | -| SRS-209 | SysDes-153 | SysDes-135 (context) | -| SRS-210 | SysDes-154 | SysDes-135 (context) | -| SRS-211 | SysDes-154 | SysDes-135 (context) | -| SRS-212 | SysDes-154 | SysDes-135 (context) | -| SRS-213 | SysDes-154 | SysDes-152 (in-call-mode routing precondition), SysDes-135 (context) | -| SRS-214 | SysDes-154 | SysDes-135 (context) | -| SRS-215 | SysDes-154 | SysDes-135 (context) | - -No SRS text/behavioural content was modified. - -#### A.3 SAD (`docs/architecture/sad.md`, baseline 0.9.6 → 0.9.7 → 0.9.8) - -- §24.1 "Cross-cutting + platform-specific allocations" subsection added - with the SRS-111 ↔ SAD-036 + SAD-086 worked example. §24.2 SRS-111..124 - matrix row annotated to record the dual allocation explicitly. -- SAD-087 (macOS runtime baseline; deployment-target isolation in - `apps/chanora_flutter/macos/chanora_bridge.podspec`, universal-binary - `arm64+x86_64` `lipo` packaging, `.framework` `Versions/A` layout, - hand-rolled CocoaPods podspec automation) added as the macOS counterpart - to SAD-061 (iOS) and SAD-063 (Android). `Source SRS = SRS-013` - (multi-platform support). -- SAD-087's initial `Source SysDes = open follow-up` retargeted in the - same session to `SysDes-155`. -- §27 SRS-to-SAD coverage matrix updated to add the SRS-013 → SAD-087 row. - -#### A.4 SDD (`docs/architecture/sdd.md`, baseline 0.9.10 → 0.9.11 → 0.9.12) - -- SDD-110 (`AndroidPttCapability`) `Source SAD` corrected from the - incorrect `SAD-077` (PttSanitizer) and the previously-flagged `SAD-086` - (FGS) to `SAD-071` (PTT-backend trait isolation + capability publish) + - `SAD-076` (`BridgeEvent::PttCapability` event surface). §11 coverage - matrix moved SDD-110 from the SAD-063/081/084/085/086 row to a new - SAD-071 / SAD-076 row. **Resolves 0.9.7 open issue 1.** -- SDD-119 (`iOSAndMacOSBridgeBuildAutomation`) `Source SAD` extended from - `SAD-061, SAD-062` to `SAD-061, SAD-062, SAD-087` with explicit - iOS-vs-macOS attribution. §11 coverage matrix row updated. - -#### A.5 Code (since prior auditor pass) - -| Code path | Trace tags | Notes | -|---|---|---| -| `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/AndroidPermissionRequester.kt` | SDD-106 §1..§8, SRS-209 | M-1 fix: SharedPreferences-backed `has-ever-requested` flag (SDD-106 §3, §4). | -| `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/BackIntentBridge.kt` | SDD-028 (§1, §4) | M-2 popToSystem idempotency, M-3 object→class refactor, X-2 channel constants pulled from `MethodChannels`. | -| `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt` | SDD-028, SDD-105, SDD-106 | Owns the `BackIntentBridge` instance and `AndroidPermissionRequester` lifecycle wiring. | -| `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MethodChannels.kt` | SDD-028, SAD-018 | New constants `BACK_INTENT`, `METHOD_BACK_INTENT`, `METHOD_POP_TO_SYSTEM` (X-2 fix). | -| `apps/chanora_flutter/android/app/build.gradle.kts` | SDD-118 items 1–13, SDD-073, SDD-105, SDD-109 | Gradle automation for chanora_bridge cdylib (cargo-ndk, three ABIs, jniLibs staging, preflight, release-inspection assertion). | -| `crates/chanora_audio/src/android_voice_unit.rs` (new) | SDD-111..SDD-115 | AndroidVoiceUnit. | -| `crates/chanora_audio/src/mobile_voice_backend.rs` (new) | SDD-111, SDD-112 | `MobileVoiceAudioBackend` trait + `AndroidVoiceStreamConfig`. | -| `crates/chanora_audio/src/engine.rs` | SDD-111, SDD-113, SDD-115; `android_engage_voice_communication` path for SDD-108 | Android backend integration; forward/reverse lifecycle sequencing closed. | -| `crates/chanora_audio/Cargo.toml` | SDD-111 | `oboe = "0.6"` dependency added. | - -The 0.9.7 `engine.rs` SDD-115 PENDING_CODE row is **closed** by the -forward/reverse lifecycle sequencing that now lives in `engine.rs` -(start path at lines ~307–388, teardown path at lines ~748–772, helper -`android_engage_voice_communication` at line 1494). - -### B. End-to-end chain verification - -Each chain below is rebuilt top-to-bottom from the present state of the -repository. Evidence citations refer to file paths and (where useful) -the line locations of trace tags. "CLOSED" means every layer between -SysRS and Verification/Code has a concrete, in-document anchor. - -| # | Chain | Status | Evidence | -|---|---|---|---| -| 1 | SysRS-305 → SysDes-152 → SRS-208 → SAD-084 → SDD-108 → `engine.rs::android_engage_voice_communication` → SWE4-UV-045 / SWE5-IV-018 / SWE6-SV-020 / TC-6 | **CLOSED** | SysDes-152 narrative in `sysdes.md`; SRS-208 `Source SysDes: SysDes-152` at `srs.md:2633`; SAD-084 in `sad.md`; SDD-108 + §11 row in `sdd.md` (v0.9.8 entry); `engine.rs:1494` `android_engage_voice_communication`; 0.9.6 addendum §B records the verification anchors. | -| 2 | SysRS-306 → SysDes-153 → SRS-209 → SAD-085 → SDD-106 → `AndroidPermissionRequester.kt` → SWE4-UV-041 / SWE5-IV-017 / SWE6-SV-019 / TC-2 | **CLOSED** | SysDes-153 in `sysdes.md`; SRS-209 `Source SysDes: SysDes-153` at `srs.md:2645`; SAD-085 in `sad.md`; SDD-106 in `sdd.md` (v0.9.8); `AndroidPermissionRequester.kt` lines 18, 65, 83, 102, 142, 158, 175, 193, 217, 258, 267 (SDD-106 trace tags incl. M-1 SharedPreferences fix); 0.9.6 addendum §B records verification anchors. | -| 3 | SysRS-055 + SysRS-305 → SysDes-154 → SRS-210..215 → SAD-081 (+SAD-077 for SRS-212 narrative / SAD-086 for SRS-215 FGS aspect) → SDD-111..SDD-116 → `crates/chanora_audio/src/android_voice_unit.rs` (+ `mobile_voice_backend.rs`, `engine.rs`) → SWE4-UV-047..052 / SWE5-IV-021..026 / SWE6-SV-025..030 / TC-14..18 | **CLOSED (engineering layers)** **/ PENDING (verification rows)** | SysDes-154 in `sysdes.md`; SRS-210..215 `Source SysDes: SysDes-154 (primary)` at `srs.md:2670, 2682, 2694, 2706 (+SysDes-152 sec.), 2718, 2730`; SDD-111..116 authored in `sdd.md` per the 0.9.7 addendum §A; code anchors `android_voice_unit.rs`, `mobile_voice_backend.rs`, `engine.rs` (SDD-111/113/115 traces lines 147, 307, 339, 367, 383, 748, 766), `Cargo.toml` line 69 (`oboe = "0.6"`). Verification SWE.4/5/6 rows for SRS-210..215 remain PENDING_VERIFICATION (carried from 0.9.7 §D item 1; owner: verification-planner). | -| 4 | SysRS-002 + SysRS-050 + SysRS-193 → SysDes-155 → SRS-013 (macOS slice) → SAD-087 → SDD-119 → `apps/chanora_flutter/macos/chanora_bridge.podspec` | **CLOSED (engineering layers)** | SysDes-155 narrative in `sysdes.md:2930` (citing the podspec by path, value not embedded); SAD-087 in `sad.md:1427`, `Source SysDes: SysDes-155` per `sad.md:1499` (v0.9.8 history entry); SDD-119 `Source SAD: SAD-061 + SAD-062 + SAD-087` per `sdd.md:1773` (v0.9.12 history entry) and §11 coverage row; podspec exists at the cited path. Note: SDD-119 is an explicit back-fill unit (per its own narrative); the podspecs do not carry an SDD-119 trace tag in-source — acceptable for a back-fill anchor and not a defect. | -| 5 | SDD-118 (Android auto-build) → `apps/chanora_flutter/android/app/build.gradle.kts`. Upstream chain SDD-118 → SAD-063, cross-traces to SDD-073, SDD-105, SDD-109. | **CLOSED** | `build.gradle.kts` lines 154, 165, 171, 176, 183, 190, 200, 207, 212, 217, 226, 238, 252, 259, 263, 270, 273, 276, 277, 291, 297, 304, 324, 332, 344, 356, 365, 373, 380, 393 all carry SDD-118 trace tags (items 1–13). SDD-118 narrative in `sdd.md` v0.9.10 entry sources from SAD-063 with cross-trace to SDD-073 / SDD-105 / SDD-109. | -| 6 | SDD-119 (iOS/macOS auto-build) → `apps/chanora_flutter/ios/chanora_bridge.podspec` + `apps/chanora_flutter/macos/chanora_bridge.podspec`. Upstream chain SDD-119 → SAD-061 + SAD-062 + SAD-087. | **CLOSED** | SDD-119 narrative in `sdd.md` v0.9.10 + v0.9.12 entries; both podspec files exist at the cited paths. Back-fill anchor; in-source trace tags not required (and not present), per the SDD-119 narrative. | -| 7 | SDD-110 (AndroidPttCapability) → SAD-071 + SAD-076 anchors | **CLOSED** | `sdd.md` v0.9.11 history entry records the SAD-077 → SAD-071 + SAD-076 retarget; §11 coverage matrix updated accordingly. **0.9.7 open issue 1 closed.** | - -### C. Resolved open issues (from prior auditor passes) - -| # | Prior issue | Resolution | -|---|---|---| -| 1 | **SDD-110 `Source SAD` mis-anchor** (0.9.6 §H.2, 0.9.7 §C row 1) — cited SAD-086 (FGS) / SAD-077 (PttSanitizer), should cite SAD-071 + SAD-076. | **CLOSED** in `sdd.md` v0.9.11 entry. Section 11 coverage matrix moved SDD-110 to a new SAD-071/SAD-076 row. | -| 2 | **SysDes-135 generic reuse for SysRS-305 / SysRS-306 / Android voice audio backend** (0.9.6 §H.1, 0.9.7 §C row 2). | **CLOSED** by SysDes v0.9.6 (added SysDes-152, SysDes-153, SysDes-154) and SRS v0.9.8 (retargeted SRS-208/209/210..215 `Source SysDes` away from SysDes-135 to SysDes-152/153/154 with SysDes-135 retained only as secondary/context). | -| 3 | **SRS-111 dual allocation (SAD-036 + SAD-086) pattern not formalised** (0.9.6 §H.2, 0.9.7 §C row 3). | **CLOSED** by SAD v0.9.7 (added §24.1 "Cross-cutting + platform-specific allocations" subsection with SRS-111 / SAD-036 / SAD-086 as the worked example; §24.2 SRS-111..124 matrix row annotated to record the dual allocation explicitly). | -| 4 | **SDD-115 `engine.rs` lifecycle sequencing PENDING_CODE** (0.9.7 §B / §D item 2). | **CLOSED** by `engine.rs` (forward sequence lines 307–388 invoking `chanora_android_start_voice_service` → `android_engage_voice_communication` → `AndroidVoiceUnit::open` → `start`; reverse sequence lines 748–772). | -| 5 | **SAD-087 `Source SysDes` open follow-up** (created by SAD v0.9.7). | **CLOSED** in same session by SAD v0.9.8 retargeting `Source SysDes` to SysDes-155. | - -### D. Remaining open issues - -| # | Issue | Severity | Proposed owner | -|---|---|---|---| -| 1 | **SWE.4 / SWE.5 / SWE.6 verification rows for SRS-210..SRS-215** are still PENDING — SDD-111..SDD-116 are authored and code anchors exist (`android_voice_unit.rs`, `mobile_voice_backend.rs`, `engine.rs`, `Cargo.toml`), but dedicated unit / integration / qualification verification rows have not yet been added. Acceptance coverage is via TC-6, TC-3, TC-3.4 indirectly. | Medium — engineering chain is closed end-to-end, but verification evidence for SRS-210..215 is currently indirect. Does NOT raise BLOCKED_REQUIREMENT_GAP because code is fully traced to SDD and upstream. | verification-planner | -| 2 | **SDD-119 known iOS podspec doc-drift** — the iOS podspec comment mentions `aarch64-apple-ios-sim` but the script does not build the simulator slice (recorded as a TODO in SDD-119 narrative itself; not a traceability defect). | Low — internal to SDD-119, no upstream/downstream linkage broken. | detailed-designer or codex-builder (per SDD-119's own TODO). | -| 3 | **SDD-119 macOS deployment-target single-source-of-truth** is recorded as an open follow-up improvement in SDD-119; SysDes-155 already cites the podspec as the canonical location, so the SysDes/SAD/SDD chain is aligned, but the SoT improvement work is still TODO. | Low — chain is closed; this is an internal hardening item. | detailed-designer (improvement, not defect). | -| 4 | **Optional finer-grained macOS minimum-runtime SysRS item** parallel to SysRS-286 (iOS) and SysRS-288 (Android) was recommended by SysDes-155 itself; current chain is closed via SysRS-002 / SysRS-050 / SysRS-193 (multi-platform + macOS runtime + signed/notarized macOS build), so absence is non-blocking. | Low — optional refinement. | system-requirements owner (optional). | - -### E. Orphan inventory - -Zero new orphans introduced by this sub-wave. The four 0.9.7-listed -PENDING items (SDD-111..116 reservations) are all closed: - -| ID range | Prior status | Current status | Evidence | -|---|---|---|---| -| SDD-111..SDD-116 | PENDING_SDD (0.9.6) | AUTHORED (0.9.7 §A) | `sdd.md` body + 0.9.7 addendum §A mapping. | -| `engine.rs` SDD-115 anchor | PENDING_CODE (0.9.7 §B) | LANDED | `engine.rs:307–388` + `:748–772` + `:1494`. | -| SAD-087 `Source SysDes` | open follow-up (SAD 0.9.7) | RESOLVED to SysDes-155 (SAD 0.9.8) | `sad.md:1499`. | -| SDD-110 `Source SAD` | flagged conflict (0.9.6, 0.9.7) | CORRECTED to SAD-071 + SAD-076 (SDD 0.9.11) | `sdd.md:1779`. | - -Total orphans / dangling references / conflicts remaining: **0**. - -### F. Dangling references - -None at this revision. The previously dangling `SAD-086 → SDD-110` -scope-mismatch reference is resolved by the SDD-110 retarget. The -previously dangling SDD-111..116 PENDING anchors are all resolved. The -SDD-119 macOS-anchor follow-up is closed by SAD-087 + SysDes-155. - -### G. Conflicts - -None at this revision. The 0.9.6 SRS-111 dual-allocation conflict was -formalised as a deliberate cross-cutting + platform-specific allocation -pattern in SAD §24.1 (v0.9.7), and is no longer a conflict. - -### H. Strict-hierarchy discipline check - -- SRS-208..215 source from SysDes only (SysDes-152/153/154 + SysDes-135 - as context); no direct SysRS source. -- SAD-084..087 source from SRS only; no direct SysDes link. -- SDD-106, SDD-108, SDD-110, SDD-111..116, SDD-118, SDD-119 source - from SAD only; no direct SysRS / SysDes / SRS link. -- Verification artifacts remain downstream evidence and do not - participate in the engineering hierarchy. - -No forbidden direct links were introduced by this sub-wave. - -### I. BLOCKED_REQUIREMENT_GAP check - -No code anchor exists without an SDD trace and an upstream-traceable -reference: - -- `AndroidPermissionRequester.kt`, `BackIntentBridge.kt`, `MainActivity.kt`, - `MethodChannels.kt`: SDD-106 / SDD-028 / SDD-105 traces present in-source, - resolving upward to SAD-085 / SAD-018 / SAD-063 → SRS-209 / SRS-163 / SRS-187. -- `build.gradle.kts`: SDD-118 / SDD-073 / SDD-109 traces present, resolving - upward to SAD-063. -- `crates/chanora_audio/src/android_voice_unit.rs`, `mobile_voice_backend.rs`, - `engine.rs`, `Cargo.toml`: SDD-111..SDD-115 traces present, resolving upward - to SAD-081 (+ SAD-077 / SAD-084 / SAD-086 for cross-cutting aspects) → - SRS-210..215. - -**BLOCKED_REQUIREMENT_GAP is not raised.** - -### J. Decision - -**TRACEABILITY_OK (engineering hierarchy)** — the SysRS → SysDes → SRS → -SAD → SDD → Code chain is closed end-to-end for every item exercised by -this sub-wave (chains 1–7 in §B). The three open issues flagged by the -prior auditor (SDD-110 mis-anchor, SysDes-135 generic reuse, SRS-111 -dual-allocation pattern) and the two PENDING markers carried by 0.9.7 -(`engine.rs` SDD-115 PENDING_CODE, SAD-087 `Source SysDes` follow-up) -are all resolved. - -**TRACEABILITY_GAPS_REMAIN (verification only)** — dedicated SWE.4 / -SWE.5 / SWE.6 rows for SRS-210..SRS-215 are still pending against the -now-authored SDD-111..SDD-116 anchors. Acceptance coverage in -`android-p0-acceptance.md` (TC-6, TC-3, TC-3.4) provides indirect -coverage, so this gap is non-blocking for the engineering chain but -should be closed by the verification owner. - -**Overall decision: TRACEABILITY_OK for the engineering layers -(SysRS → SDD → Code); TRACEABILITY_GAPS_REMAIN for SRS-210..SRS-215 -verification rows only.** No BLOCKED_REQUIREMENT_GAP raised. - -### K. Recommended next agents - -1. **verification-planner** — author SWE.4 / SWE.5 / SWE.6 rows for - SRS-210..SRS-215 against SDD-111..SDD-116 (specifically: latency - observation per SDD-116, hardware-effect attach per SDD-113, - lifecycle ordering per SDD-115, input/output AAudio stream configs - per SDD-112, sharing-mode fallback per SDD-112, FGS manifest binding - per SDD-114). Add corresponding `android-p0-acceptance.md` TC rows - if dedicated tests are warranted beyond the indirect TC-6 / TC-3 / TC-3.4 - coverage already recorded. -2. **detailed-designer or codex-builder** — address the SDD-119 iOS - podspec doc-drift TODO (`aarch64-apple-ios-sim` comment vs. script). - Low priority. -3. **detailed-designer** — pursue the SDD-119 macOS deployment-target - single-source-of-truth improvement (optional, internal hardening). -4. **system-requirements owner** (optional) — author a finer-grained - macOS minimum-runtime SysRS item parallel to SysRS-286 / SysRS-288 if - future audits prefer a dedicated SysRS anchor over the current - SysRS-002 + SysRS-050 + SysRS-193 composite. - -If items 1–4 above are deferred, **no further action is required to -preserve end-to-end engineering-layer traceability** at this revision. - -| Version | Date | Description | -|---|---|---| -| 0.9.8 | 2026-05-18 | End-to-end closure addendum. Incorporated SysDes v0.9.7 deltas (SysDes-152 Android in-call audio mode, SysDes-153 Android RECORD_AUDIO permission flow, SysDes-154 Android voice audio backend, SysDes-155 macOS runtime baseline); SRS v0.9.8 retargeting of SRS-208..215 `Source SysDes` from generic SysDes-135 to SysDes-152/153/154 (with SysDes-135 retained as secondary/context, and SysDes-152 as secondary on SRS-213 for output-usage routing precondition); SAD v0.9.7 + 0.9.8 deltas (§24.1 cross-cutting + platform-specific allocation pattern formalised with SRS-111 / SAD-036 / SAD-086 worked example; SAD-087 macOS runtime baseline added; SAD-087 `Source SysDes` retargeted to SysDes-155 in same session); SDD v0.9.11 + 0.9.12 deltas (SDD-110 `Source SAD` corrected from SAD-077 / SAD-086 to SAD-071 + SAD-076; SDD-119 `Source SAD` extended to include SAD-087 for the macOS half); and Code deltas across AndroidPermissionRequester.kt (M-1 SharedPreferences fix), BackIntentBridge.kt (M-2/M-3/X-2 fixes), MainActivity.kt, MethodChannels.kt (new channel constants), build.gradle.kts (SDD-118 Gradle automation), crates/chanora_audio/src/android_voice_unit.rs (new), mobile_voice_backend.rs (new), engine.rs (SDD-115 lifecycle sequencing landed; `android_engage_voice_communication` path for SDD-108), Cargo.toml (`oboe = "0.6"`). All three open issues flagged by the prior auditor are resolved: (1) SDD-110 mis-anchor → corrected; (2) SysDes-135 generic reuse → tightened to SysDes-152/153/154; (3) SRS-111 dual-allocation pattern → formalised in SAD §24.1. PENDING_CODE for `engine.rs` SDD-115 → landed. SAD-087 `Source SysDes` open follow-up → resolved to SysDes-155. End-to-end engineering chain (SysRS → SysDes → SRS → SAD → SDD → Code) verified CLOSED for chains 1–7 (SysRS-305 → TC-6, SysRS-306 → TC-2, SysRS-055 + SysRS-305 → engine.rs/android_voice_unit.rs, SysRS-002/050/193 → podspec, SDD-118 → build.gradle.kts, SDD-119 → podspec, SDD-110 → SAD-071 + SAD-076). Decision: TRACEABILITY_OK (engineering hierarchy) / TRACEABILITY_GAPS_REMAIN (SWE.4/5/6 rows for SRS-210..215 are PENDING for verification-planner; non-blocking, indirect acceptance coverage via TC-6 / TC-3 / TC-3.4 already present). BLOCKED_REQUIREMENT_GAP is NOT raised: every code anchor carries an SDD trace and resolves upstream. Strict hierarchy preserved at every layer. | - - -## SDD v0.9.13 Absorption + SRS-210..SRS-215 Verification Closure Addendum (Baseline Candidate 0.9.9) - -This addendum absorbs the SDD v0.9.13 documentation-cleanup amendments -into the matrix, closes the PENDING verification-row markers for -SRS-210..SRS-215 against concrete SWE.4/5/6 IDs that now exist in the -verification baselines, adds `crates/chanora_bridge/build.rs` to the -code-anchor table, and cross-references the newly-allocated DEC-032 -(temporary `abiFilters` reduction). Strict layered sourcing is -preserved (`SDD -> SAD` only); no upstream documents were edited. - -### A. SDD v0.9.13 deltas absorbed - -| SDD change | Matrix impact | -|---|---| -| SDD-105 software-unit list extended to include `crates/chanora_bridge/build.rs`, `ChanoraApplication.kt` (loader: `System.loadLibrary`), and `MainActivity.kt` (`initChanoraContext` invocation) | §E SDD-105 row code-anchors and 0.9.6 §F back-fill table extended (see §B and §C below). The prior 0.9.6 / 0.9.7 entries that listed only `ChanoraApplication.kt, MainActivity.kt` for SDD-105 are superseded by §B. | -| SDD-105 new Cross-trace bullet → SDD-118 item 6 (extended) — `libc++_shared.so` runtime co-staging + DT_NEEDED preload contract | Recorded in §B. SDD-105's `Source SAD` is unchanged (still SAD-063). | -| SDD-118 new "Item 6 (extended)" sub-paragraph mandating `libc++_shared.so` co-staging from NDK sysroot into `jniLibs//` with explicit sysroot-triple mapping | Recorded in §B; `build.gradle.kts` continues to carry the SDD-118 trace tags. Release-inspection assertion (SDD-118 item 10) now also covers `libc++_shared.so`. | -| SDD-119 item 4 simulator doc-drift RESOLVED (Option α: drop `aarch64-apple-ios-sim` comment) | §D row 2 of 0.9.8 closed. Removed from the remaining-open-issues list (see §E). | - -No SDD-content was authored by this addendum; the above merely records -the matrix-side absorption of changes already present in SDD v0.9.13. - -### B. Code-anchor table — new and extended rows - -The following rows extend the 0.9.6 §F and 0.9.8 §A.5 code-anchor -tables to absorb SDD v0.9.13: - -| Code path | SDD trace | SRS trace (indirect) | Notes | -|---|---|---|---| -| `crates/chanora_bridge/build.rs` | SDD-105 (software unit; emits `cargo:rustc-link-lib=dylib=c++_shared` so `DT_NEEDED libc++_shared.so` is baked into `libchanora_bridge.so`) — Cross-trace: SDD-118 item 6 (extended) for the runtime co-staging contract | SRS via SAD-063 → SRS-187 | New row introduced by SDD v0.9.13. Anchored to SDD-105. | -| `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/ChanoraApplication.kt` | SDD-105 (loader: `System.loadLibrary` for `libchanora_bridge.so`) | SRS via SAD-063 → SRS-187 | Re-confirmed as the canonical loader site by SDD v0.9.13; supersedes the prior MainActivity-as-loader wording. | -| `apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt` | SDD-105 (`initChanoraContext` invocation only — NOT `System.loadLibrary`), SDD-028, SDD-106 | SRS-163, SRS-209 | Loader responsibility moved to `ChanoraApplication.kt`; MainActivity retains `initChanoraContext` only per SDD v0.9.13 item 1. | -| `apps/chanora_flutter/android/app/build.gradle.kts` | SDD-073, SDD-105 (load-order preload via co-staging), SDD-109, SDD-118 items 1–13 incl. **item 6 (extended)** — `libc++_shared.so` co-staging from NDK sysroot into `jniLibs//`; release-inspection assertion (item 10) extended to cover `libc++_shared.so` | SRS-187, SRS-188, SRS-119 | Trace tags already present in source; SDD-118 item 6 (extended) is absorbed here for the matrix record. Cross-references DEC-032 (§D) for the current temporary `abiFilters` reduction to arm64-v8a only. | - -### C. SRS-210..SRS-215 verification-row closure (replaces PENDING markers) - -The 0.9.6 §C, 0.9.7 §A, and 0.9.8 §D row 1 PENDING markers for the -SWE.4 / SWE.5 / SWE.6 rows of SRS-210..SRS-215 are CLOSED. The -verification documents now enumerate the concrete IDs (existence -verified by grep against `swe4-unit-verification-plan.md`, -`swe5-software-integration-verification-plan.md`, -`swe6-software-verification-plan.md`). - -| SRS | SWE.4 (unit) | SWE.5 (integration) | SWE.6 (qualification) | Replaces | -|---|---|---|---|---| -| SRS-210 (mouth-to-ear latency tier) | SWE4-UV-051 | SWE5-IV-021 | SWE6-SV-025 | 0.9.6 §C PENDING | -| SRS-211 (AAudio input preset + fallback) | SWE4-UV-048 | SWE5-IV-021 | SWE6-SV-026 | 0.9.6 §C PENDING | -| SRS-212 (hardware AEC/NS/AGC + software fallback) | SWE4-UV-050 | SWE5-IV-022 | SWE6-SV-027 | 0.9.6 §C PENDING | -| SRS-213 (AAUDIO_USAGE_VOICE_COMMUNICATION / CONTENT_TYPE_SPEECH output) | SWE4-UV-047, SWE4-UV-052 | SWE5-IV-021 | SWE6-SV-028 | 0.9.6 §C PENDING | -| SRS-214 (sharing-mode EXCLUSIVE best-effort + SHARED fallback) | SWE4-UV-049 | SWE5-IV-021 | SWE6-SV-029 | 0.9.6 §C PENDING | -| SRS-215 (foreground-service-hosted background mic capture) | SWE4-UV-044 | SWE5-IV-018 | SWE6-SV-030 (device-matrix expansion; SWE6-SV-018 remains single-device baseline) | 0.9.6 §C PENDING | - -Existence confirmation: - -- SWE.4 IDs SWE4-UV-044, -047, -048, -049, -050, -051, -052 present in - `docs/verification/swe4-unit-verification-plan.md`. -- SWE.5 IDs SWE5-IV-018, -021, -022 present in - `docs/verification/swe5-software-integration-verification-plan.md`. -- SWE.6 IDs SWE6-SV-025, -026, -027, -028, -029, -030 present in - `docs/verification/swe6-software-verification-plan.md`. - -No `NEEDS_VERIFICATION_ID_AUTHORING` flag is raised: every recommended -ID exists in the corresponding verification baseline. - -### D. DEC-032 governance cross-reference - -DEC-032 (temporary reduction of Android `abiFilters` to `arm64-v8a` -only during the P0 smoke-test cycle) is recorded in -`docs/governance/product-decision-register.md`. It is a temporary -deviation from SDD-073 item 4 and SDD-118 item 3 (which mandate the -three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}`). The deviation is -governance-layer only — neither SDD-073 item 4 nor SDD-118 item 3 is -mutated, and the existing matrix rows that anchor `build.gradle.kts` -to SDD-073 / SDD-118 / SDD-109 are unchanged. - -Cross-reference scope: - -- SDD-073 item 4 (canonical three-ABI set) -- SDD-118 item 3 (Gradle automation enforcing the three-ABI set) -- DEC-032 (active temporary deviation; restore-by gate = P0 release) -- Audit task `ses_1c7645e36ffeY007MaYPep4wqs` (auditor New-D) - -Status: **Active (temporary deviation)** until the audiopus_sys + -cmake-rs + NDK toolchain-file ANDROID_ABI propagation fix lands, all -three ABIs compile cleanly in CI, the `abiFilters` declaration is -restored to the three-ABI set, and the release-inspection assertion -confirms all three `.so` files (plus `libc++_shared.so` per SDD-118 -item 6 extended) are staged in any release AAB. - -### E. Open-issue inventory refresh - -The 0.9.8 §D remaining-open-issues list updates as follows: - -| 0.9.8 # | Issue | Current status | -|---|---|---| -| 1 | SWE.4 / SWE.5 / SWE.6 rows for SRS-210..SRS-215 pending | **CLOSED by §C above.** Concrete IDs replace PENDING markers in every cell. | -| 2 | SDD-119 known iOS podspec doc-drift (`aarch64-apple-ios-sim` comment) | **CLOSED.** SDD v0.9.13 item 5 resolved the doc-drift with Option α (drop the comment); simulator support explicitly deferred to a future P1 SDD revision. | -| 3 | SDD-119 macOS deployment-target single-source-of-truth | **OPEN (carried).** Internal hardening item; owner: detailed-designer. Intentionally not changed by this addendum. | -| 4 | Optional finer-grained macOS minimum-runtime SysRS item parallel to SysRS-286 / SysRS-288 | **OPEN (carried, deferred).** SysRS-290 anchor work explicitly deferred per the task brief; current chain via SysRS-002 / SysRS-050 / SysRS-193 remains adequate. Owner: system-requirements (optional). | - -New open follow-ups recorded by this addendum: - -| # | Issue | Severity | Proposed owner | -|---|---|---|---| -| 5 | **DEC-032 restore-by gate** — `abiFilters` must return to the canonical three-ABI set before P0 release. Tracked in `product-decision-register.md` DEC-032. | High (release-gate) but non-traceability — engineering chain to SDD-073 item 4 / SDD-118 item 3 remains intact. | Build/Toolchain owner. | -| 6 | **`MissedKeyUpWatchdog` production-design follow-up to unblock SWE4-UV-045** — DEC-031 disables the watchdog on P0, and unit verification of the Android `AudioMode` lifecycle (SWE4-UV-045) interacts with the P1 redesign space. Recorded here as a governance cross-reference; not an upstream-document edit. | Low (P1 scope; no P0 blocker). | Audio Owner / detailed-designer (per DEC-031 P1 redesign). | -| 7 | **SDD-106 §5 / §6 Rust-side variant** — the Rust-side counterpart for the permission-state-machine helpers in SDD-106 §5 / §6 has been noted in prior reviews as a follow-up; not an upstream-document edit and not changed by this addendum. | Low. | detailed-designer (future SDD revision). | -| 8 | **No dedicated SAD anchor for the platform-abstracted `MobileVoiceAudioBackend` trait** — SDD-111 self-flags (per `docs/architecture/sdd.md:1713-1715`, §11 coverage matrix) that no dedicated SAD allocation item exists for the platform-abstracted mobile-voice-audio-backend trait itself; SDD-111 is currently sourced from SAD-077 / SAD-081 pending a SAD revision that introduces a dedicated allocation item. Governance cross-reference only; not an upstream edit by this addendum. | Low (engineering chain remains intact via SAD-077 / SAD-081). | software-architect (future SAD revision to add a dedicated allocation item for `MobileVoiceAudioBackend`). | - -### F. Items intentionally NOT changed by this addendum - -| Item | Reason for non-change | -|---|---| -| `docs/architecture/sdd.md` | This is a governance-layer absorption only. SDD already at v0.9.13 — no SDD edits required. | -| `docs/architecture/sad.md`, `docs/requirements/srs.md`, `docs/requirements/sysrs.md`, `docs/architecture/sysdes.md` | The task brief explicitly forbids upstream edits. | -| `docs/verification/**` | The task brief explicitly forbids verification edits; verification baselines already contain the IDs cited in §C. | -| Source code (incl. `apps/chanora_flutter/android/app/build.gradle.kts`) | The task brief explicitly forbids code edits; the temporary `abiFilters` reduction is recorded as DEC-032 (governance-only). | -| Deployment-target single-source-of-truth (SDD-119 item 3) | Carried open; not part of this absorption pass. | -| Optional SysRS-290 anchor work | Explicitly deferred per task brief. | - -### G. Strict-hierarchy discipline check - -- No SRS / SAD / SDD direct sources were added, mutated, or relaxed. -- DEC-032 is a governance cross-reference and does not act as an - engineering-layer direct source (consistent with the treatment of - DEC-029 / DEC-030 / DEC-031 in earlier addenda). -- `crates/chanora_bridge/build.rs` is anchored to SDD-105 with a - cross-trace to SDD-118 item 6 (extended); both anchors live in - `docs/architecture/sdd.md` v0.9.13. - -### H. BLOCKED_REQUIREMENT_GAP check - -No code anchor was added without an SDD trace and an -upstream-traceable reference. `crates/chanora_bridge/build.rs` -resolves SDD-105 → SAD-063 → SRS-187 → SysDes-135 → SysRS-288 / -SysRS-055 (multi-platform). **BLOCKED_REQUIREMENT_GAP is not raised.** - -### I. Final verdict - -**TRACEABILITY_OK.** With the §C verification-row closures and the §B -code-anchor refresh, the SRS-210..SRS-215 chain is now closed end-to-end -at every layer (SysRS → SysDes → SRS → SAD → SDD → Code → Verification). -The remaining carried-open issues (§E rows 3, 4, 5, 6, 7) are -non-blocking governance / hardening follow-ups; none represents a -SysRS → SysDes → SRS → SAD → SDD → Code → Verification gap. - -| Version | Date | Description | -|---|---|---| -| 0.9.9 | 2026-05-18 | Absorbed SDD v0.9.13 documentation-cleanup amendments: SDD-105 software-unit list extended to include `crates/chanora_bridge/build.rs` (DT_NEEDED libc++_shared.so emission) + `ChanoraApplication.kt` (loader) + `MainActivity.kt` (`initChanoraContext` only); SDD-105 Cross-trace bullet to SDD-118 item 6 (extended) recorded; SDD-118 item 6 (extended) `libc++_shared.so` co-staging contract absorbed onto the `build.gradle.kts` code-anchor row; SDD-119 item 4 iOS-simulator doc-drift marked RESOLVED (Option α). Closed the 0.9.6 §C / 0.9.7 §A / 0.9.8 §D row 1 PENDING markers for SRS-210..SRS-215 with concrete SWE.4/5/6 IDs (SRS-210 → SWE4-UV-051 / SWE5-IV-021 / SWE6-SV-025; SRS-211 → SWE4-UV-048 / SWE5-IV-021 / SWE6-SV-026; SRS-212 → SWE4-UV-050 / SWE5-IV-022 / SWE6-SV-027; SRS-213 → SWE4-UV-047 + SWE4-UV-052 / SWE5-IV-021 / SWE6-SV-028; SRS-214 → SWE4-UV-049 / SWE5-IV-021 / SWE6-SV-029; SRS-215 → SWE4-UV-044 / SWE5-IV-018 / SWE6-SV-030 with SWE6-SV-018 as single-device baseline); all six SWE.4 IDs, three SWE.5 IDs, and six SWE.6 IDs confirmed present in the respective verification baselines. Added `crates/chanora_bridge/build.rs` to the code-anchor table anchored to SDD-105 with cross-trace to SDD-118 item 6 (extended). Cross-referenced DEC-032 (temporary `abiFilters` reduction to arm64-v8a only) as an Active temporary deviation from SDD-073 item 4 / SDD-118 item 3; restore-by gate = P0 release. New carried-open follow-ups: DEC-032 restore-by (§E row 5), MissedKeyUpWatchdog production design to unblock SWE4-UV-045 (§E row 6), SDD-106 §5/§6 Rust-side variant (§E row 7). TRACEABILITY_OK; BLOCKED_REQUIREMENT_GAP not raised. | - - -## SDD-120 Benchmark Infrastructure Chain Absorption Addendum (Baseline Candidate 0.9.10) - -This addendum absorbs the full SDD-120 (`RealtimeAudioBenchmarkHarnessAndAdvisoryCI`) end-to-end chain into the matrix. The chain spans: - -```text -SysRS-307..309 - -> SysDes-156..158 - -> SRS-216..219 - -> SAD-088..091 - -> SDD-120 (v0.9.16) - -> Code (commits 3a7750a + 8e95972 + 75b04f0) - -> SWE4-UV-058..062 (verification-engineer authoring in parallel) -``` - -Strict layered sourcing is preserved at every layer (`SysDes -> SysRS`, `SRS -> SysDes`, `SAD -> SRS`, `SDD -> SAD`); verification artifacts remain downstream evidence. - -### A. End-to-end traceability rows — SDD-120 metric-family chain - -One row per SRS-216 / SysDes-156 metric family. SWE4-UV-058..062 were authored in parallel at v0.9.15 of `docs/verification/swe4-unit-verification-plan.md` (verification-engineer dispatch landed concurrent with this matrix update); §A markers reconciled to `PENDING_BASELINE` accordingly. What remains pending is the baseline measurement (first `workflow_dispatch` run on `bench-baseline-update.yml`), not the IDs themselves. - -| Metric family | SysRS | SysDes | SRS | SAD | SDD-120 § | Code anchor | SWE.4 | -|---|---|---|---|---|---|---|---| -| 1 — Capture-path allocation count (steady-state zero) | SysRS-307 | SysDes-156 | SRS-216 (metric 1) + SRS-219 clause-a (tolerance = 0) | SAD-088 | §1 + §3 item 1 + §4 | `crates/chanora_audio/benches/realtime_capture.rs::bench_capture_alloc_count` (with `crates/chanora_audio/benches/common.rs` synthetic input) | SWE4-UV-058 (PENDING_BASELINE) | -| 2 — Capture callback wall-clock (p50/p95/p99) | SysRS-307 | SysDes-156 | SRS-216 (metric 2) + SRS-219 (per-metric tolerance) | SAD-088 | §1 + §3 item 2 | `crates/chanora_audio/benches/realtime_capture.rs::bench_capture_callback_wall_clock` | SWE4-UV-059 (PENDING_BASELINE) | -| 3 — Opus encode latency (20 ms / 960-sample frame, p50/p95/p99) | SysRS-307 | SysDes-156 | SRS-216 (metric 3) + SRS-219 | SAD-088 | §1 + §3 item 3 | `crates/chanora_audio/benches/opus_codec.rs::bench_opus_encode_latency` | SWE4-UV-060 (PENDING_BASELINE) | -| 4 — Opus decode latency (codec-level `audiopus::coder::Decoder::decode_float`, p50/p95/p99) | SysRS-307 | SysDes-156 | SRS-216 (metric 4) + SRS-219 | SAD-088 | §1 + §3 item 4 | `crates/chanora_audio/benches/opus_codec.rs::bench_opus_decode_latency` | SWE4-UV-061 (PENDING_BASELINE) | -| 5 — Resampler throughput (per-mode triplet, samples/sec) | SysRS-307 | SysDes-156 | SRS-216 (metric 5) + SRS-219 | SAD-088 | §1 + §3 (resampler bench) | `crates/chanora_audio/benches/resampler.rs` | SWE4-UV-062 (PENDING_BASELINE) | - -The SDD-120 §11 verification matrix records SWE4-UV-058..062 as a Suggested SWE.4 forward allocation. The IDs are not invented by this addendum; they originate from the SDD §11 forward-allocation note and were authored by verification-engineer into `swe4-unit-verification-plan.md` at v0.9.15. With authoring complete, the §A markers are now `PENDING_BASELINE` only (the first `workflow_dispatch` run that establishes the SAD-089 baseline JSON remains gated on CI minutes return). - -### B. CI infrastructure chain — bench-advisory workflow + comparator - -| SysRS | SysDes | SRS | SAD | SDD-120 § | Code anchor | -|---|---|---|---|---|---| -| SysRS-308 | SysDes-157 | SRS-218 | SAD-090 | §6 (advisory PR-comment workflow, merge-base baseline read, `actions/github-script@v7` posting, sentinel-marker comment update, `always() && exit 0` non-blocking semantics, status-check name `bench-advisory` explicitly NOT added to required-checks per SRS-218 clause 4) | `.github/workflows/bench-advisory.yml` + `crates/chanora_audio/examples/compare_baseline.rs` | - -### C. CI infrastructure chain — baseline-update workflow isolation - -| SysRS | SysDes | SRS | SAD | SDD-120 § | Code anchor | -|---|---|---|---|---|---| -| SysRS-308 | SysDes-157 | SRS-218 | SAD-091 (sole-writer of SAD-089) | §7 (`workflow_dispatch`-only trigger; `peter-evans/create-pull-request@v6` opens a reviewable PR rather than direct-pushing `main`; `add-paths: crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`) | `.github/workflows/bench-baseline-update.yml` | - -### D. Tolerance-window chain - -SRS-219 carries the per-metric tolerance table directly; no dedicated SAD allocation exists (the tolerance numerics live in the SRS clause and are operationalized by the `compare_baseline` binary per SDD-120 §8). This is acknowledged in §B above by carrying SRS-219 as a tolerance contributor on every metric row. - -| SysRS | SysDes | SRS | SAD | SDD-120 § | Code anchor | -|---|---|---|---|---|---| -| SysRS-309 | SysDes-158 | SRS-219 (clause-a `tolerance = 0` for `capture_alloc_count`; per-metric tolerance percentages for the latency / throughput metrics) | (no dedicated SAD allocation; tolerance numerics live in SRS-219 and are realized in code) | §8 (yellow-marker trending logic — committed SAD-089 baseline is also the trending comparator per the SAD-090 yellow-marker pin; zero-tolerance branch for `capture_alloc_count` emits 🔴 if `c != 0`) | `crates/chanora_audio/examples/compare_baseline.rs` | - -Strict-hierarchy note: the absence of a SAD allocation between SRS-219 and SDD-120 §8 is acceptable because SRS-219 is a **tolerance-numerics clause** that the SAD-088 / SAD-090 allocations operationalize through their respective harness and workflow components; no design split was lost. The SDD-120 §11 coverage matrix already cites SAD-088..091 inclusive and does not omit SRS-219 from the chain. - -### E. Baseline storage chain - -| SRS | SAD | SDD-120 § | Code anchors | -|---|---|---|---| -| SRS-217 (baseline JSON record schema: `{ metric, value, unit, tolerance_pct, host, timestamp_utc }`, top-level `metrics` array) | SAD-089 (baseline JSON on-disk path pinned to `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`) | §5 (post-processor binary; `cargo run --example emit_baseline`; parses criterion `estimates.json` into SRS-217 records; writes `./current.json` at workspace root, NOT the SAD-089 path — the SAD-089 path is read by the comparator on advisory runs and written by copy on baseline-update runs per §6 step 7 / §7 step 5) | `crates/chanora_audio/examples/emit_baseline.rs` (producer) + `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` (storage) | - -### F. Code-anchor table — new rows for commits 3a7750a + 8e95972 + 75b04f0 - -The following rows extend the prior code-anchor tables (0.9.6 §F, 0.9.8 §A.5, 0.9.9 §B) to absorb the SDD-120 infrastructure landed by commits 3a7750a (initial harness), 8e95972 (workflow + comparator), and 75b04f0 (`.gitignore` for local bench outputs): - -| Code path | SDD trace | SRS / SAD trace (indirect) | Notes | -|---|---|---|---| -| `crates/chanora_audio/benches/common.rs` | SDD-120 §4 (deterministic synthetic-input generation: 440 Hz sine at amplitude 0.5, no RNG, byte-stable across runs) | SAD-088 → SRS-216 / SRS-219 | Shared module imported by the three bench files. | -| `crates/chanora_audio/benches/realtime_capture.rs` | SDD-120 §3 items 1–2 (capture benches: `bench_capture_alloc_count` with dhat 100-call pre-warm + 1000-call measurement window; `bench_capture_callback_wall_clock`) | SAD-088 → SRS-216 (metrics 1, 2) → SRS-219 clause-a | Bench seam: `CaptureState::ingest` at `crates/chanora_audio/src/engine.rs:1207`. | -| `crates/chanora_audio/benches/opus_codec.rs` | SDD-120 §3 items 3–4 (codec benches: `bench_opus_encode_latency`, `bench_opus_decode_latency`) | SAD-088 → SRS-216 (metrics 3, 4) | Pinned to `audiopus::coder::Decoder::decode_float` directly, NOT `tsclientlib::AudioHandler::fill_buffer`, per SDD-120 §3 item 4 rationale (composite-call conflation). | -| `crates/chanora_audio/benches/resampler.rs` | SDD-120 §3 (resampler throughput bench, three sub-bench groups aggregated into per-mode triplet) | SAD-088 → SRS-216 (metric 5) | — | -| `crates/chanora_audio/examples/emit_baseline.rs` | SDD-120 §5 (post-bench JSON aggregator; reads criterion `estimates.json`; projects to SRS-217 records; writes `./current.json`) | SAD-089 → SRS-217 | Placed under `examples/` not `src/bin/` per SDD-120 §2 item 5 (`[dev-dependencies]` routing; v0.9.16 amendment). | -| `crates/chanora_audio/examples/compare_baseline.rs` | SDD-120 §6 (advisory comparator invoked by workflow step 8) + §8 (yellow-marker trending logic; zero-tolerance branch for `capture_alloc_count`) | SAD-090 → SRS-218; SRS-219 (tolerance application); SAD-089 (baseline JSON consumer) | Always exits 0 per SRS-218 clause 4; regression is rendered as 🔴 marker inside the PR comment, not as a non-zero exit code. | -| `crates/chanora_audio/Cargo.toml` | SDD-120 §1 (`criterion = "0.5"`, `dhat = "0.3"`, `serde_json` dev-deps; three `[[bench]]` entries; `[[example]]` auto-discovery via `examples/` directory per v0.9.16 amendment) | SAD-088 | — | -| `.github/workflows/bench-advisory.yml` | SDD-120 §6 (PR + push triggers, `dtolnay/rust-toolchain@stable` + `Swatinem/rust-cache@v2`, audio system deps `libasound2-dev libpulse-dev pkg-config libopus-dev`, `fetch-depth: 0`, `git show $MERGE_BASE:…/x86_64-unknown-linux-gnu.json` with missing-baseline short-circuit, `actions/github-script@v7` PR comment with sentinel-marker upsert, `always() && exit 0` non-blocking) | SAD-090 → SRS-218 | Status-check name `bench-advisory` explicitly NOT added to branch-protection required-checks (SRS-218 clause 4). | -| `.github/workflows/bench-baseline-update.yml` | SDD-120 §7 (`workflow_dispatch`-only trigger; `peter-evans/create-pull-request@v6` opens a reviewable PR; `add-paths` scoped to the SAD-089 baseline JSON; sole writer of SAD-089) | SAD-091 → SRS-218 | Preserves SAD-091 sole-writer invariant: the PR-merge commit is also written by this workflow's PR, not by a human directly editing the JSON. | -| `.gitignore` (75b04f0) | SDD-120 §5 (local bench outputs `./current.json` and `./report.md` at workspace root are produced by the post-processor and the comparator respectively; both are gitignored and never tracked) | SAD-089 (path discipline) | Untracked workspace-root files `current.json` and `report.md` confirmed gitignored as of 75b04f0. | - -### G. Closed open-issue confirmation (carried from prior auditor passes) - -| # | Item | Confirmed status | -|---|---|---| -| 1 | matrix-row entries for SRS-210..SRS-215 (PENDING_SDD reservations from 0.9.6 §C) | **CLOSED** by 0.9.7 §A (concrete SDD-111..SDD-116 mapping) and 0.9.9 §C (concrete SWE.4/5/6 IDs). | -| 2 | SDD-110 `Source SAD` field correction (0.9.6 §H.2, 0.9.7 §C row 1) | **CLOSED** by SDD v0.9.11 (retargeted to SAD-071 + SAD-076); confirmed in 0.9.8 §C row 1. | -| 3 | SysDes-135 generic reuse for SysRS-305 / SysRS-306 / Android voice audio backend (0.9.6 §H.1, 0.9.7 §C row 2) | **CLOSED** by SysDes v0.9.7 (SysDes-152/153/154/155) and SRS v0.9.8 retargeting; confirmed in 0.9.8 §C row 2. | -| 4 | SRS-111 dual-allocation pattern formalization (0.9.6 §H.2, 0.9.7 §C row 3) | **CLOSED** by SAD v0.9.7 §24.1 (cross-cutting + platform-specific allocation pattern); confirmed in 0.9.8 §C row 3. | -| 5 | SWE4-UV-040 x86 inclusion (Wave 3 fold) | **CLOSED** by Wave 3 fold per the 0.9.6 §G coverage and absorbed into the SWE4-UV-040 row anchored to SDD-073 / SAD-063 (Android build config — three-ABI set with x86_64 included). The DEC-032 temporary `abiFilters` reduction (§H below) does not invalidate this closure; SDD-073 item 4 / SDD-118 item 3 still mandate `x86_64` as part of the canonical three-ABI set and SWE4-UV-040 verifies against the canonical set. | - -All five carried items confirmed closed at this audit revision. No reopens. - -### H. DEC-032 status note (unchanged) - -DEC-032 (temporary reduction of Android `abiFilters` to `arm64-v8a` only during the P0 smoke-test cycle) remains **Active (temporary deviation)** as recorded in 0.9.9 §D. The exit criteria (canonical three-ABI set restoration per SDD-073 item 4 / SDD-118 item 3, all-three-ABI clean CI compilation, release-inspection assertion covering all three `.so` files plus `libc++_shared.so` per SDD-118 item 6 extended) remain **PENDING**. Owner: Build/Toolchain. No matrix-side change at this revision; the existing 0.9.9 §D cross-reference remains the canonical record. - -### I. New traceability gaps surfaced by this audit - -| # | Gap | Severity | Owner | -|---|---|---|---| -| 1 | **SWE4-UV-058..SWE4-UV-062 authoring (RESOLVED at commit time).** At audit time the IDs were absent from `docs/verification/swe4-unit-verification-plan.md` and verification-engineer's dispatch was in flight in parallel. The dispatch landed at swe4 plan v0.9.15 concurrent with this matrix update; §A markers reconciled to `PENDING_BASELINE`. Only remaining gap: first `workflow_dispatch` run on `bench-baseline-update.yml` to seed the SAD-089 baseline JSON (gated on CI minutes return). | Medium → Low (resolved). Engineering chain (SysRS → … → SDD → Code) closed end-to-end; SWE.4 authoring complete. Does NOT raise BLOCKED_REQUIREMENT_GAP. | RESOLVED (verification-engineer landed SWE4-UV-058..062 at swe4 plan v0.9.15). | -| 2 | **First `workflow_dispatch` run of `.github/workflows/bench-baseline-update.yml` has not occurred** — the `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json` file exists as a seeded SAD-089 baseline per SDD-120 §1, but the first CI-driven baseline-establishment run is gated on CI minutes return. Once the run lands, the seeded file is superseded by the workflow-produced PR. | Low — non-traceability; affects baseline-value freshness only. | Build/Toolchain (CI-minutes scheduling); Audio Owner (PR review). | - -No code-without-SDD-or-upstream-trace condition was found. Every code anchor in §F carries an SDD-120 reference and resolves upward through SAD-088..091 → SRS-216..219 → SysDes-156..158 → SysRS-307..309. **BLOCKED_REQUIREMENT_GAP is not raised.** - -### J. Strict-hierarchy discipline check - -- SRS-216..219 source from SysDes-156..158 only; no direct SysRS source. -- SAD-088..091 source from SRS-216..219 only; no direct SysDes link. -- SDD-120 sources from SAD-088..091 only; no direct SysRS / SysDes / SRS link. -- SWE4-UV-058..062 (forward-allocated) source from SDD-120 only; verification remains downstream evidence. -- DEC-032 remains a governance cross-reference and does not act as an engineering-layer direct source. - -No forbidden direct links were introduced by this sub-wave. - -### K. Items intentionally NOT changed by this addendum - -| Item | Reason for non-change | -|---|---| -| `docs/requirements/sysrs.md`, `docs/architecture/sysdes.md`, `docs/requirements/srs.md`, `docs/architecture/sad.md`, `docs/architecture/sdd.md` | Read-only per task brief. | -| `docs/verification/swe4-unit-verification-plan.md` and all other `docs/verification/**` | Read-only per task brief; SWE4-UV-058..062 authoring is owned by verification-engineer in parallel dispatch. | -| `docs/governance/product-decision-register.md` | The SDD-120 chain is a normal SDD-anchored feature delivery, NOT a deviation; DEC-032 is the only relevant DEC and is unchanged. No new DEC entry is warranted. | -| Source code (incl. `crates/chanora_audio/**`, `.github/workflows/**`) | Read-only per task brief. | -| Workspace-root untracked files `current.json` and `report.md` | Gitignored as of 75b04f0; ignored per task brief. | - -### L. Final verdict - -**TRACEABILITY_OK (engineering hierarchy).** The chain `SysRS-307..309 → SysDes-156..158 → SRS-216..219 → SAD-088..091 → SDD-120 → Code (commits 3a7750a + 8e95972 + 75b04f0)` is closed end-to-end at every engineering layer. Every code anchor in §F resolves to SDD-120 and upward. No forbidden direct links introduced. No code-without-SDD condition found. - -**TRACEABILITY_GAPS_REMAIN (verification only).** SWE4-UV-058..062 are absent from `swe4-unit-verification-plan.md` at this audit time (parallel verification-engineer dispatch in flight). The gap is verification-authoring only; the engineering chain is unaffected and BLOCKED_REQUIREMENT_GAP is not raised. - -**Overall decision: TRACEABILITY_OK for the engineering layers (SysRS → … → Code); TRACEABILITY_GAPS_REMAIN for SWE4-UV-058..062 verification authoring only.** - -### M. Recommended next step - -Verification-engineer's parallel dispatch landed SWE4-UV-058..062 into `docs/verification/swe4-unit-verification-plan.md` at v0.9.15 concurrent with this matrix update. The two updates were committed + pushed together as a single doc commit; §A markers were reconciled to `PENDING_BASELINE` at commit time (no follow-up patch required). - -| Version | Date | Description | -|---|---|---| -| 0.9.10 | 2026-05-18 | Absorbed the full SDD-120 (`RealtimeAudioBenchmarkHarnessAndAdvisoryCI`, v0.9.16) end-to-end chain: SysRS-307/308/309 → SysDes-156/157/158 → SRS-216..219 → SAD-088..091 → SDD-120 → Code (commits 3a7750a initial harness + 8e95972 workflow/comparator + 75b04f0 gitignore). Added five end-to-end metric-family rows in §A (capture alloc count → SWE4-UV-058; capture callback wall-clock → SWE4-UV-059; opus encode → SWE4-UV-060; opus decode → SWE4-UV-061; resampler throughput → SWE4-UV-062), all marked PENDING_BASELINE post-reconciliation (verification-engineer's parallel dispatch landed SWE4-UV-058..062 at swe4-unit-verification-plan.md v0.9.15 concurrent with this matrix update; §A markers reconciled at commit time). Added §B advisory CI workflow row (SysRS-308 → SysDes-157 → SRS-218 → SAD-090 → SDD-120 §6 → bench-advisory.yml + compare_baseline.rs), §C workflow-isolation row (SAD-091 → SDD-120 §7 → bench-baseline-update.yml), §D tolerance-window row (SysRS-309 → SysDes-158 → SRS-219 → SDD-120 §8 → compare_baseline.rs; no dedicated SAD allocation acknowledged), and §E baseline-storage row (SRS-217 → SAD-089 → SDD-120 §5 → emit_baseline.rs + x86_64-unknown-linux-gnu.json). §F refreshed the code-anchor table with 10 new entries (common.rs, realtime_capture.rs, opus_codec.rs, resampler.rs, emit_baseline.rs, compare_baseline.rs, Cargo.toml, bench-advisory.yml, bench-baseline-update.yml, .gitignore). §G confirmed five prior open issues CLOSED (SRS-210..215 matrix rows, SDD-110 Source SAD correction, SysDes-135 generic reuse, SRS-111 dual-allocation pattern, SWE4-UV-040 x86 inclusion). §H noted DEC-032 status unchanged (Active temporary deviation; exit criteria pending). §I surfaced two new non-blocking gaps (SWE4-UV-058..062 absent from swe4 plan; first workflow_dispatch baseline run gated on CI minutes). §J confirmed strict-hierarchy discipline preserved. SDD-120 §10 deferred items (multi-host benches, Dart-side bridge bench, production telemetry export, hard CI gate) recorded as DEFERRED. TRACEABILITY_OK for engineering layers; TRACEABILITY_GAPS_REMAIN for SWE.4 authoring only; BLOCKED_REQUIREMENT_GAP not raised. | - -## Deferred Work Watchlist (Baseline Candidate 0.9.11) - -This section is the **single canonical durable register** for deferred / future-work commitments surfaced by ratified SysRS / SysDes / SRS / SAD / SDD / DEC artefacts in this product line. Prior to v0.9.11 such deferrals lived only in document prose (e.g. SDD-120 §10, SDD-119 §3, DEC-032 resolution prose, researcher Tier B notes), where they are at risk of silent slippage when the originating document is consulted as a status source ("are we doing X?" → "yes" forgetting the escalation/closure work was queued). - -The watchlist is governance-layer only. It does not act as an engineering-layer direct source (`SysRS -> SysDes -> SRS -> SAD -> SDD` is unaffected) and it does not relax any coverage rule. Each entry is a **commitment to act once a gating condition is met**, not a ratified decision; ratified decisions continue to live in `docs/governance/product-decision-register.md`. - -### Conventions - -- **ID format**: `DW-NNN` (Deferred Work). Numbering is monotonic and watchlist-local; gaps are permitted (e.g. when a DW is dropped, its ID is retired, not reused). -- **Source**: the upstream artefact whose prose flags the deferral. A DW must cite a concrete document/section/clause; "general intent" is not a valid source. -- **Gating condition**: the externally observable trigger that converts the DW from "deferred" to "actionable". Once met, the DW is the entry point for dispatching the named owner agent. -- **Priority**: P0 (blocks current product baseline), P1 (near-term post-baseline), P2 (medium-term hardening), P3 (optional polish). -- **Owner Agent**: the agent layer that owns the *next* action when the gating condition fires. "operator action" is reserved for human-only steps that no agent can dispatch on its own. - -A DW is **retired** (not deleted) by marking its row `RETIRED` in a future matrix revision once the work is either (a) ratified into an SysRS/SysDes/SRS/SAD/SDD/DEC chain, or (b) explicitly dropped via a recorded governance decision. - -### Watchlist - -| ID | Source | Item | Gating Condition | Priority | Owner Agent | -|---|---|---|---|---|---| -| DW-001 | SDD-120 §10 / SysRS-308 deferred clause | Dimension 3 production telemetry export (real-device, real-call benchmark dimension of the Option B benchmark scope) | Post-baseline-maturity SysRS clause authored + ratified DEC entry | P1 | systems-requirements | -| DW-002 | SDD-120 §10 / SysRS-308 deferred clause | Build-failing hard CI gate (escalation from the current advisory-only `bench-advisory` workflow) | 4–6 weeks of clean baseline data accumulated + ratified DEC entry authorising the escalation | P1 | systems-requirements | -| DW-003 | SDD-120 §10 / SysDes-157 | Multi-host benchmarking (macOS Apple Silicon, Windows x86_64 runners — currently Linux x86_64 only) | SysDes revision to allow more than one canonical bench host + CI minutes budget approval | P2 | system-architect | -| DW-004 | SDD-120 §10 | IDE integration (cargo bench from rust-analyzer, IntelliJ run configs, flutter-tool wrappers) | Optional tooling polish — no external gate; pick up when capacity allows | P3 | builder | -| DW-005 | SDD-120 §10 / researcher Wave 4 Tier B4 | Dart-side `flutter_rust_bridge` round-trip benchmark | SAD/SDD authoring for the Dart-side bench infrastructure | P2 | detailed-designer | -| DW-006 | SDD-119 §3 v0.9.17 (iOS half of the deployment-target SoT consolidation; macOS half closed by commit b23b46c) | iOS deployment-target SoT consolidation — collapse the multi-site `IPHONEOS_DEPLOYMENT_TARGET=13.0` declarations in the iOS podspec / Podfile to a single Ruby constant parallel to `apps/chanora_flutter/macos/macos_deployment_target.rb` | Parallel-to-macOS work; pick up when iOS build hardening capacity available | P2 | detailed-designer | -| DW-007 | researcher Wave 4 Tier B | Opus encode/decode latency under varied conditions (per-bitrate, per-complexity, per-frame-size sweeps beyond the SDD-120 §3 canonical 20 ms / 960-sample / default-complexity baseline) | SDD-120 baseline maturity (DW-002 prerequisite recommended but not strictly required) | P2 | verification-engineer | -| DW-008 | researcher Wave 4 Tier B | Resampler throughput at non-canonical rate pairs (beyond the SDD-120 §3 canonical triplet) | SDD-120 baseline maturity | P3 | verification-engineer | -| DW-009 | researcher Wave 4 Tier B | Protocol forwarder loop tracing benchmark | SDD-120 baseline maturity | P3 | verification-engineer | -| DW-010 | DEC-032 resolution prose (`product-decision-register.md` v0.9.8.1 row; DEC-032 §"Resolved" status row) | Remove the workspace `[patch.crates-io]` cmake-rs pin (currently pinned to fork `pr2502/cmake-rs` @ `bdad5edc569d82151922c5c6c4685b1563f12aa1` carrying cmake-rs PR #257) and switch to a plain upstream `cmake` crate version bump | cmake-rs PR #257 merges into upstream + a fresh `cmake` crate release is published to crates.io carrying that fix | P2 | builder | -| DW-011 | (no source SDD yet — investigation pending; surfaced by recent Linux runtime reports) | Linux SIGABRT root-cause investigation + graceful-shutdown SRS/SDD chain authoring | User-supplied reproducer artifacts (crash log, stack trace, environment) sufficient to begin debugger analysis | P0 | debugger then systems-requirements | -| DW-012 | SDD-120 §6 / SAD-091 | Manual `workflow_dispatch` invocation of `.github/workflows/bench-baseline-update.yml` to seed the first real SAD-089 baseline JSON (superseding the currently-seeded committed baseline) | CI minutes return + human operator schedules the dispatch and reviews the resulting PR | P1 | operator action (not an agent dispatch) | - -### Already-tracked check - -A pre-authoring search for these items confirmed: - -- **DW-010 partial precedent**: DEC-032's resolution prose in `product-decision-register.md` (v0.9.8.1 history row + DEC-032 §Notes/Status row) explicitly calls out "re-evaluate the `[patch.crates-io]` override once cmake-rs PR #257 merges and a fresh `cmake` release lands". This is prose only — there is no durable watch-list entry, so DW-010 is the canonical tracker. The DEC-032 prose remains the source citation. -- **DW-006 partial precedent**: SDD-119 §3 v0.9.17 prose flags the iOS SoT consolidation as an "open follow-up" (the macOS half is closed by commit b23b46c). This is prose only — no other governance register tracks it, so DW-006 is the canonical tracker. -- **DW-011 not pre-tracked**: no SysRS / SysDes / SRS / SAD / SDD / DEC currently anchors a Linux SIGABRT graceful-shutdown clause. DW-011 holds the slot until reproducer artifacts arrive and a SysRS/SysDes/SRS/SAD/SDD chain can be authored (at which point DW-011 retires and ordinary engineering-layer traceability takes over). -- **DW-001..005, DW-007..009, DW-012**: surfaced from SDD-120 §10 prose and researcher Tier B notes only; no other governance register currently tracks them. - -No duplicates introduced. - -### Strict-hierarchy discipline check - -The watchlist does not introduce any forbidden direct link. Each DW cites its source artefact for traceability but does not itself act as an upstream source for any SysRS / SysDes / SRS / SAD / SDD item. Owner-agent fields are dispatch hints, not engineering-layer allocations. - -### Decision - -**TRACEABILITY_OK.** The matrix now durably tracks 12 deferred work commitments that previously lived only in document prose. No engineering-chain regression. **BLOCKED_REQUIREMENT_GAP is not raised** (the watchlist absorbs prose-only deferrals into a durable register; it does not surface any code-without-SDD condition). - -### Recommended next agent - -**None.** The watchlist is the deliverable. Once a DW's gating condition is satisfied, that DW row becomes the entry point for dispatching its named owner agent into the ordinary SysRS / SysDes / SRS / SAD / SDD / Code / Verification chain. - -| Version | Date | Description | -|---|---|---| -| 0.9.11 | 2026-05-18 | Added §"Deferred Work Watchlist" as the single canonical durable register for prose-only deferrals previously scattered across SDD-120 §10 (5 items: Dimension 3 telemetry, hard CI gate, multi-host benches, IDE integration, Dart-side frb round-trip bench), SDD-119 §3 v0.9.17 (iOS deployment-target SoT consolidation; macOS half already closed by commit b23b46c), researcher Wave 4 Tier B (Opus latency sweeps, non-canonical resampler rate pairs, protocol forwarder loop tracing), DEC-032 resolution prose (cmake-rs `[patch.crates-io]` override removal once PR #257 merges upstream), Linux SIGABRT investigation (no source SDD yet; held in DW-011 pending reproducer artifacts), and the manual seed-baseline `workflow_dispatch` operator action (SDD-120 §6 / SAD-091). 12 entries authored: DW-001..DW-012. ID convention introduced (monotonic `DW-NNN`, retired-not-reused). Watchlist is governance-only and does not relax any coverage rule; strict-hierarchy discipline preserved (`SysDes -> SysRS`, `SRS -> SysDes`, `SAD -> SRS`, `SDD -> SAD` unaffected). Recommended next agent: none — the watchlist is the deliverable; each row becomes the entry point for its named owner agent once its gating condition fires. BLOCKED_REQUIREMENT_GAP not raised. | diff --git a/docs/i18n/localization-architecture.md b/docs/i18n/localization-architecture.md deleted file mode 100644 index 99eff48..0000000 --- a/docs/i18n/localization-architecture.md +++ /dev/null @@ -1,87 +0,0 @@ - -# Chanora Internationalization and Localization Architecture - -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English - -**Repo path:** `docs/i18n/localization-architecture.md` --- - -## 1. Purpose - -This document defines Chanora's i18n architecture. Chanora is expected to operate in multilingual environments where product UI language, server-provided names, user nicknames, channel names, chat messages, and diagnostics may contain different languages. - -## 2. i18n Principles - -| Principle | Rule | -|---|---| -| Product strings are localizable | UI copy, labels, settings, errors, and accessibility labels use localization resources. | -| Server content is not translated | Server names, channel names, client nicknames, and chat messages are displayed as content. | -| UTF-8 internal text | Cross-layer DTOs and storage use UTF-8-compatible strings. | -| Boundary conversion only | Non-UTF-8 conversion occurs only at explicit protocol or platform boundaries. | -| Diagnostics are stable | Machine-readable diagnostic keys remain language-neutral. | -| User-facing diagnostics may be localized | Diagnostic descriptions can be localized independently. | -| Fallback is deterministic | Missing translations fall back to English or configured baseline locale. | - -## 3. Text Categories - -| Category | Example | Handling | -|---|---|---| -| Product UI string | "Connect", "Settings" | Localized | -| Accessibility string | "Mute microphone" | Localized | -| Protocol/server content | Server name, channel name | Preserve and display | -| User content | Chat message, nickname | Preserve and display | -| Machine diagnostic key | `audio.device.route_changed` | Stable, not localized | -| Diagnostic description | "Audio route changed" | Localizable | - -## 4. Encoding Architecture - -```text -External server text - -> Protocol Adapter boundary conversion if required - -> UTF-8-compatible Rust DTO - -> Bridge DTO - -> Flutter ViewModel - -> Flutter Text rendering - -Product string key - -> Localization Service - -> Locale resource lookup - -> Fallback if missing - -> Flutter rendering -``` - -## 5. Bidi and Mixed-Language Handling - -The UI shall not assume that all text is left-to-right. Product strings and content strings should be rendered using platform text widgets capable of bidirectional text rendering where supported. - -## 6. Testing - -| Test | Purpose | -|---|---| -| Missing-key fallback | Ensure fallback locale works | -| Unicode server name | Ensure names survive protocol -> UI | -| Mixed-language chat | Ensure multilingual content displays | -| RTL smoke test | Ensure basic RTL strings render | -| Diagnostics Unicode export | Ensure multilingual diagnostics survive redaction | -| Machine-key stability | Ensure diagnostic keys are language-neutral | - -## 7. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial i18n and localization architecture baseline. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/legal/trademark-and-attribution-review.md b/docs/legal/trademark-and-attribution-review.md deleted file mode 100644 index 1288d82..0000000 --- a/docs/legal/trademark-and-attribution-review.md +++ /dev/null @@ -1,107 +0,0 @@ -# Legal Trademark And Attribution Review V0.9.2.2.1 - -**Document type:** Legal / Trademark and Attribution Review -**Version:** 0.9.2 -**Status:** Baseline Candidate / Legal Review Required -**Language:** English -**Product:** Chanora -**Repo path:** `docs/legal/trademark-and-attribution-review.md` --- - -## 1. Purpose - -This document records trademark, attribution, non-affiliation, and OSS notice review for Chanora. - -This document must be reviewed by a qualified legal/compliance reviewer before public release or store submission. - -## 2. Non-Affiliation Requirement - -Chanora must not imply official affiliation, endorsement, sponsorship, or approval by TeamSpeak or any other third-party service provider unless such approval exists in writing. - -## 3. Required Public Wording - -The final wording must be approved by legal. - -Draft wording: - -> Chanora is an independent client application and is not affiliated with, endorsed by, sponsored by, or officially associated with TeamSpeak. - -Legal reviewer shall confirm whether the wording is sufficient for: - -- website; -- app store description; -- in-app About screen; -- documentation; -- release notes; -- support pages. - -## 4. Trademark Usage Review - -| Location | Uses third-party mark? | Wording reviewed? | Approved? | Notes | -|---|---|---|---|---| -| App name | TBD | TBD | TBD | TBD | -| App subtitle | TBD | TBD | TBD | TBD | -| App description | TBD | TBD | TBD | TBD | -| Website | TBD | TBD | TBD | TBD | -| In-app About screen | TBD | TBD | TBD | TBD | -| Documentation | TBD | TBD | TBD | TBD | -| Release notes | TBD | TBD | TBD | TBD | -| Store metadata | TBD | TBD | TBD | TBD | - -## 5. Attribution Review - -| Dependency / product | Attribution required? | License / basis | Attribution text | Status | -|---|---|---|---|---| -| Flutter | TBD | TBD | TBD | TBD | -| Rust dependencies | TBD | TBD | TBD | TBD | -| `tsclientlib` | TBD | TBD | TBD | TBD | -| Native audio libraries | TBD | TBD | TBD | TBD | -| Icons/fonts/assets | TBD | TBD | TBD | TBD | - -## 6. OSS Notice Requirements - -| Requirement | Status | Evidence | -|---|---|---| -| OSS dependency inventory complete | TBD | Dependency report | -| License compatibility reviewed | TBD | Legal review | -| Required notices included | TBD | OSS notices file | -| Source offer obligations checked if applicable | TBD | Legal review | -| App store metadata license claims reviewed | TBD | Store review | - -## 7. Release Gate - -| Gate | Required result | -|---|---| -| Non-affiliation wording | Approved | -| Trademark usage | Approved | -| OSS notices | Complete | -| License review | Complete | -| Store metadata | Approved if applicable | -| Website/legal pages | Approved if applicable | - -## 8. Approval - -| Role | Name | Decision | Date | -|---|---|---|---| -| Legal / Compliance Reviewer | TBD | Pending | TBD | -| Product Owner | TBD | Pending | TBD | -| Release Manager | TBD | Pending | TBD | - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial trademark and attribution review template; legal review required before public release. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/phase_index.json b/docs/phase_index.json new file mode 100644 index 0000000..cc27510 --- /dev/null +++ b/docs/phase_index.json @@ -0,0 +1,7684 @@ +{ + "product": "Chanora", + "load_rule": "Load 00_AGENT_ROUTER.md + one phase file + SOP only if needed.", + "counts": { + "P0": 500, + "P1": 81, + "P2": 11, + "SOP": 310 + }, + "accepted_mvp_defaults": { + "Release sequence": "Internal Alpha → External Beta → MVP Public", + "MVP platforms": "Windows, macOS, Linux, Android, iOS (staged release allowed)", + "Active connections": "One active server connection", + "UI design system": "Material 3 + Chanora Design System", + "Product language": "MODIFIED — English + Chinese (Simplified) at MVP; i18n-ready architecture", + "Server content": "Preserve and display Unicode; do not translate", + "Diagnostics": "Local, user-initiated export only", + "Telemetry": "None", + "Crash reporting": "None unless later approved", + "Secret storage": "Platform secure storage", + "Non-secret local storage": "SQLite (rusqlite bundled)", + "Audio processing": "Platform-native first; fallback strategy documented", + "AEC": "Enabled by default where supported", + "AGC": "Enabled by default (user-toggleable)", + "Noise suppression": "Enabled by default (user-toggleable)", + "High-pass filter": "Enabled by default", + "Android minimum": "MODIFIED — API 28 (Android 9.0), raised from the original recommendation of API 24", + "Android target": "API 35 or newer per current Google Play policy on upload date", + "iOS minimum": "iOS 13", + "Apple App Store SDK gate": "Xcode 26+ / iOS 26 SDK+ for uploads on or after 2026-04-28", + "Audio crate": "cpal (desktop, Android); iOS deferred", + "Bridge": "Stable typed Flutter/Rust bridge; flutter_rust_bridge 2.x pinned", + "Implementation directory layout": "apps/chanora_flutter/, core/chanora_core/, crates/chanora_*", + "License": "Dual-licensed under Apache-2.0 OR MIT, recipient's choice (DEC-020)" + }, + "decisions": [ + { + "id": "DEC-001", + "decision": "Release type", + "accepted_value": "Internal Alpha first, then External Beta, then MVP Public / Store Release", + "status": "Accepted" + }, + { + "id": "DEC-002", + "decision": "MVP platform scope", + "accepted_value": "MVP target remains Windows, macOS, Linux, Android, and iOS; first release may be staged by channel/platform", + "status": "Accepted" + }, + { + "id": "DEC-003", + "decision": "Minimum iOS version", + "accepted_value": "iOS 13 minimum for Flutter support baseline; test latest iOS release separately", + "status": "Accepted" + }, + { + "id": "DEC-004", + "decision": "Minimum Android version", + "accepted_value": "**Android API 28 (Android 9.0)** minimum, raised from the original recommendation of API 24 by explicit owner ruling on 2026-05-14. Rationale: simplifies the audio path (AAudio is unconditionally available from API 26+ and stable from API 28), narrows the TLS / privacy / scoped-storage compatibility surface, and matches typical 2026 Android baselines. The original cpal-on-Oboe Android spike was built with `minSdk = 24` and `cargo-ndk -P 26`; product code in `apps/chanora_flutter` uses `minSdk = 28` and the Android product audio backend is now direct Oboe, so Chanora no longer carries the API 24/25 OpenSL ES fallback branch.", + "status": "Accepted" + }, + { + "id": "DEC-005", + "decision": "Android target SDK", + "accepted_value": "Target the Google Play-required API level on the upload date; current release gate uses API 35+ unless newer Google policy applies", + "status": "Accepted" + }, + { + "id": "DEC-006", + "decision": "Multiple server connections in MVP", + "accepted_value": "Not in MVP; support one active server connection per client instance", + "status": "Accepted" + }, + { + "id": "DEC-007", + "decision": "AEC default state", + "accepted_value": "Enabled by default on platforms/audio backends where supported and stable", + "status": "Accepted" + }, + { + "id": "DEC-008", + "decision": "AGC default state", + "accepted_value": "Enabled by default, with user setting to disable", + "status": "Accepted" + }, + { + "id": "DEC-009", + "decision": "Noise suppression default state", + "accepted_value": "Enabled by default, with user setting to disable", + "status": "Accepted" + }, + { + "id": "DEC-010", + "decision": "High-pass filter default state", + "accepted_value": "Enabled by default", + "status": "Accepted" + }, + { + "id": "DEC-011", + "decision": "Audio processing implementation path", + "accepted_value": "Use platform-native audio processing first where available; use Rust/WebRTC-style processing as controlled fallback or later architecture option", + "status": "Accepted" + }, + { + "id": "DEC-011.1", + "decision": "Audio crate choice", + "accepted_value": "`cpal` for desktop (empirically verified on Linux/PipeWire by `poc/audio-capture-playback-spike` on 2026-05-13) and direct `oboe-rs` for Android product code. The earlier cpal-on-Oboe spike remains evidence that Rust audio reaches Oboe/AAudio on a Motorola Moto G Stylus 5G (2023) running Android 14 arm64-v8a, but product code chooses direct Oboe because P0 Android needs explicit `VoiceCommunication` input preset, `VoiceCommunication`/`Speech` output attributes, low-latency/exclusive stream requests with shared fallback, audio-session ids for hardware AEC/NS/AGC binding, and diagnostics of requested/achieved stream values. iOS crate TBD pending an iOS spike that requires macOS + Xcode hardware", + "status": "Accepted (desktop + Android) / Deferred (iOS)" + }, + { + "id": "DEC-012", + "decision": "Official SDK / trademark / licensing review", + "accepted_value": "Public/store release is blocked until legal confirms TeamSpeak non-affiliation wording, trademark usage, OSS licenses, and `tsclientlib` license posture", + "status": "Accepted (as a release gate)" + }, + { + "id": "DEC-013", + "decision": "Local database choice", + "accepted_value": "Use SQLite or equivalent embedded local database for non-secret local state; secrets remain in platform secure storage", + "status": "Accepted" + }, + { + "id": "DEC-013.1", + "decision": "SQLite crate", + "accepted_value": "`rusqlite` with the `bundled` feature (SQLite statically linked into the binary; no system libsqlite3 dependency); verified by `poc/sqlite-storage-spike` on 2026-05-13", + "status": "Accepted" + }, + { + "id": "DEC-013.2", + "decision": "Linux secure-storage backend policy", + "accepted_value": "Prefer Secret Service (libsecret / gnome-keyring / kwallet / KeePassXC) on Linux; if the default collection is locked or D-Bus is unavailable, fall back to kernel keyutils with a clear user notice. Both backends are \"equivalent\" per SysRS-053 / SysRS-162; verified by `poc/secure-storage-spike` on 2026-05-13", + "status": "Accepted" + }, + { + "id": "DEC-014", + "decision": "Bridge choice", + "accepted_value": "Use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs; **`flutter_rust_bridge` 2.x pinned** (empirically verified at 2.12.0 by `poc/flutter_rust_bridge_hello` on 2026-05-13)", + "status": "Accepted" + }, + { + "id": "DEC-015", + "decision": "Product language for MVP", + "accepted_value": "**English + Chinese (Simplified) for MVP**, raised from the original recommendation of English-only by explicit owner ruling on 2026-05-14. Rationale: the demonstrated test-server population (verified live against `cn.teamspeak.app`) and broader TS3 audience include substantial Chinese-speaking users; shipping zh-Hans alongside en at MVP avoids a launch-window UX gap. Architecture remains i18n-ready so additional languages can be added later mechanically. Server-provided content is preserved verbatim and never translated (ADR-008 UTF-8 boundary, DEC-015 server-content rule retained).", + "status": "Accepted" + }, + { + "id": "DEC-016", + "decision": "Diagnostics upload policy", + "accepted_value": "No automatic upload for MVP; user-initiated local diagnostic export only", + "status": "Accepted" + }, + { + "id": "DEC-017", + "decision": "Crash reporting", + "accepted_value": "Disabled for MVP unless explicit opt-in provider and privacy policy are approved", + "status": "Accepted" + }, + { + "id": "DEC-018", + "decision": "Public product name", + "accepted_value": "Chanora", + "status": "Accepted" + }, + { + "id": "DEC-019", + "decision": "Public non-affiliation statement", + "accepted_value": "Use legal-approved wording; drafted text accepted as working copy: \"Chanora is independent and is not affiliated with, endorsed by, sponsored by, or officially associated with TeamSpeak.\" Subject to final legal review under DEC-012 before public release.", + "status": "Accepted (drafted wording)" + }, + { + "id": "DEC-021", + "decision": "Apple App Store submission SDK", + "accepted_value": "Use Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later for App Store submission on or after 2026-04-28, unless Apple publishes a newer applicable requirement before upload", + "status": "Accepted" + }, + { + "id": "DEC-020", + "decision": "License model", + "accepted_value": "**Dual-licensed under Apache-2.0 OR MIT (recipient's choice)**, the standard Rust-ecosystem permissive license model. Accepted on 2026-05-14. Compatible with every direct dependency in the PoC tree (`tsclientlib` MIT-OR-Apache-2.0, `flutter_rust_bridge` MIT, `cpal` Apache-2.0, `rusqlite` MIT, `keyring` MIT-OR-Apache-2.0, etc.) and with the Flutter framework's BSD-3-Clause. The license texts ship as `LICENSE-APACHE` and `LICENSE-MIT` at the repository root; an aggregator `LICENSE` points to both. `NOTICE` enumerates current direct-dependency attributions. The full OSS legal review (transitive deps, license obligations, OSS notices) remains under DEC-012 and is still required before public release.", + "status": "Accepted" + }, + { + "id": "DEC-022", + "decision": "Canonical implementation directory layout", + "accepted_value": "Accept the README's sketch as canonical: `apps/chanora_flutter/`, `core/chanora_core/`, `crates/chanora_protocol/`, `crates/chanora_audio/`, `crates/chanora_state/`, `crates/chanora_storage/`, `crates/chanora_diagnostics/`, `crates/chanora_bridge/`. Matches SAD §7.2 module decomposition", + "status": "Accepted" + }, + { + "id": "DEC-023", + "decision": "Windows desktop Global PTT priority", + "accepted_value": "**P0 in MVP.** Resolves PTT-OPEN-001 from `gen2/chanora-desktop-ptt-review-summary-v0.9.2.md`. The Windows backend ladder (Raw Input → low-level keyboard hook → Focused fallback) is mandatory for the first public release; release notes shall not claim Global PTT support on Windows until live measurement confirms a Global level from a non-fallback rung.", + "status": "Accepted" + }, + { + "id": "DEC-024", + "decision": "macOS desktop Global PTT priority", + "accepted_value": "**P0 in MVP, with explicit permission UX flow.** Resolves PTT-OPEN-002. The macOS backend shall request the Input Monitoring / Accessibility permission, accept user denial gracefully (continue at `L0Focused` without functional regression), and upgrade to Global asynchronously when the user grants the permission.", + "status": "Accepted" + }, + { + "id": "DEC-025", + "decision": "Officially-tested Linux environment for first public release", + "accepted_value": "**GNOME on Wayland (only).** Resolves PTT-OPEN-003. The Linux backend shall use the freedesktop `org.freedesktop.portal.GlobalShortcuts` interface on GNOME-on-Wayland and fall back to Focused PTT on every other Linux environment (X11, sway, KDE, untested compositors). Release notes shall not claim Global PTT support outside the tested compositor.", + "status": "Accepted" + }, + { + "id": "DEC-026", + "decision": "Mouse side-button support in first desktop PTT release", + "accepted_value": "**Supported on Windows and macOS; Linux follows whatever the GlobalShortcuts portal exposes.** Resolves PTT-OPEN-004. The Raw Input backend (Windows) and the Event Tap backend (macOS) shall accept Mouse4 / Mouse5 bindings; the Linux portal binding accepts whatever the session exposes and the release notes shall not over-claim.", + "status": "Accepted" + }, + { + "id": "DEC-027", + "decision": "PTT diagnostics privacy posture", + "accepted_value": "**Capability and availability state only — no raw key codes ever leave the device.** Resolves PTT-OPEN-005. The diagnostic export shall name only `PttCapabilityLevel`, `backend_id`, `bound_input_class`, and `fallback_exercised`; the user's actual key value (scan code, virtual key, keysym) shall never be logged, persisted, or exported. `PttSanitizer` enforces this at write time.", + "status": "Accepted" + }, + { + "id": "DEC-028", + "decision": "Missed-key-up watchdog requirement", + "accepted_value": "**P0.** Resolves PTT-OPEN-006. The audio engine shall include a missed-key-up watchdog that clears `transmit_active` after a configured ceiling (default 30 s) when no key-up event arrives. The watchdog is a P0 release-gate item rather than an implementation-level concern because the failure mode (stuck transmission after the user has released the binding) is user-visible and reputation-relevant.", + "status": "Accepted" + }, + { + "id": "DEC-029", + "decision": "Flutter global-hotkey packages rejected for PTT", + "accepted_value": "**Use the native Rust `DesktopPttBackend` trait + per-OS implementations (already specified in SDD-083 / SDD-084 / SDD-085); do not adopt `hotkey_manager`, `super_hot_key`, or any equivalent pub.dev package for PTT.** Rationale: those packages wrap the OS `RegisterHotKey` / `RegisterEventHotKey` semantics — they consume the key (suppressing it from other applications), they do not deliver a key-up event, and they do not support mouse side-buttons. PTT requires the opposite primitive (observe, do not consume, deliver both up and down).", + "status": "Accepted" + }, + { + "id": "DEC-030", + "decision": "Voice activity detection deferred to P1", + "accepted_value": "**`TransmitMode::VoiceActivity` ships as a reserved enum variant with no v1 implementation.** The settings UI shows it as a disabled \"coming soon\" option. The actual implementation choice is deferred to a future baseline. Rationale: three viable backends were compared (RMS energy threshold — trivial but quality-poor; WebRTC VAD via the `webrtc-vad` crate — frozen-but-stable C++ BSD-3 dep, ~200 KB binary, industry baseline; Silero VAD via ONNX Runtime — best quality but ~8–16 MB binary uplift per platform plus an ONNX-runtime dependency surface). The v1 dependency-surface budget does not have room for the trade-off review required to pick correctly. Choosing too early risks either user-visible quality regression (RMS) or a forced ONNX adoption (Silero) before there is a comparable need for ML inference elsewhere (noise suppression, AEC).", + "status": "Accepted" + }, + { + "id": "DEC-031", + "decision": "Missed-key-up watchdog disabled on P0; redesign deferred to P1", + "accepted_value": "**The `MissedKeyUpWatchdog` is constructed and unit-tested but is NOT spawned by `ChanoraSession::start_audio` in the P0 baseline.** Supersedes DEC-028 for the v1 ship. Rationale: the original 30 s ceiling cut real users off mid-sentence when speaking through PTT for longer than the timeout — Mumble and TeamSpeak do not ship a comparable watchdog, so the protection is stricter than industry baseline while imposing a real UX cost. The watchdog's purpose (catching OS-level key-up loss when the app loses focus / is minimised / hits App Nap) remains valid; the fixed-timeout shape is the wrong implementation. P1 will reintroduce a redesigned variant using one of: (a) raised ceiling (~5 min, owner-tunable) only, (b) active OS-level key-state polling via `GetAsyncKeyState` / `CGEventSourceKeyState` / `XQueryKeymap` so we detect the actual OS desync directly, (c) audio-activity (RMS-silence) fallback once the level meter lands, or (d) a combination. The Rust unit tests for `MissedKeyUpWatchdog::spawn_on_signal` remain in `crates/chanora_audio/src/ptt.rs` so the P1 re-enable is non-breaking.", + "status": "Accepted" + }, + { + "id": "DEC-001", + "decision": "Product Owner", + "accepted_value": "Release type sequence", + "status": "Accepted" + }, + { + "id": "DEC-002", + "decision": "Product Owner / Engineering", + "accepted_value": "MVP platform strategy", + "status": "Accepted" + }, + { + "id": "DEC-003", + "decision": "Product Owner / iOS Owner", + "accepted_value": "Minimum iOS version", + "status": "Accepted" + }, + { + "id": "DEC-004", + "decision": "Product Owner / Android Owner", + "accepted_value": "Minimum Android version", + "status": "Accepted" + }, + { + "id": "DEC-005", + "decision": "Android Owner / Release Manager", + "accepted_value": "Android target SDK", + "status": "Accepted" + }, + { + "id": "DEC-006", + "decision": "Product Owner / Software Architect", + "accepted_value": "Multiple server connections in MVP", + "status": "Accepted" + }, + { + "id": "DEC-007", + "decision": "Audio Owner / Product Owner", + "accepted_value": "AEC default", + "status": "Accepted" + }, + { + "id": "DEC-008", + "decision": "Audio Owner / Product Owner", + "accepted_value": "AGC default", + "status": "Accepted" + }, + { + "id": "DEC-009", + "decision": "Audio Owner / Product Owner", + "accepted_value": "Noise suppression default", + "status": "Accepted" + }, + { + "id": "DEC-010", + "decision": "Audio Owner", + "accepted_value": "High-pass filter default", + "status": "Accepted" + }, + { + "id": "DEC-011", + "decision": "Software Architect / Audio Owner", + "accepted_value": "Audio processing path", + "status": "Accepted" + }, + { + "id": "DEC-011.1", + "decision": "Software Architect / Audio Owner", + "accepted_value": "Audio crate (desktop / mobile)", + "status": "Accepted (desktop: `cpal`; Android product: direct `oboe-rs`) / Deferred (iOS)" + }, + { + "id": "DEC-012", + "decision": "Legal / Compliance", + "accepted_value": "SDK/trademark/licensing review", + "status": "Accepted as a release gate" + }, + { + "id": "DEC-013", + "decision": "Software Architect / Storage Owner", + "accepted_value": "Local database", + "status": "Accepted" + }, + { + "id": "DEC-013.1", + "decision": "Software Architect / Storage Owner", + "accepted_value": "SQLite crate", + "status": "Accepted (`rusqlite` bundled)" + }, + { + "id": "DEC-013.2", + "decision": "Software Architect / Storage Owner / Security Reviewer", + "accepted_value": "Linux secure-storage backend policy", + "status": "Accepted (Secret Service preferred, keyutils fallback)" + }, + { + "id": "DEC-014", + "decision": "Software Architect", + "accepted_value": "Bridge choice", + "status": "Accepted (`flutter_rust_bridge` 2.x pinned)" + }, + { + "id": "DEC-015", + "decision": "Product Owner", + "accepted_value": "Product language for MVP", + "status": "Accepted" + }, + { + "id": "DEC-016", + "decision": "Product Owner / Legal / Security", + "accepted_value": "Diagnostics upload policy", + "status": "Accepted" + }, + { + "id": "DEC-017", + "decision": "Product Owner / Legal / Security", + "accepted_value": "Crash reporting", + "status": "Accepted" + }, + { + "id": "DEC-018", + "decision": "Product Owner", + "accepted_value": "Public product name", + "status": "Accepted" + }, + { + "id": "DEC-019", + "decision": "Legal / Compliance", + "accepted_value": "Public non-affiliation statement", + "status": "Accepted (drafted wording)" + }, + { + "id": "DEC-020", + "decision": "Product Owner / Legal", + "accepted_value": "License model", + "status": "Accepted (Apache-2.0 OR MIT dual-license)" + }, + { + "id": "DEC-021", + "decision": "iOS Owner / Release Manager", + "accepted_value": "Apple App Store SDK gate", + "status": "Accepted" + }, + { + "id": "DEC-022", + "decision": "Software Architect", + "accepted_value": "Canonical implementation directory layout", + "status": "Accepted (README sketch)" + }, + { + "id": "DEC-023", + "decision": "Product Owner / Windows Platform Owner", + "accepted_value": "Windows desktop Global PTT priority", + "status": "Accepted (P0 / MVP)" + }, + { + "id": "DEC-024", + "decision": "Product Owner / macOS Platform Owner", + "accepted_value": "macOS desktop Global PTT priority", + "status": "Accepted (P0 / MVP, permission-UX required)" + }, + { + "id": "DEC-025", + "decision": "Product Owner / Linux Platform Owner", + "accepted_value": "Officially-tested Linux environment", + "status": "Accepted (GNOME on Wayland only)" + }, + { + "id": "DEC-026", + "decision": "Product Owner / UX Owner", + "accepted_value": "Mouse side-button support", + "status": "Accepted (Windows + macOS; Linux portal-dependent)" + }, + { + "id": "DEC-027", + "decision": "Security / Privacy Reviewer", + "accepted_value": "PTT diagnostics privacy posture", + "status": "Accepted (capability + availability only, no key codes)" + }, + { + "id": "DEC-028", + "decision": "Audio Owner / Software Architect", + "accepted_value": "Missed-key-up watchdog", + "status": "Accepted (P0)" + }, + { + "id": "DEC-029", + "decision": "Software Architect / Audio Owner", + "accepted_value": "Flutter global-hotkey packages rejected for PTT", + "status": "Accepted" + }, + { + "id": "DEC-030", + "decision": "Audio Owner / Product Owner", + "accepted_value": "Voice activity detection deferred to P1", + "status": "Accepted (deferred to P1)" + }, + { + "id": "DEC-031", + "decision": "Audio Owner / Product Owner", + "accepted_value": "Missed-key-up watchdog disabled on P0; redesign deferred to P1", + "status": "Accepted (supersedes DEC-028 for P0)" + }, + { + "id": "DEC-032", + "decision": "Android `abiFilters` set during P0 smoke-test cycle", + "accepted_value": "Canonical three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` (per SDD-073 item 4 / SDD-118 item 3) restored 2026-05-18 after the `audiopus_sys` + `cmake-rs` + NDK toolchain-file `ANDROID_ABI` propagation gap was closed via a workspace `[patch.crates-io]` override pinning `cmake` to a fork carrying cmake-rs PR #257", + "status": "**Resolved**" + }, + { + "id": "DEC-032", + "decision": "Build/Toolchain", + "accepted_value": "Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle", + "status": "Resolved (2026-05-18)" + } + ], + "requirements_by_phase": { + "P0": [ + { + "id": "SAD-001", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell", + "verification": "Review, Inspection", + "statement": "The architecture shall use a Flutter App Shell as the top-level software composition root." + }, + { + "id": "SAD-002", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Review, Widget Test", + "statement": "The architecture shall use a Chanora Design System package above Material 3." + }, + { + "id": "SAD-003", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Feature Modules, Design System", + "verification": "Static Inspection", + "statement": "The architecture shall isolate feature screens from direct theme-token construction." + }, + { + "id": "SAD-004", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Unit Test", + "statement": "The architecture shall implement connection-state token mapping in the design system." + }, + { + "id": "SAD-005", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Unit Test", + "statement": "The architecture shall implement voice-state token mapping in the design system." + }, + { + "id": "SAD-006", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Unit Test", + "statement": "The architecture shall implement latency, packet-loss, diagnostics, and error token mapping." + }, + { + "id": "SAD-007", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Widget Test", + "statement": "The architecture shall expose tokens through Flutter theming mechanisms." + }, + { + "id": "SAD-008", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell", + "verification": "Widget Test, Integration Test", + "statement": "The architecture shall provide an Adaptive Shell that owns window-class resolution." + }, + { + "id": "SAD-009", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Adaptive Shell", + "verification": "Integration Test", + "statement": "The architecture shall implement a compact layout branch." + }, + { + "id": "SAD-010", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Adaptive Shell", + "verification": "Integration Test", + "statement": "The architecture shall implement a medium layout branch." + }, + { + "id": "SAD-011", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Adaptive Shell", + "verification": "System Test", + "statement": "The architecture shall implement an expanded layout branch." + }, + { + "id": "SAD-012", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Components, Feature Modules", + "verification": "Widget Test", + "statement": "The architecture shall implement a Connection Status UI component." + }, + { + "id": "SAD-013", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Components, Voice Feature", + "verification": "Widget Test, Integration Test", + "statement": "The architecture shall implement a persistent VoiceBar component." + }, + { + "id": "SAD-014", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Components, Localization", + "verification": "Accessibility Test", + "statement": "The architecture shall implement accessible semantics for critical controls." + }, + { + "id": "SAD-015", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "Widget Test, System Test", + "statement": "The architecture shall implement keyboard focus traversal for desktop and tablet keyboard use." + }, + { + "id": "SAD-016", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Adaptive Shell, Components", + "verification": "Accessibility Test", + "statement": "The architecture shall protect critical controls under increased text scaling." + }, + { + "id": "SAD-017", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Platform Services", + "verification": "Platform Test", + "statement": "The architecture shall centralize safe-area and inset handling." + }, + { + "id": "SAD-018", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Platform Services", + "verification": "Platform Test", + "statement": "The architecture shall model Android back behavior through platform services." + }, + { + "id": "SAD-019", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Platform Services", + "verification": "Platform Test", + "statement": "The architecture shall model iOS navigation, keyboard avoidance, safe area, and haptics through platform services." + }, + { + "id": "SAD-020", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Localization Service", + "verification": "Unit Test, Integration Test", + "statement": "The architecture shall implement a Localization Service for product-owned strings." + }, + { + "id": "SAD-021", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Localization Service, Protocol DTOs, Flutter UI", + "verification": "Integration Test", + "statement": "The architecture shall separate product localization from server-provided content." + }, + { + "id": "SAD-022", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Bridge, Rust Core, Flutter UI", + "verification": "Integration Test", + "statement": "The architecture shall preserve Unicode through protocol, bridge, state, and UI paths." + }, + { + "id": "SAD-023", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Platform Adapter, Bridge", + "verification": "Inspection, Integration Test", + "statement": "The architecture shall isolate non-UTF-8 conversion in boundary adapters." + }, + { + "id": "SAD-024", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Storage", + "verification": "Test, Audit", + "statement": "The architecture shall preserve multilingual content in diagnostics except for intentional redaction." + }, + { + "id": "SAD-025", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "Localization Test", + "statement": "The architecture shall support bidirectional text where the platform text engine supports it." + }, + { + "id": "SAD-026", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Localization Service, Diagnostics UI", + "verification": "Localization Test", + "statement": "The architecture shall centralize locale-aware formatting." + }, + { + "id": "SAD-027", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Localization Service", + "verification": "Inspection, Test", + "statement": "The architecture shall keep diagnostic machine fields language-neutral." + }, + { + "id": "SAD-028", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "UX, Software Engineering", + "verification": "Review", + "statement": "The architecture shall maintain downstream UI/UX and design-system documentation." + }, + { + "id": "SAD-029", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Software Architecture", + "verification": "Inspection", + "statement": "The architecture shall enforce SRS-only source traceability for SAD." + }, + { + "id": "SAD-030", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Software Design", + "verification": "Inspection", + "statement": "The architecture shall enforce SAD-only source traceability for SDD." + }, + { + "id": "SAD-031", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell", + "verification": "Integration Test", + "statement": "The architecture shall initialize theme, localization, and platform services before first feature render." + }, + { + "id": "SAD-032", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, Protocol Adapter", + "verification": "Integration Test", + "statement": "The architecture shall isolate TeamSpeak-compatible protocol integration behind Rust protocol components." + }, + { + "id": "SAD-033", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync", + "verification": "System Test", + "statement": "The architecture shall isolate authoritative server state in Rust Core and state synchronization components." + }, + { + "id": "SAD-034", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Audio", + "verification": "Audio Test", + "statement": "The architecture shall isolate real-time audio processing in the audio subsystem." + }, + { + "id": "SAD-052", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Software Architecture", + "verification": "Review, Inspection", + "statement": "The architecture shall maintain an interface catalog for architecturally significant software interfaces." + }, + { + "id": "SAD-056", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Software Architecture, Bridge, Rust Core, Platform Services", + "verification": "Review, Integration Test", + "statement": "The architecture shall define software interface error-handling responsibilities at the architectural level." + }, + { + "id": "SAD-061", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "iOS Build Configuration, Platform Services", + "verification": "Platform Test, Inspection", + "statement": "The software architecture shall isolate iOS runtime minimum version configuration from feature logic." + }, + { + "id": "SAD-062", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Release Pipeline, iOS Build Configuration", + "verification": "Release Inspection", + "statement": "The software architecture shall treat Apple App Store SDK compliance as a release pipeline and build configuration responsibility." + }, + { + "id": "SAD-063", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Android Build Configuration, Platform Services, Release Pipeline", + "verification": "Platform Test, Release Inspection", + "statement": "The software architecture shall isolate Android runtime minimum version and Play target API compliance in Android build configuration and platform services. The Android minimum runtime baseline is API 28 (Android 9.0) per DEC-004 (Accepted " + }, + { + "id": "SAD-064", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, State Sync, Audio Subsystem, Protocol Adapter", + "verification": "System Test, Review", + "statement": "The software architecture shall model one active connection as the MVP runtime invariant across UI, Rust Core, state synchronization, audio routing, and protocol adapter components." + }, + { + "id": "SAD-065", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Audio, Settings UI", + "verification": "Audio Test", + "statement": "The software architecture shall assign audio processing defaults and capability detection to the audio subsystem and settings presentation layer." + }, + { + "id": "SAD-067", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Storage, Platform Secure Storage", + "verification": "Storage Test, Security Audit", + "statement": "The software architecture shall isolate non-secret local persistence in a database repository layer and secret persistence in platform secure storage services." + }, + { + "id": "SAD-068", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Bridge Facade, Flutter State, Rust Core", + "verification": "Integration Test, Architecture Review", + "statement": "The software architecture shall use a stable typed bridge facade with schema-controlled DTO boundaries between Flutter and Rust." + }, + { + "id": "SAD-069", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Privacy, Release Pipeline", + "verification": "Privacy Review, Security Audit", + "statement": "The software architecture shall exclude automatic telemetry, automatic diagnostic upload, and automatic crash reporting from MVP components and release configuration." + }, + { + "id": "SAD-070", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Software Architecture, Documentation Control", + "verification": "Review, Inspection", + "statement": "The software architecture shall record the product decisions affecting platform baselines, connection scope, audio defaults, audio implementation path, storage, bridge, diagnostics, and crash reporting in the ADR and decision baseline." + }, + { + "id": "SAD-071", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio, Platform Input", + "verification": "Architecture Review, Unit Test", + "statement": "The software architecture shall isolate desktop PTT into a `DesktopPttBackend` trait owned by the audio subsystem, with the active implementation selected at runtime by a `platform_input::select` factory. Only the factory and the audio engi" + }, + { + "id": "SAD-072", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio (Windows)", + "verification": "Platform Test (Windows), Architecture Review", + "statement": "The Windows PTT backend shall be a three-level ladder (`WindowsRawInputBackend` -> `WindowsHookBackend` -> `FocusedPttBackend`). The ladder is evaluated once at audio-engine start; the chosen rung is fixed for the lifetime of that engine an" + }, + { + "id": "SAD-073", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio (macOS)", + "verification": "Platform Test (macOS), Architecture Review", + "statement": "The macOS PTT backend shall be a two-level ladder (`MacOSEventTapBackend` -> `FocusedPttBackend`) with explicit permission state surfaced through `PttCapabilityLevel`. The permission query shall not block the audio-engine start path; an und" + }, + { + "id": "SAD-074", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio (Linux)", + "verification": "Platform Test (Linux, GNOME Wayland), Architecture Review", + "statement": "The Linux PTT backend shall be a two-level ladder (`LinuxGnomeWaylandBackend` using the freedesktop `org.freedesktop.portal.GlobalShortcuts` interface, -> `FocusedPttBackend`). Untested display servers, untested compositors, and missing D-B" + }, + { + "id": "SAD-075", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Audio Test", + "statement": "The audio engine shall expose `AudioTransmitGate`, a thin object that owns the `transmit_active` AtomicBool and exposes `set` and `load` operations only. The Opus encoder feed shall consult `AudioTransmitGate::load()` once per outbound fram" + }, + { + "id": "SAD-076", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Bridge, Audio, Diagnostics", + "verification": "Architecture Review, Privacy Review", + "statement": "The bridge shall expose PTT events through the existing `BridgeEvent` stream, adding a `BridgeEvent::PttCapability { level, backend_id }` variant. The bridge shall never carry raw key codes or scan codes across the FFI boundary; the trait s" + }, + { + "id": "SAD-077", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics", + "verification": "Unit Test, Privacy Review", + "statement": "The diagnostics subsystem shall add a `PttSanitizer` decorator over the `RedactingLogLayer` log sink. The decorator shall scan each record's field set for the well-known names `key_code`, `scan_code`, `virtual_key`, `vk`, `keysym`, `keysym_" + }, + { + "id": "SAD-078", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "UI Review, User Acceptance Test", + "statement": "The Flutter UI shall consume `BridgeEvent::PttCapability` and render a small capability badge in the Voice Bar. When the capability resolves to `L0` on a platform that the user reasonably expected to support Global PTT (for example Windows " + }, + { + "id": "SAD-079", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Integration Test", + "statement": "The audio engine shall own the missed-key-up watchdog as a single tokio task that subscribes to `transmit_active` transitions through a `tokio::sync::watch` channel; on a configured timeout (default 30 s, owner-tunable) without a release ev" + }, + { + "id": "SAD-080", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio (Windows / macOS / Linux), Bridge, Flutter UI", + "verification": "Unit Test, Platform Test, UI Review", + "statement": "The software architecture shall expose a mouse-side-button input class as a first-class member of the cross-platform PTT binding type so the Windows and macOS backends can drive `transmit_active` from `Mouse4` / `Mouse5` events while the Li" + }, + { + "id": "SAD-081", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio, Bridge, Flutter UI", + "verification": "Integration Test, UI Review", + "statement": "The software architecture shall remove the `start_audio` and `stop_audio` bridge calls from the public bridge surface and shall replace them with `voice_join(channel_id) -> Result<(), VoiceError>` and `voice_leave() -> Result<(), VoiceError" + }, + { + "id": "SAD-082", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Integration Test", + "statement": "The software architecture shall add a `ReleaseTailTimer` element to the audio subsystem, owned by the `PttController` and acting as an adapter between the `DesktopPttBackend` `transmit` signal and the `AudioTransmitGate::set()` call. On key" + }, + { + "id": "SAD-083", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Integration Test", + "statement": "The software architecture shall add a `TransmitModeSelector` element owned by the audio engine that consults the current `TransmitMode` from the identity store on every state evaluation. In `Ptt` mode the selector defers to the `PttControll" + }, + { + "id": "SAD-084", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Audio Adapter (Android)", + "verification": "Platform Test (Android), Audio Test, Architecture Review", + "statement": "The software architecture shall allocate Android in-call audio-mode management to an `AndroidAudioModeController` element inside the Android platform audio adapter, owned by the audio subsystem and bound to the voice-session lifecycle rathe" + }, + { + "id": "SAD-085", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Platform Services (Android Permission Adapter), Audio Subsystem, Flutter UI, Bridge", + "verification": "Platform Test (Android), Integration Test, Privacy Review", + "statement": "The software architecture shall extend the Android platform permission adapter (within Platform Services) to own the runtime `RECORD_AUDIO` permission flow on behalf of the audio subsystem, and shall recognise listen-only operation (`captur" + }, + { + "id": "SAD-086", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Platform Services (Android), Audio Subsystem", + "verification": "Platform Test (Android), Integration Test", + "statement": "The software architecture shall allocate Android foreground-service behaviour for active voice sessions to an `AndroidVoiceForegroundService` element owned by the Android platform services container, bound to the voice-session lifecycle (st" + }, + { + "id": "SAD-087", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "macOS Build Configuration, Platform Services (macOS), Release Pipeline", + "verification": "Platform Test (macOS), Release Inspection, Architecture Review", + "statement": "The software architecture shall isolate macOS runtime baseline configuration, universal-binary packaging, framework layout, and CocoaPods integration in macOS build configuration and platform services, parallel to SAD-061 (iOS runtime) and " + }, + { + "id": "SAD-088", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem (`chanora_audio` crate, `benches/` directory; extends SAD-034)", + "verification": "Inspection (bench-function presence and metric coverage), Bench Run (criterion executes on the host runner), Architecture Review", + "statement": "The software architecture shall add a `criterion`-based realtime-audio benchmark harness as a first-class architectural element of the `chanora_audio` crate, extending the existing audio-subsystem allocation in SAD-034. The harness lives in" + }, + { + "id": "SAD-089", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem (`chanora_audio` crate, `benches/baselines/` subdirectory; output sink of SAD-088)", + "verification": "Inspection (file path, schema), Bench Run (file is regenerable end-to-end)", + "statement": "The software architecture shall pin the baseline-JSON on-disk path for the SAD-088 harness to `crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json`, a single deterministic file per host architecture under the crate's `bench" + }, + { + "id": "SAD-090", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Build, Release, Operations (`.github/workflows/bench-advisory.yml`; extends SAD-037 — CI surface, SE-18 realization)", + "verification": "Inspection (workflow trigger / runner / non-blocking exit), CI Dry Run (synthetic PR exercises markdown rendering end-to-end), Architecture Review", + "statement": "The software architecture shall add an advisory CI workflow file `.github/workflows/bench-advisory.yml` to the build/release/operations allocation (extending SAD-037), realizing the SRS-218 advisory-reporting workflow. Triggers: `pull_reque" + }, + { + "id": "SAD-091", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Build, Release, Operations (`.github/workflows/bench-baseline-update.yml`; extends SAD-037 — CI surface, SE-18 realization; sole writer of SAD-089)", + "verification": "Inspection (trigger is `workflow_dispatch` only; commit destination is SAD-089's path), CI Dry Run (manual invocation regenerates baseline end-to-end), Architecture Review", + "statement": "The software architecture shall add a separate baseline-update CI workflow file `.github/workflows/bench-baseline-update.yml` to the build/release/operations allocation (extending SAD-037), realizing the SRS-218 clause 5 baseline-update-iso" + }, + { + "id": "SAD-092", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync", + "verification": "Architecture Review, Integration Test, System Test", + "statement": "The software architecture shall assign authoritative current-channel membership ownership to Rust Core and the State Synchronization Engine. The authoritative current channel is the last channel membership state confirmed by Rust Core from " + }, + { + "id": "SAD-093", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Flutter State, Bridge Facade, Rust Core", + "verification": "UI Test, Integration Test, System Test", + "statement": "The software architecture shall model a channel-join request as user intent crossing the bridge, not as an immediate local membership mutation. Flutter may expose the requested target channel as a non-authoritative pending target for visual" + }, + { + "id": "SAD-094", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync, Protocol Adapter, Bridge Facade, Diagnostics, Flutter State", + "verification": "Integration Test, System Test, Diagnostics Review", + "statement": "The software architecture shall preserve the previous authoritative current channel on channel-join failure or timeout and shall clear the non-authoritative pending target through Rust Core / State Sync events. Join denial, network/protocol" + }, + { + "id": "SAD-095", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "State Sync, Rust Core, Protocol Adapter, Bridge Facade, Flutter State, Verification Support", + "verification": "Architecture Review, SDD Inspection, Unit Test, Integration Test, System Test", + "statement": "The downstream SDD shall define deterministic State Sync handling for channel-join edge cases while preserving the SAD-092 authoritative ownership boundary. Required SDD coverage includes duplicate join requests, a different target requeste" + }, + { + "id": "SAD-096", + "source": "architecture/sad.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync, Protocol Adapter, Bridge Facade, Diagnostics, Verification Support", + "verification": "Architecture Review, Integration Test, System Test, Diagnostics Review", + "statement": "The software architecture shall expose an explicit Protocol Adapter command seam for leaving the current voice channel / moving the current client out of channel membership; downstream design may name the seam `leave_channel`, `move_out_of_" + }, + { + "id": "SDD-001", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Integration Test", + "statement": "`ChanoraApp` shall initialize theme, localization, platform services, and routing before rendering feature content." + }, + { + "id": "SDD-002", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraThemeFactory` shall create Material 3 ThemeData for light and dark modes." + }, + { + "id": "SDD-003", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraThemeFactory` shall support seed-color replacement without feature-screen changes." + }, + { + "id": "SDD-004", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraSemanticColors` shall define connection state colors independently from base ColorScheme." + }, + { + "id": "SDD-005", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraSemanticColors` shall define voice state colors independently from base ColorScheme." + }, + { + "id": "SDD-006", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraSemanticColors` shall define latency, packet-loss, diagnostics, and error semantic roles." + }, + { + "id": "SDD-007", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraSpacing` shall define reusable spacing values for compact, medium, and expanded layouts." + }, + { + "id": "SDD-008", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraShape` shall define reusable corner and shape values for cards, buttons, panels, badges, and sheets." + }, + { + "id": "SDD-009", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraMotion` shall define standard durations and reduced-motion behavior." + }, + { + "id": "SDD-010", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Static Inspection", + "statement": "Feature widgets shall read tokens through Flutter theme accessors only." + }, + { + "id": "SDD-011", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ChanoraAdaptiveShell` shall classify window width into compact, medium, or expanded." + }, + { + "id": "SDD-012", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ChanoraAdaptiveShell` shall dispatch to `CompactShell`, `MediumShell`, or `ExpandedShell`." + }, + { + "id": "SDD-013", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`CompactShell` shall render single-column content and mobile navigation." + }, + { + "id": "SDD-014", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`MediumShell` shall render side navigation or navigation rail behavior." + }, + { + "id": "SDD-015", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ExpandedShell` shall render persistent pane regions and persistent voice controls." + }, + { + "id": "SDD-016", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`ConnectionStatusPresenter` shall provide non-color-only connection state presentation data." + }, + { + "id": "SDD-017", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ChanoraVoiceBar` shall expose mute, deaf, push-to-talk, input meter, current channel, and latency properties." + }, + { + "id": "SDD-018", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ChanoraVoiceBar` shall remain renderable as a persistent shell slot." + }, + { + "id": "SDD-019", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ChanoraChannelTree` shall support hierarchical channel nodes and client rows." + }, + { + "id": "SDD-020", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ChanoraChannelTree` shall support selected state, expansion state, join intent, and context-menu intent." + }, + { + "id": "SDD-021", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test, Accessibility Test", + "statement": "`ChanoraClientTile` shall display client status with text, icon, and semantic state cues." + }, + { + "id": "SDD-022", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test, Accessibility Test", + "statement": "`ChanoraStatusBadge` shall expose visible text or icon and accessibility semantics." + }, + { + "id": "SDD-023", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "`ChanoraAudioMeter` shall display audio input level and support reduced-motion fallback." + }, + { + "id": "SDD-024", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Accessibility Test", + "statement": "All icon-only buttons shall provide localized semantic labels." + }, + { + "id": "SDD-025", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "Focusable components shall define focus order and visible focus style." + }, + { + "id": "SDD-026", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Accessibility Test", + "statement": "Adaptive shell panes shall support increased text scale without losing critical actions." + }, + { + "id": "SDD-027", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test", + "statement": "`PlatformInsetsService` shall provide safe area, keyboard inset, display cutout, and desktop inset data." + }, + { + "id": "SDD-028", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test, Widget Test", + "statement": "`BackIntentService` shall normalize Android/system back behavior into route-level intents." + }, + { + "id": "SDD-029", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test", + "statement": "`HapticsService` shall expose platform-aware haptic feedback operations." + }, + { + "id": "SDD-030", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test", + "statement": "`KeyboardAvoidancePolicy` shall prevent critical controls from being covered by virtual keyboards." + }, + { + "id": "SDD-031", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`LocalizationService` shall load product string resources for the active locale." + }, + { + "id": "SDD-032", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`LocalizationService` shall fall back to the baseline English locale when a key is missing." + }, + { + "id": "SDD-033", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "`LocalizationService` shall allow new locale resources without changes to protocol, audio, state, or storage modules." + }, + { + "id": "SDD-034", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Integration Test", + "statement": "`ContentTextAdapter` shall pass through server-provided names and messages without translation." + }, + { + "id": "SDD-035", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Integration Test", + "statement": "`UnicodeTextBoundary` shall validate cross-layer text DTOs as UTF-8 compatible strings." + }, + { + "id": "SDD-036", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "Protocol-boundary conversion shall be implemented only in protocol adapter code." + }, + { + "id": "SDD-037", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "Platform-boundary conversion shall be implemented only in platform adapter code." + }, + { + "id": "SDD-038", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Test, Audit", + "statement": "Diagnostics export shall preserve Unicode after redaction." + }, + { + "id": "SDD-039", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Localization Test", + "statement": "Bidi text rendering shall use Flutter text widgets and directionality behavior compatible with platform support." + }, + { + "id": "SDD-040", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "Locale-aware formatting shall be centralized in localization utilities." + }, + { + "id": "SDD-041", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "Diagnostics event keys shall remain stable and language-neutral." + }, + { + "id": "SDD-042", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Review", + "statement": "UI/UX supporting documents shall be versioned with the software architecture baseline." + }, + { + "id": "SDD-043", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "SAD source validation shall reject direct lower-layer source fields." + }, + { + "id": "SDD-044", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "SDD source validation shall reject direct non-SAD source fields." + }, + { + "id": "SDD-045", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Integration Test", + "statement": "Theme/localization/platform initialization shall be tested before first feature render." + }, + { + "id": "SDD-046", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Integration Test", + "statement": "Bridge facade DTOs shall expose only stable UI-safe data structures." + }, + { + "id": "SDD-047", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "Core event mapping shall convert Rust Core events into feature view models." + }, + { + "id": "SDD-048", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "Audio state view models shall separate UI state from real-time audio processing." + }, + { + "id": "SDD-049", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "Storage access shall be isolated from feature widgets behind repository or service APIs." + }, + { + "id": "SDD-050", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Widget Test", + "statement": "Diagnostics UI shall obtain localized display text from diagnostics presentation services." + }, + { + "id": "SDD-066", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection", + "statement": "`SoftwareUnitTraceChecker` shall verify that SDD items link directly to SAD IDs only." + }, + { + "id": "SDD-071", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Inspection, Platform Test", + "statement": "`IOSBuildConfig` shall define the iOS minimum runtime deployment target as iOS 13 unless an approved platform change raises it." + }, + { + "id": "SDD-072", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Release Inspection", + "statement": "`IOSReleaseGate` shall verify that App Store Connect upload builds use Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later on or after 2026-04-28 unless Apple publishes a newer applicable upload requirement." + }, + { + "id": "SDD-073", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test, Release Inspection, Build Test", + "statement": "`AndroidBuildConfig` shall define Android API 28 (Android 9.0 Pie) as the minimum Android runtime baseline per DEC-004 and shall expose target SDK configuration for release inspection. This supersedes the prior API 24 recommendation and is " + }, + { + "id": "SDD-074", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, System Test", + "statement": "`ConnectionSessionManager` shall enforce a single active server connection in MVP." + }, + { + "id": "SDD-075", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Audio Test", + "statement": "`AudioProcessingSettings` shall default AEC, AGC, Noise Suppression, and High-Pass Filter to enabled where supported and stable." + }, + { + "id": "SDD-077", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Storage Test", + "statement": "`LocalDatabaseRepository` shall persist non-secret local state through SQLite or an equivalent embedded database abstraction." + }, + { + "id": "SDD-078", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Security Audit", + "statement": "`SecretStorageRepository` shall persist secrets only through platform secure storage service interfaces." + }, + { + "id": "SDD-079", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Integration Test, Inspection", + "statement": "`TypedBridgeFacade` shall define generated or schema-controlled DTOs for Flutter/Rust commands, results, and events." + }, + { + "id": "SDD-080", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Privacy Review, Security Audit", + "statement": "`DiagnosticsPrivacyGate` shall disable automatic diagnostic upload, telemetry upload, and crash reporting in MVP release configuration unless an approved decision enables them." + }, + { + "id": "SDD-081", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Inspection", + "statement": "`DesktopPttBackend` shall be a Rust trait in `chanora_audio::ptt` exposing `fn capability(&self) -> PttCapabilityLevel`, `fn backend_id(&self) -> &'static str`, `fn start(&mut self, gate: Arc, binding: PttBinding) -> Resu" + }, + { + "id": "SDD-082", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`PttCapabilityLevel` shall be a plain Rust enum (`L0Focused`, `L1GlobalShortcut`, `L2GlobalHoldToTalk`, `L3GlobalWithMouseButtons`, `L4DeviceAware`) with a public `as_str(&self) -> &'static str` mapping for diagnostics. `L4DeviceAware` is r" + }, + { + "id": "SDD-083", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Windows), Unit Test", + "statement": "`WindowsRawInputBackend` shall use the `RegisterRawInputDevices` Win32 API targeting `HID_USAGE_PAGE_GENERIC` keyboard and mouse usages, run a dedicated message-only window on its own OS thread, and forward only sanitised binding-match resu" + }, + { + "id": "SDD-084", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Windows), Unit Test", + "statement": "`WindowsHookBackend` shall be used only when Raw Input registration fails. It installs `WH_KEYBOARD_LL` and `WH_MOUSE_LL` hooks on its dedicated thread; the hook callbacks compare against the active binding and call `AudioTransmitGate::set`" + }, + { + "id": "SDD-085", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (macOS), User Acceptance Test", + "statement": "`MacOSEventTapBackend` shall create a `CGEventTap` filtered to keyboard and mouse-button events, attached to the main run loop with an explicit retain. The tap callback shall consult the active binding and call `AudioTransmitGate::set` only" + }, + { + "id": "SDD-086", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Linux, GNOME Wayland), Unit Test", + "statement": "`LinuxGnomeWaylandBackend` shall call `CreateSession`, `BindShortcuts`, and listen for `Activated` / `Deactivated` signals on the freedesktop `org.freedesktop.portal.GlobalShortcuts` D-Bus interface. Binding capture shall use the portal's o" + }, + { + "id": "SDD-087", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, UI Review", + "statement": "`FocusedPttBackend` shall integrate with Flutter's keyboard / pointer event stream via the existing `Listener` widget path and the bridge `set_ptt` command. Reports `PttCapabilityLevel::L0Focused` and `backend_id = \"focused\"`." + }, + { + "id": "SDD-088", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Integration Test", + "statement": "`PttController` shall sit in `chanora_core::ptt` and own a `Box`, a clone of `AudioTransmitGate`, a `watch::Sender` for live publication to the bridge, and a `tokio::sync::Mutex` over the active `P" + }, + { + "id": "SDD-089", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test", + "statement": "`AudioTransmitGate` shall be `Arc` wrapping a `tokio::sync::watch::Sender` and an internal `AtomicBool`. `set(v)` updates both atomically; `load()` reads the atomic; `subscribe()` hands out a `watch::Receiver` for t" + }, + { + "id": "SDD-090", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Privacy Review", + "statement": "`PttSanitizer` shall implement `tracing_subscriber::Layer` and decorate the existing `RedactingLogLayer`. Records whose field names match any of the following banned field names shall be dropped before `on_event` reaches the wrapped sink: `" + }, + { + "id": "SDD-091", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "UI Review, User Acceptance Test", + "statement": "`PttCapabilityBadge` shall be a Flutter widget rendered inside the Voice Bar, subscribed to the FRB stream of `BridgeEvent::PttCapability`. The widget shall map each enum value to a short user-facing label and shall render an info icon that" + }, + { + "id": "SDD-092", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Integration Test", + "statement": "`MissedKeyUpWatchdog` shall be a tokio task spawned by the audio engine that holds the `watch::Receiver` from `AudioTransmitGate::subscribe()`. On each transition from `false` to `true` the task records the timestamp; on each `true ->" + }, + { + "id": "SDD-093", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Platform Test (Windows / macOS / Linux), UI Review", + "statement": "`PttInputClass` shall be a Rust enum in `chanora_audio::ptt_backends` with variants `None`, `Keyboard`, and `MouseSideButton`. The enum is the only carrier of the user's bound input class across the audio + bridge + Flutter boundary; its `a" + }, + { + "id": "SDD-094", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Integration Test, UI Review", + "statement": "`chanora_bridge::voice::voice_join(channel_id: ChannelId) -> Result<(), VoiceError>` and `chanora_bridge::voice::voice_leave() -> Result<(), VoiceError>` shall be the only public-bridge voice lifecycle calls. Internally `chanora_audio::engi" + }, + { + "id": "SDD-095", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, UI Review", + "statement": "`chanora_audio::TransmitMode` shall be a `#[repr(u8)]` Rust enum with variants `Ptt = 0`, `Continuous = 1`, `VoiceActivity = 2`. Persistence shall be provided by `chanora_storage::IdentityStore::set_transmit_mode(&self, mode: TransmitMode)`" + }, + { + "id": "SDD-096", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test, Integration Test", + "statement": "`chanora_audio::release_tail::ReleaseTailTimer` shall be a tokio-task-owning struct exposing `arm(&self, gate: AudioTransmitGate, tail_ms: u32)`, `key_down(&self)`, `key_up(&self)`, and `cancel(&self)`. Internally the struct shall hold a `t" + }, + { + "id": "SDD-097", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "UI Review, Widget Test", + "statement": "`apps/chanora_flutter/lib/widgets/voice_bar.dart` shall replace the existing `_AudioControls` widget in `apps/chanora_flutter/lib/main.dart` as the rendering surface for voice state. Its input shall be the `BridgeEvent::VoiceState` stream; " + }, + { + "id": "SDD-098", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test, Release Inspection", + "statement": "`IOSAudioSessionConfig` shall be a Swift unit that configures `AVAudioSession` with category `.playAndRecord`, mode `.default`, and options `.defaultToSpeaker | .allowBluetoothHFP | .allowBluetoothA2DP`. `setCategory` shall be called from `" + }, + { + "id": "SDD-099", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test, Demo", + "statement": "`IOSPermissionRequester` shall call `AVAudioSession.sharedInstance().requestRecordPermission` approximately 1 second after app launch. The permission result shall be logged. A denied permission shall surface as an audio engine failure at `v" + }, + { + "id": "SDD-100", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test TC-9.3", + "statement": "Swift shall observe `AVAudioSession.routeChangeNotification`. On route change where `reason == .oldDeviceUnavailable` or `reason == .newDeviceAvailable`, Swift shall call the Rust bridge method `handleRouteChange()`. The Rust side shall inv" + }, + { + "id": "SDD-101", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test TC-9.1, TC-9.2", + "statement": "Swift shall observe `AVAudioSession.interruptionNotification`. On `.began` the audio shall pause via `VPIO.stop()`. On `.ended` with `shouldResume == true` the audio shall resume via `VPIO.start()`. A phone call shall yield the audio sessio" + }, + { + "id": "SDD-102", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test TC-8", + "statement": "`Info.plist` shall contain `UIBackgroundModes = [audio]`. The VPIO unit shall continue running when the app backgrounds. iOS shall show the red microphone indicator in the status bar while background audio is active. `AVAudioSession` shall " + }, + { + "id": "SDD-103", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test TC-3, TC-12", + "statement": "iOS P0 shall use `FocusedPttBackend` only. There shall be no `DesktopPttBackend` ladder on iOS. `PttCapabilityLevel` shall always be `L0Focused`. The UI shall render an on-screen PTT button. A capability badge shall explain the iOS limitati" + }, + { + "id": "SDD-104", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test, Audio Test", + "statement": "`VoiceProcessingIO` AudioUnit shall provide hardware AEC, AGC, and noise suppression. These shall always be engaged and shall not be user-disableable. The Flutter audio processing settings UI shall display these as hardware-enabled with swi" + }, + { + "id": "SDD-105", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Android), Inspection", + "statement": "`AndroidJniBootstrap` shall own the JNI initialisation surface for `chanora_bridge` on Android, covering native library load, `JNI_OnLoad` `JavaVM*` capture, and `initChanoraContext(Context)` invocation. This item back-fills the existing im" + }, + { + "id": "SDD-106", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Android), Integration Test, UI Review", + "statement": "`AndroidPermissionRequester` shall own the Android runtime acquisition of `RECORD_AUDIO` on behalf of the audio subsystem and shall expose the current permission state to the audio engine and to Flutter through the existing `BridgeEvent` st" + }, + { + "id": "SDD-107", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Android), Integration Test, Release Inspection", + "statement": "`AndroidVoiceForegroundService` shall own the Android foreground service lifecycle for active voice sessions. It shall be started by the audio engine on first `voice_join` and stopped on the last `voice_leave` or on engine `shutdown_if_idle" + }, + { + "id": "SDD-108", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Android), Unit Test, Audio Test", + "statement": "`AndroidAudioModeController` shall own engagement and release of Android's in-call audio mode for the voice subsystem. It shall snapshot the prior `AudioManager.getMode()` on first engage and restore it on last release, shall be reference-c" + }, + { + "id": "SDD-110", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Android), UI Review", + "statement": "`AndroidPttCapability` shall pin Android P0 to `FocusedPttBackend` only. There shall be no `DesktopPttBackend` ladder on Android, no system-wide global key hook, and no global accessibility-service-based PTT. `PttCapabilityLevel` shall alwa" + }, + { + "id": "SDD-111", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test (Rust), Platform Test (Android), Build Verification (cross-platform `cargo build` for android / ios / desktop targets)", + "statement": "`AndroidVoiceAudioBackend` shall be the Android-side implementation of a new platform-abstracted voice-audio capture+playback element. The cross-platform abstraction shall be expressed as a Rust trait — provisionally `MobileVoiceAudioBacken" + }, + { + "id": "SDD-112", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test (Rust, config-validation paths), Platform Test (Android, achieved-value recording)", + "statement": "`AndroidVoiceStreamConfig` shall be the immutable, validated configuration passed by the audio engine into `android_voice_unit::AndroidVoiceUnit::open()` (per SDD-111). It shall encode the AAudio / Oboe stream-construction parameters that S" + }, + { + "id": "SDD-113", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Platform Test (Android, device-matrix from SDD-116), Unit Test (Rust, fallback-path branch coverage)", + "statement": "`AndroidHardwareAudioEffects` shall be the element responsible for engaging the Android platform hardware voice-audio effects — `AcousticEchoCanceler`, `NoiseSuppressor`, `AutomaticGainControl` — on the active microphone capture session, an" + }, + { + "id": "SDD-114", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Manifest Inspection (CI), Platform Test (Android)", + "statement": "`AndroidVoiceManifestRequirements` shall enumerate, at the SDD layer, the Android manifest declarations required for the voice audio backend (SDD-111..SDD-113) and the foreground-service hosting (SDD-107). This unit is a back-fill of declar" + }, + { + "id": "SDD-115", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Integration Test (Rust + Android), Platform Test (Android, device-matrix from SDD-116)", + "statement": "`AndroidVoiceLifecycleSequencing` shall fix the sequencing of voice-session lifecycle operations across the elements introduced in SDD-107 (foreground service), SDD-108 (audio mode controller), SDD-111 (voice audio backend), and SDD-113 (ha" + }, + { + "id": "SDD-116", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Aggregation — this SDD is itself a contract for verification engineers; the per-case verification is owned by SWE4-UV / SWE5-IV / SWE6-SV ranges cross-linked below.", + "statement": "`AndroidVoiceVerificationMatrix` shall specify the minimum Android device matrix that the SDD-111..SDD-115 implementation must be exercised against before the implementation can be declared verified for the purposes of closing risk RISK-AUD" + }, + { + "id": "SDD-118", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Build-system Test (Gradle task wiring, up-to-date semantics), Platform Test (Android — verify per-ABI `.so` present in produced AAB / APK and loadable per SDD-105), Unit Test (preflight failure-mode messages)", + "statement": "`AndroidBridgeBuildAutomation` shall specify how the `chanora_bridge` Rust cdylib is produced and staged for the Android build automatically, without manual `cargo-ndk` invocations and without environment mutation. This unit complements SDD" + }, + { + "id": "SDD-119", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Build-system Test (CocoaPods integration on a clean derived-data state), Platform Test (iOS device build, macOS desktop build, both with `chanora_bridge` symbols resolving at runtime).", + "statement": "`iOSAndMacOSBridgeBuildAutomation` shall record, as a documentation-after-code back-fill, the existing CocoaPods-podspec-driven automation that builds the `chanora_bridge` Rust cdylib for iOS and macOS and embeds the result as an `@rpath`-b" + }, + { + "id": "SDD-121", + "source": "architecture/sdd.md", + "stage": "P0 / MVP", + "allocation": "", + "verification": "Unit Test (reducer transition table), Integration Test (bridge + protocol adapter seams), Widget Test (pending visual state), Fault-Injection Test (timeout/reconnect/stale outcome)", + "statement": "`chanora_state::channel_join` shall own the single deterministic reducer for user-initiated channel-join pending state, authoritative current-channel membership, and reconnect/snapshot reconciliation. Flutter and `chanora_bridge` shall send" + }, + { + "id": "SRS-001", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review", + "statement": "The software requirements specification shall define software requirements derived from the approved Chanora SysDes baseline." + }, + { + "id": "SRS-002", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Inspection", + "statement": "Each software requirement shall have a unique `SRS-XXX` identifier, type, stage, software allocation, source SysDes link, verification method, acceptance criteria, and feasibility analysis." + }, + { + "id": "SRS-003", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review", + "statement": "The software requirements shall be structured by software component and cross-cutting concern to support allocation to the software team." + }, + { + "id": "SRS-004", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Inspection", + "statement": "The software requirements shall be prioritized using P0 / MVP, P1 / Beta, P2 / Production, and P3 / Future stage labels." + }, + { + "id": "SRS-005", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Inspection", + "statement": "The software requirements shall maintain bidirectional traceability to SysDes design items only; upstream system-requirement coverage shall be inherited through the approved SysDes allocation baseline." + }, + { + "id": "SRS-006", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review", + "statement": "The software requirements shall analyze impact on the operating environment for OS services, audio hardware, network connectivity, external compatible servers, secure storage, deployment, and mobile lifecycle constraints." + }, + { + "id": "SRS-007", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review", + "statement": "The agreed SRS baseline shall be communicated to SAD, SDD, implementation, and verification authors." + }, + { + "id": "SRS-008", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Application Container", + "verification": "Review", + "statement": "The software shall be implemented as a cross-platform client application and shall not be implemented or described as an operating system." + }, + { + "id": "SRS-009", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Application Container, Rust Core", + "verification": "Review, System Test", + "statement": "The software shall operate without requiring Chanora-operated backend infrastructure for MVP voice, channel, and text operation." + }, + { + "id": "SRS-010", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Application Container, Protocol Adapter", + "verification": "Inspection", + "statement": "The software shall not implement TeamSpeak-compatible server hosting functionality in MVP." + }, + { + "id": "SRS-011", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "All Software Components", + "verification": "Inspection", + "statement": "The software shall use a layered structure that separates Flutter UI, Flutter State, Bridge, Rust Core, Protocol Adapter, State Sync, Audio, Storage, Diagnostics, and Platform Adapters." + }, + { + "id": "SRS-012", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Audio Subsystem", + "verification": "Inspection, Performance Test", + "statement": "The software shall keep real-time audio processing outside Flutter UI." + }, + { + "id": "SRS-013", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, Platform Adapters", + "verification": "Build Test", + "statement": "The software shall support Windows, macOS, Linux, iOS, and Android through shared Flutter UI, shared Rust Core, and platform-specific adapters." + }, + { + "id": "SRS-014", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters", + "verification": "Inspection, Integration Test", + "statement": "The software shall isolate OS-specific permissions, audio routing, lifecycle, secure storage, notification, and packaging behavior behind platform adapter interfaces." + }, + { + "id": "SRS-015", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, State Sync, Audio, Diagnostics, Platform Adapters", + "verification": "Inspection, Demo", + "statement": "The software shall provide verification hooks for protocol, state, audio, security, packaging, and platform behavior." + }, + { + "id": "SRS-016", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Application Container", + "verification": "Integration Test", + "statement": "The software shall provide an application container that initializes Flutter UI, Bridge, Rust Core, platform adapters, storage, and diagnostics in a deterministic startup sequence." + }, + { + "id": "SRS-017", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "UI Test", + "statement": "The software shall provide a home or entry screen for manual connection, recent servers, and saved bookmarks." + }, + { + "id": "SRS-018", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "UI Test", + "statement": "The software shall provide a manual connection UI that accepts host or IP address, port, nickname, and optional server password." + }, + { + "id": "SRS-019", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Flutter State", + "verification": "UI Test, System Test", + "statement": "The software shall display connection states including Disconnected, Connecting, Synchronizing, Connected, Reconnecting, and Failed or equivalent user-safe states." + }, + { + "id": "SRS-020", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Flutter State", + "verification": "UI Test, System Test", + "statement": "The software shall display a server channel tree derived from the Rust Core snapshot and delta events." + }, + { + "id": "SRS-021", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Flutter State", + "verification": "UI Test, System Test", + "statement": "The software shall display online clients in their channels and update the display after client join, leave, and move events." + }, + { + "id": "SRS-022", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Flutter State", + "verification": "UI Test", + "statement": "The software shall visually identify the current user and current channel when the data is available from Rust Core." + }, + { + "id": "SRS-023", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Bridge, Rust Core", + "verification": "System Test", + "statement": "The software shall provide a channel join interaction that sends a join command through the Bridge and waits for Rust Core or protocol confirmation before treating the join as authoritative." + }, + { + "id": "SRS-024", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Bridge, Rust Core", + "verification": "UI Test, System Test", + "statement": "The software shall provide channel text chat UI for message display and message input." + }, + { + "id": "SRS-025", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Audio Subsystem", + "verification": "UI Test, System Test", + "statement": "The software shall provide a persistent voice control surface for microphone mute, output deaf, push-to-talk state, input level, and current channel." + }, + { + "id": "SRS-026", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Audio Subsystem, Storage", + "verification": "UI Test", + "statement": "The software shall provide an audio settings UI for input device, output device, Echo Canceller, Automatic Gain Control, Noise Suppression, High-Pass Filter, and related defaults." + }, + { + "id": "SRS-027", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Platform Adapters", + "verification": "UI Test, Privacy Review", + "statement": "The software shall provide permission explanation UI before requesting microphone, notification, or mobile foreground-service related permissions where platform guidelines allow." + }, + { + "id": "SRS-029", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Flutter State", + "verification": "Inspection", + "statement": "The Flutter UI shall not directly invoke `tsclientlib`, access raw protocol types, or own authoritative server state." + }, + { + "id": "SRS-030", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter State", + "verification": "Inspection, UI Test", + "statement": "The Flutter UI shall subscribe to UI-safe core events and reduce them into presentation state only." + }, + { + "id": "SRS-031", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge Layer", + "verification": "Integration Test", + "statement": "The software shall provide a typed Flutter-Rust Bridge API for connection, channel, chat, voice, settings, storage, and diagnostics commands." + }, + { + "id": "SRS-032", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge Layer, Rust Core", + "verification": "Integration Test", + "statement": "The Bridge shall expose long-lived event streams from Rust Core to Flutter for connection, snapshot, delta, chat, voice, audio device, error, and diagnostic events." + }, + { + "id": "SRS-033", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge Layer", + "verification": "Inspection, Integration Test", + "statement": "The Bridge shall serialize and deserialize only bridge-safe DTOs and shall not expose Rust internal references or raw protocol library objects." + }, + { + "id": "SRS-034", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge Layer, Rust Core", + "verification": "Integration Test", + "statement": "The Bridge shall map Rust Core errors into user-safe Flutter error DTOs." + }, + { + "id": "SRS-035", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge Layer, Rust Core", + "verification": "Performance Test", + "statement": "The Bridge shall execute commands asynchronously and shall not block the Flutter UI thread during network, storage, or audio operations." + }, + { + "id": "SRS-036", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core", + "verification": "Unit Test, Integration Test", + "statement": "The Rust Core shall own authoritative connection lifecycle and server state for each active connection." + }, + { + "id": "SRS-037", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core", + "verification": "Inspection, Unit Test", + "statement": "The Rust Core shall manage connection actors or equivalent isolated execution contexts for connection-specific commands and events." + }, + { + "id": "SRS-038", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, Bridge", + "verification": "Integration Test", + "statement": "The Rust Core shall expose connect, disconnect, reconnect, join channel, send message, audio control, settings, bookmark, identity, and diagnostics commands to the Bridge." + }, + { + "id": "SRS-039", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core", + "verification": "Inspection", + "statement": "The Rust Core shall coordinate protocol, state synchronization, audio, storage, diagnostics, and platform adapter interfaces without leaking implementation details to Flutter." + }, + { + "id": "SRS-040", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync", + "verification": "Unit Test, System Test", + "statement": "The Rust Core shall emit connection status events for Connecting, Synchronizing, Connected, Reconnecting, Disconnected, and failure states." + }, + { + "id": "SRS-041", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core", + "verification": "System Test", + "statement": "The Rust Core shall suppress automatic reconnect after user-triggered disconnect." + }, + { + "id": "SRS-042", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, Protocol Adapter, State Sync", + "verification": "System Test", + "statement": "The Rust Core shall apply reconnect policy after recoverable network or protocol failures." + }, + { + "id": "SRS-043", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync", + "verification": "System Test, Event Replay Test", + "statement": "The Rust Core shall rebuild server state from a fresh snapshot after reconnect succeeds." + }, + { + "id": "SRS-044", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter", + "verification": "Inspection", + "statement": "The Protocol Adapter shall be the only software component that directly depends on `tsclientlib`." + }, + { + "id": "SRS-045", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Rust Core", + "verification": "Protocol Integration Test", + "statement": "The Protocol Adapter shall connect to TeamSpeak 3-compatible servers through `tsclientlib` using user-provided host, port, nickname, identity, and optional password." + }, + { + "id": "SRS-046", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, State Sync", + "verification": "Protocol Integration Test", + "statement": "The Protocol Adapter shall fetch server information, channel list, client list, and current-user information needed to build the initial snapshot." + }, + { + "id": "SRS-047", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, State Sync", + "verification": "Unit Test, Integration Test", + "statement": "The Protocol Adapter shall translate raw `tsclientlib` events into internal protocol events." + }, + { + "id": "SRS-048", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Rust Core", + "verification": "Unit Test, Integration Test", + "statement": "The Protocol Adapter shall translate protocol errors into normalized Chanora protocol errors." + }, + { + "id": "SRS-049", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter", + "verification": "Protocol Integration Test", + "statement": "The Protocol Adapter shall implement channel join commands and report success or failure to Rust Core." + }, + { + "id": "SRS-050", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter", + "verification": "Protocol Integration Test", + "statement": "The Protocol Adapter shall implement channel text message send and receive paths." + }, + { + "id": "SRS-051", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Audio Subsystem", + "verification": "Protocol Integration Test, Audio Test", + "statement": "The Protocol Adapter shall implement voice packet send and receive paths required by the audio subsystem." + }, + { + "id": "SRS-052", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Diagnostics", + "verification": "Demo", + "statement": "The Protocol Adapter shall expose protocol-probe diagnostics for connection, snapshot, event, text, and voice compatibility." + }, + { + "id": "SRS-054", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync", + "verification": "Unit Test", + "statement": "The State Synchronization Engine shall maintain a connection state model containing connection status, server info, current user, channels, clients, channel tree, permissions, chat state, and voice state where available." + }, + { + "id": "SRS-055", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync", + "verification": "Unit Test, Integration Test", + "statement": "The State Synchronization Engine shall produce a full snapshot event after initial synchronization." + }, + { + "id": "SRS-056", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync", + "verification": "Unit Test", + "statement": "The State Synchronization Engine shall apply live server events as deterministic deltas." + }, + { + "id": "SRS-057", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync, Rust Core", + "verification": "Unit Test, Integration Test", + "statement": "The State Synchronization Engine shall preserve per-connection event ordering." + }, + { + "id": "SRS-058", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync", + "verification": "Unit Test", + "statement": "The State Synchronization Engine shall use reducer functions or equivalent deterministic logic for snapshot, channel, client, chat, voice, and connection events." + }, + { + "id": "SRS-059", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync", + "verification": "Event Replay Test, System Test", + "statement": "The State Synchronization Engine shall replace stale server state with a fresh snapshot after reconnect." + }, + { + "id": "SRS-060", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync, Rust Core", + "verification": "Unit Test, Fuzz/Negative Test", + "statement": "The State Synchronization Engine shall tolerate malformed or unexpected protocol events without crashing the application." + }, + { + "id": "SRS-062", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Integration Test", + "statement": "The Audio Subsystem shall coordinate audio capture, preprocessing, audio processing, Opus-compatible encoding, voice packet handoff, receive decoding, jitter buffering, per-user controls, mixing, and playback." + }, + { + "id": "SRS-063", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Test", + "statement": "The Audio Subsystem shall process outgoing microphone PCM frames before encoding." + }, + { + "id": "SRS-064", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Processing Test", + "statement": "The Audio Subsystem shall apply a High-Pass Filter before voice encoding when enabled." + }, + { + "id": "SRS-065", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Processing Test", + "statement": "The Audio Subsystem shall apply Noise Suppression before voice encoding when enabled." + }, + { + "id": "SRS-066", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Adapters", + "verification": "Audio Processing Test", + "statement": "The Audio Subsystem shall apply Echo Canceller before voice encoding when enabled and when playback reference audio is available or the selected backend provides equivalent behavior." + }, + { + "id": "SRS-067", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Processing Test", + "statement": "The Audio Subsystem shall apply Automatic Gain Control before voice encoding when enabled." + }, + { + "id": "SRS-068", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Flutter UI, Storage", + "verification": "UI Test, Unit Test", + "statement": "The Audio Subsystem shall expose enable/disable settings for Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter." + }, + { + "id": "SRS-069", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Adapters", + "verification": "Review, Audio Test", + "statement": "The Audio Subsystem shall support conservative default audio processing configuration per platform." + }, + { + "id": "SRS-071", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Test", + "statement": "The Audio Subsystem shall encode outgoing voice using an Opus-compatible encoder." + }, + { + "id": "SRS-072", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Test", + "statement": "The Audio Subsystem shall decode incoming voice using an Opus-compatible decoder." + }, + { + "id": "SRS-073", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Test", + "statement": "The Audio Subsystem shall use jitter buffering for incoming voice packets." + }, + { + "id": "SRS-074", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Flutter UI", + "verification": "Audio Test, UI Test", + "statement": "The Audio Subsystem shall support per-user mute during playback." + }, + { + "id": "SRS-076", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem", + "verification": "Audio Test", + "statement": "The Audio Subsystem shall mix decoded incoming voice streams before playback." + }, + { + "id": "SRS-077", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Rust Core, Flutter UI", + "verification": "System Test", + "statement": "The Audio Subsystem shall implement microphone mute as a gate that prevents local voice transmission." + }, + { + "id": "SRS-078", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Rust Core, Flutter UI", + "verification": "System Test", + "statement": "The Audio Subsystem shall implement output deaf as a gate that prevents incoming voice playback." + }, + { + "id": "SRS-079", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Flutter UI", + "verification": "System Test", + "statement": "The Audio Subsystem shall implement push-to-talk gating before outgoing voice packet transmission." + }, + { + "id": "SRS-080", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Flutter UI", + "verification": "Audio Test, UI Test", + "statement": "The Audio Subsystem shall provide input level metering to Rust Core or Flutter through UI-safe events." + }, + { + "id": "SRS-081", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, State Sync, Flutter UI", + "verification": "Audio Test, UI Test", + "statement": "The Audio Subsystem shall provide speaking indicator events for local and remote users where available." + }, + { + "id": "SRS-084", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage", + "verification": "Unit Test, Integration Test", + "statement": "The software shall persist bookmarks in local non-secret storage." + }, + { + "id": "SRS-086", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Audio Subsystem", + "verification": "Unit Test, Integration Test", + "statement": "The software shall persist audio settings in local non-secret storage." + }, + { + "id": "SRS-089", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage", + "verification": "Inspection", + "statement": "The software shall use SQLite or an equivalent embedded data store for non-secret local data." + }, + { + "id": "SRS-090", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Platform Adapters", + "verification": "Inspection, Security Audit", + "statement": "The software shall access platform secure storage only through a secure storage provider abstraction." + }, + { + "id": "SRS-091", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Platform Secure Storage", + "verification": "Security Audit", + "statement": "The software shall store identity private keys using platform secure storage and shall not persist them in plaintext files." + }, + { + "id": "SRS-092", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Platform Secure Storage, Diagnostics", + "verification": "Security Audit", + "statement": "The software shall store server passwords using platform secure storage and shall not persist them in plaintext logs or non-secret database fields." + }, + { + "id": "SRS-093", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Storage", + "verification": "Security Audit", + "statement": "The software shall redact secrets before writing diagnostic logs or diagnostic exports." + }, + { + "id": "SRS-094", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, Protocol Adapter, Storage", + "verification": "Unit Test, Security Test", + "statement": "The software shall validate user input before passing values to protocol operations or storage operations." + }, + { + "id": "SRS-095", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics", + "verification": "Inspection, Demo", + "statement": "The software shall produce structured diagnostic logs for connection, protocol, state, audio, storage, platform, and release-relevant events." + }, + { + "id": "SRS-101", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "All Software Components", + "verification": "Privacy Review", + "statement": "The software shall minimize personal data collection in MVP." + }, + { + "id": "SRS-102", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics", + "verification": "Security Audit", + "statement": "The software shall not automatically upload diagnostics in MVP." + }, + { + "id": "SRS-103", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, Bridge, Diagnostics", + "verification": "UI Test, Security Review", + "statement": "The software shall display user-safe errors without raw internal stack traces." + }, + { + "id": "SRS-104", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "Platform Integration Test", + "statement": "The software shall provide a platform adapter interface for microphone capture." + }, + { + "id": "SRS-105", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "Platform Integration Test", + "statement": "The software shall provide a platform adapter interface for speaker/headphone playback." + }, + { + "id": "SRS-106", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Audio Subsystem, Flutter UI", + "verification": "Platform Integration Test", + "statement": "The software shall provide a platform adapter interface for audio device enumeration and selection where supported." + }, + { + "id": "SRS-107", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "Platform Integration Test", + "statement": "The software shall provide a platform adapter interface for audio route changes." + }, + { + "id": "SRS-108", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Flutter UI", + "verification": "Platform Integration Test", + "statement": "The software shall provide a platform adapter interface for microphone permission requests." + }, + { + "id": "SRS-110", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "iOS Integration Test", + "statement": "The iOS software shall integrate with AVAudioSession or equivalent platform audio session behavior for foreground voice sessions." + }, + { + "id": "SRS-111", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "Android Integration Test", + "statement": "The Android software shall integrate with foreground service behavior for active voice sessions." + }, + { + "id": "SRS-121", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Application Container, Flutter UI, Deployment Scripts", + "verification": "Legal Review, Inspection", + "statement": "The software release metadata and in-app wording shall not imply official TeamSpeak affiliation." + }, + { + "id": "SRS-123", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Diagnostics", + "verification": "Demo", + "statement": "The software shall include or support a protocol probe tool for validating `tsclientlib` adapter behavior against compatible test servers." + }, + { + "id": "SRS-124", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "State Sync, Diagnostics", + "verification": "Unit Test, Demo", + "statement": "The software shall include reducer tests and event replay tests for state synchronization." + }, + { + "id": "SRS-125", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Diagnostics", + "verification": "Audio Test, Demo", + "statement": "The software shall include audio loopback and audio processing tests for capture, playback, codec, jitter buffer, mixer, Echo Canceller, AGC, Noise Suppression, and High-Pass Filter." + }, + { + "id": "SRS-126", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Diagnostics, Platform Adapters", + "verification": "Security Audit", + "statement": "The software shall include security verification support for secure storage, private-key handling, password handling, input validation, and diagnostic redaction." + }, + { + "id": "SRS-128", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "All Software Components", + "verification": "System Test, Demo", + "statement": "The software shall support MVP acceptance verification demonstrating connection, channel tree, online clients, channel join, send/receive voice, mute, deaf, push-to-talk, required audio processing, channel text, bookmarks, secure storage, a" + }, + { + "id": "SRS-129", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, Audio Subsystem, Platform Adapters", + "verification": "System Test", + "statement": "The software shall expose clear user-facing errors when client hardware lacks a usable microphone, output device, CPU capacity, storage, or network interface required for the requested operation." + }, + { + "id": "SRS-130", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, Protocol Adapter", + "verification": "System Test", + "statement": "The software shall expose clear user-facing errors when network connectivity prevents server connection or real-time voice operation." + }, + { + "id": "SRS-131", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Rust Core, Flutter UI", + "verification": "System Test", + "statement": "The software shall handle external compatible server permissions, availability, and event behavior as external dependencies and shall not assume administrative control." + }, + { + "id": "SRS-132", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Rust Core, Protocol Adapter, Storage", + "verification": "UI Test, System Test", + "statement": "The software shall allow server details, credentials, and identity selection to be supplied by the user rather than hardcoding a server environment." + }, + { + "id": "SRS-133", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapters, Rust Core, Flutter UI", + "verification": "Platform Integration Test", + "statement": "The software shall integrate with OS-level secure storage, permission, audio, network, notification, lifecycle, and app sandboxing policies through platform adapters." + }, + { + "id": "SRS-134", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Software Requirements Engineering", + "verification": "Review, Protocol Probe", + "statement": "The software team shall analyze `tsclientlib` feasibility for all MVP protocol features and document unsupported or risky features before MVP acceptance." + }, + { + "id": "SRS-135", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Adapters", + "verification": "Review, Audio Test", + "statement": "The software team shall analyze real-time audio feasibility on each target platform for capture, playback, required audio processing, and latency." + }, + { + "id": "SRS-136", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, State Sync, Audio Subsystem, Diagnostics, Storage", + "verification": "Review, Performance Test", + "statement": "The software team shall analyze memory growth and define limits for event queues, chat history, logs, audio buffers, and diagnostic bundles." + }, + { + "id": "SRS-137", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Diagnostics, Platform Adapters, Flutter UI", + "verification": "Security Review, Privacy Review", + "statement": "The software team shall analyze security and privacy impacts of local secrets, logs, diagnostics, permissions, and release configuration." + }, + { + "id": "SRS-139", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review", + "statement": "The software requirements baseline shall account for SysDes-037: SE-19 Engineering Process and Evidence shall be a defined system element in the Chanora architecture with responsibility for: Architecture reviews, traceability records, verif" + }, + { + "id": "SRS-140", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review", + "statement": "The software requirements baseline shall account for SysDes-062: The permission-blocked mode shall prevent unsafe voice operations while preserving user visibility into corrective actions." + }, + { + "id": "SRS-141", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering", + "verification": "Review, Inspection", + "statement": "The SRS shall use SysDes design items as the mandatory architectural allocation source for every software requirement." + }, + { + "id": "SRS-142", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering, Change Control", + "verification": "Review, Inspection", + "statement": "If the software team identifies a required software behavior, constraint, or interface that cannot be derived from an existing SysDes design item, the SRS shall not be baselined until the SysDes is revised." + }, + { + "id": "SRS-143", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Requirements Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The SRS shall maintain a SysDes-to-SRS coverage matrix for all SysDes items that require software implementation, software enablement, software-facing constraint handling, or software verification support." + }, + { + "id": "SRS-144", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Design System", + "verification": "Review, Widget Test", + "statement": "The software shall initialize the Flutter client theme using Material 3 as the baseline UI system." + }, + { + "id": "SRS-145", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Inspection, Widget Test", + "statement": "The software shall provide a Chanora Design System layer above Material 3 for product-specific semantic states." + }, + { + "id": "SRS-146", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Unit Test", + "statement": "The software shall define semantic tokens for connection states." + }, + { + "id": "SRS-147", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Unit Test", + "statement": "The software shall define semantic tokens for voice states including speaking, muted, deafened, and push-to-talk active states." + }, + { + "id": "SRS-148", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Unit Test", + "statement": "The software shall define semantic tokens for latency, packet loss, diagnostics, and error states." + }, + { + "id": "SRS-149", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Inspection, Widget Test", + "statement": "The software shall expose design tokens through `ThemeData`, `ColorScheme`, `TextTheme`, component themes, `ThemeExtension`, or equivalent Flutter theming mechanisms." + }, + { + "id": "SRS-150", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter Feature Screens", + "verification": "Review, Static Inspection", + "statement": "Feature screens shall not hardcode product semantic colors, spacing, shape, density, or motion values." + }, + { + "id": "SRS-151", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell", + "verification": "Widget Test, Integration Test", + "statement": "The software shall provide an Adaptive Shell that resolves compact, medium, and expanded layout classes." + }, + { + "id": "SRS-152", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell", + "verification": "Widget Test, Integration Test", + "statement": "The compact layout shall use a single-column primary content structure and mobile-appropriate primary navigation." + }, + { + "id": "SRS-155", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Connection UI", + "verification": "Integration Test", + "statement": "The software shall keep connection status visible or directly reachable in compact, medium, and expanded layouts." + }, + { + "id": "SRS-156", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Voice UI", + "verification": "Integration Test", + "statement": "The software shall keep primary voice controls visible or directly reachable in compact, medium, and expanded layouts." + }, + { + "id": "SRS-157", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Design System", + "verification": "Accessibility Test", + "statement": "The software shall provide screen-reader semantics for critical connection, voice, channel, diagnostics, and settings controls." + }, + { + "id": "SRS-158", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Localization Service", + "verification": "Accessibility Test, Localization Test", + "statement": "The software shall provide localized accessibility labels for icon-only controls." + }, + { + "id": "SRS-159", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Design System", + "verification": "Widget Test, Accessibility Test", + "statement": "The software shall not express critical states by color alone; it shall also use text, iconography, shape, position, or semantic labeling." + }, + { + "id": "SRS-161", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "Accessibility Test", + "statement": "The software shall keep critical actions reachable under increased text scaling." + }, + { + "id": "SRS-162", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Platform Adapter", + "verification": "Platform Test", + "statement": "The software shall apply platform safe area, display cutout, system bar, virtual keyboard, and desktop window inset constraints through shared shell behavior." + }, + { + "id": "SRS-165", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Localization Service", + "verification": "Unit Test, Integration Test", + "statement": "The software shall provide a Localization Service for product-owned user-visible strings." + }, + { + "id": "SRS-166", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Localization Service", + "verification": "Inspection", + "statement": "The software shall externalize product-owned user-visible strings into localization resources or an equivalent mechanism." + }, + { + "id": "SRS-167", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Localization Service", + "verification": "Localization Test", + "statement": "The software shall provide English as the baseline product locale." + }, + { + "id": "SRS-168", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Localization Service", + "verification": "Unit Test", + "statement": "The software shall implement deterministic fallback behavior when a translation key is missing." + }, + { + "id": "SRS-170", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Protocol DTOs", + "verification": "Integration Test", + "statement": "The software shall display server-provided server names, channel names, client nicknames, and text messages as content rather than translating them." + }, + { + "id": "SRS-171", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Bridge, Rust Core, Flutter UI", + "verification": "Integration Test", + "statement": "The software shall preserve Unicode text received from compatible servers through protocol adapter, bridge DTO, state store, and UI rendering paths." + }, + { + "id": "SRS-172", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge, Rust Core, Storage, Diagnostics, Protocol Adapter", + "verification": "Inspection, Integration Test", + "statement": "The software shall use UTF-8 internally for cross-layer text DTOs unless a boundary adapter requires conversion." + }, + { + "id": "SRS-174", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Storage", + "verification": "Test, Audit", + "statement": "The software shall not corrupt multilingual Unicode content in logs or diagnostic exports unless redaction intentionally removes sensitive content." + }, + { + "id": "SRS-180", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Engineering", + "verification": "Inspection", + "statement": "The software requirements baseline shall derive requirements only from `SysDes-XXX` sources." + }, + { + "id": "SRS-181", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Engineering", + "verification": "Inspection", + "statement": "The SRS shall not use direct upstream system-requirement source fields or direct system-requirement trace links." + }, + { + "id": "SRS-182", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Architecture", + "verification": "Inspection", + "statement": "The software architecture shall derive architecture items only from `SRS-XXX` sources." + }, + { + "id": "SRS-183", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Software Design", + "verification": "Inspection", + "statement": "The software detailed design shall derive detailed design items only from `SAD-XXX` sources." + }, + { + "id": "SRS-184", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Design System, Localization Service, Platform Adapter", + "verification": "Integration Test", + "statement": "Theme, localization, and initial platform adaptation shall be initialized before feature screens render user-visible content." + }, + { + "id": "SRS-185", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "iOS Build Configuration, Platform Adapter", + "verification": "Platform Test, Release Inspection", + "statement": "The software shall define iOS 13 as the minimum iOS runtime deployment baseline unless approved platform constraints raise the minimum version." + }, + { + "id": "SRS-186", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "iOS Build Configuration, Release Pipeline", + "verification": "Release Inspection", + "statement": "The iOS/iPadOS release build process shall require Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later for App Store Connect upload on or after 2026-04-28, unless Apple publishes a newer applicable upload requirement before upload." + }, + { + "id": "SRS-187", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Android Build Configuration, Platform Adapter", + "verification": "Platform Test, Release Inspection", + "statement": "The software shall define Android API 28 (Android 9.0) as the minimum Android runtime baseline, per DEC-004 (Accepted 2026-05-14, which raised the original API 24 recommendation to API 28). The minimum may be raised further only if Flutter," + }, + { + "id": "SRS-188", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Android Build Configuration, Release Pipeline", + "verification": "Release Inspection", + "statement": "The Android release build process shall target the Android API level required by Google Play on the upload date." + }, + { + "id": "SRS-189", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, Flutter UI, Protocol Adapter, State Sync", + "verification": "System Test", + "statement": "The software shall permit only one active server connection per client instance in MVP." + }, + { + "id": "SRS-190", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Settings UI, Platform Audio", + "verification": "Audio Test", + "statement": "The software shall enable AEC, AGC, Noise Suppression, and High-Pass Filter by default where supported and stable, with user or platform control to disable supported processing where applicable." + }, + { + "id": "SRS-192", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Storage, Platform Secure Storage", + "verification": "Storage Test, Security Audit", + "statement": "The software shall use SQLite or an equivalent embedded local database for non-secret local state and platform secure storage for secrets." + }, + { + "id": "SRS-193", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Bridge, Flutter State, Rust Core", + "verification": "Integration Test, Architecture Review", + "statement": "The software shall use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs." + }, + { + "id": "SRS-194", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Privacy, Release Pipeline", + "verification": "Privacy Review, Security Audit", + "statement": "The software shall not perform automatic diagnostic upload, automatic telemetry upload, or automatic crash reporting in MVP unless a later approved decision updates privacy, security, legal, release, and verification baselines." + }, + { + "id": "SRS-195", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio, Platform Input", + "verification": "Architecture Review, Unit Test", + "statement": "The software shall expose a `DesktopPttBackend` trait owned by the audio subsystem, with one implementation per supported desktop platform (Windows, macOS, Linux/GNOME-Wayland) and a `FocusedPttBackend` implementation used as the universal " + }, + { + "id": "SRS-196", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio, Rust Core", + "verification": "Unit Test, Integration Test", + "statement": "The software shall publish a `PttCapabilityLevel` enum value (`L0` Focused, `L1` Global-shortcut-activation, `L2` Global-hold-to-talk, `L3` Global-with-mouse-buttons, `L4` Device-aware) from the active backend, and the value shall match the" + }, + { + "id": "SRS-197", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Windows)", + "verification": "Platform Test (Windows), Unit Test", + "statement": "The Windows desktop backend shall attempt Raw Input first; if Raw Input is unavailable or initialisation fails, it shall attempt a low-level keyboard hook; if that also fails it shall return `PttCapabilityLevel::L0` and engage Focused PTT. " + }, + { + "id": "SRS-198", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (macOS)", + "verification": "Platform Test (macOS), User Acceptance Test", + "statement": "The macOS desktop backend shall query the operating-system Input Monitoring / Accessibility permission state, return `PttCapabilityLevel::L0` while the permission is undecided or denied, and upgrade to the appropriate Global level only afte" + }, + { + "id": "SRS-199", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Linux)", + "verification": "Platform Test (Linux, GNOME Wayland), Unit Test", + "statement": "The Linux desktop backend shall probe the active display server and compositor at runtime. On GNOME-on-Wayland (the officially-tested target per DEC-026), the backend shall use the freedesktop GlobalShortcuts portal. On any other Linux envi" + }, + { + "id": "SRS-200", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Windows/macOS/Linux)", + "verification": "Platform Test, User Acceptance Test", + "statement": "The software shall support mouse side buttons (typically labelled Mouse4 / Mouse5 or \"back\" / \"forward\") as bindable inputs for Global PTT on the Windows and macOS backends per DEC-027. The Linux GlobalShortcuts portal binding shall accept " + }, + { + "id": "SRS-201", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Integration Test", + "statement": "The audio engine shall expose `capture_active` and `transmit_active` as independent atomic states. `capture_active` shall reflect the input-stream lifecycle and the platform input-permission state; `transmit_active` shall reflect the PTT su" + }, + { + "id": "SRS-202", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Audio", + "verification": "Privacy Review, Unit Test, Diagnostic Inspection", + "statement": "The diagnostics subsystem shall reject any log record carrying a raw key code, scan code, virtual-key value, or key-press timing sequence. The diagnostic export shall include the active `PttCapabilityLevel`, the active backend identifier, a" + }, + { + "id": "SRS-203", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Integration Test", + "statement": "The software shall implement a missed-key-up watchdog per DEC-028: if `transmit_active` has been true for longer than a configured upper bound without a corresponding release event (for example because the OS suppressed the key-up while the" + }, + { + "id": "SRS-204", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio, Bridge, Flutter UI", + "verification": "Integration Test, UI Review", + "statement": "The audio engine shall open the input and output streams on the user's first voice-channel join of the session and shall close them on the last voice-channel leave. The software shall expose no `start_audio` or equivalent manual-start opera" + }, + { + "id": "SRS-205", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio, Bridge, Flutter UI", + "verification": "Unit Test, UI Review", + "statement": "The software shall represent the user's voice transmit mode as a `TransmitMode` enum with variants `Ptt`, `Continuous`, and `VoiceActivity` (the last reserved with no v1 implementation per DEC-030). The setting shall be persisted per identi" + }, + { + "id": "SRS-206", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio", + "verification": "Unit Test, Integration Test", + "statement": "The software shall expose a `release_tail_ms` configuration value (default 200 ms, validated range 0 through 500 ms inclusive) and shall delay the `true → false` transition of `transmit_active` by `release_tail_ms` after the PTT backend rep" + }, + { + "id": "SRS-207", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio, Flutter UI", + "verification": "Functional Test, UI Review", + "statement": "The software shall expose a hard-mute toggle in the Voice Bar UI. While hard-mute is engaged, `transmit_active` shall be forced false regardless of the active transmit mode, the PTT key state, or any other internal signal. Hard-mute state s" + }, + { + "id": "SRS-208", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Android), Platform Adapter (Android)", + "verification": "Android Integration Test, Audio Test", + "statement": "The Chanora Android client shall engage the Android in-call audio mode (for example via `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mechanism) no later than the moment a voice session becomes conne" + }, + { + "id": "SRS-209", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapter (Android), Audio, Flutter UI", + "verification": "Android Integration Test, UI Test, Privacy Review", + "statement": "The Chanora Android client shall request the runtime microphone permission (`RECORD_AUDIO`) at or before voice session activation, and shall not begin microphone capture without that permission having been granted. If the permission is deni" + }, + { + "id": "SRS-210", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Android), Platform Adapter (Android)", + "verification": "Android Integration Test, Audio Test, Loopback Latency Measurement", + "statement": "The Chanora Android voice audio path shall achieve a round-trip mouth-to-ear (\"glass-to-glass\") latency of at most 150 ms on Android devices that support AAudio low-latency performance mode, and at most 250 ms on Android devices that do not" + }, + { + "id": "SRS-211", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Android), Platform Adapter (Android)", + "verification": "Android Integration Test, Audio Test", + "statement": "The Chanora Android voice-capture path shall request the platform \"voice communication\" input preset where the operating system exposes one, so that the OS-side capture chain (gain shaping, far-end suppression, microphone selection) is the " + }, + { + "id": "SRS-212", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Android), Platform Adapter (Android), Audio Engine", + "verification": "Android Integration Test, Audio Test", + "statement": "Where the Android device exposes the hardware voice-audio effect APIs `AcousticEchoCanceler`, `NoiseSuppressor`, and `AutomaticGainControl`, the Chanora Android client shall engage each available effect on the active microphone capture sess" + }, + { + "id": "SRS-213", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Android), Platform Adapter (Android)", + "verification": "Android Integration Test, Audio Test", + "statement": "The Chanora Android voice-output stream shall declare `AAUDIO_USAGE_VOICE_COMMUNICATION` and `AAUDIO_CONTENT_TYPE_SPEECH` at stream construction so that the Android audio policy engine routes the stream under the voice-communication routing" + }, + { + "id": "SRS-214", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Audio (Android), Platform Adapter (Android)", + "verification": "Android Integration Test, Audio Test", + "statement": "The Chanora Android voice input and output streams shall request `AAUDIO_SHARING_MODE_EXCLUSIVE` on a best-effort basis at stream construction, and shall gracefully fall back to `AAUDIO_SHARING_MODE_SHARED` when the platform denies exclusiv" + }, + { + "id": "SRS-215", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapter (Android), Audio (Android), Android Manifest", + "verification": "Android Integration Test, Manifest Review", + "statement": "The Chanora Android client shall maintain active microphone capture while the application is backgrounded by hosting voice transmission inside an Android foreground service whose manifest declares `foregroundServiceType=\"microphone\"`. This " + }, + { + "id": "SRS-216", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "`chanora_audio` crate (realtime capture and playback modules, plus a co-located `benches/` directory)", + "verification": "SWE.4 — automated benchmark execution against the instrumentation surface; reviewers confirm the five metric families enumerated in SysDes-156 each have at least one benchmark target.", + "statement": "The `chanora_audio` software shall expose its realtime capture and playback paths to benchmark instrumentation that covers the five metrics enumerated by SysDes-156: (1) heap allocation count per realtime callback after a warmup window of a" + }, + { + "id": "SRS-217", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "`chanora_audio` crate (the bench harness publishes the baseline JSON), plus the SDD-decided on-disk path under the repository root.", + "verification": "Review — the JSON record format is review-checkable against this clause by inspecting a sample baseline file.", + "statement": "Baseline measurements produced by the SRS-216 benchmark instrumentation shall be stored as structured JSON committed to a deterministic location inside the repository, so that the baseline becomes a reviewable, version-controlled artefact r" + }, + { + "id": "SRS-218", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "CI tooling under `.github/workflows/` (or the SDD-decided equivalent integration point) — specifically a new advisory benchmark workflow file; the exact filename is delegated to SAD/SDD.", + "verification": "Demo — a synthetic pull-request run shall demonstrate the workflow firing, the markdown comparison table rendering, the status check reporting `success` even when a 🔴 marker is present, and the absence of any write to the baseline JSON file under the PR-triggered path. Human reviewers confirm in the PR.", + "statement": "A continuous-integration workflow shall execute the SRS-216 benchmark suite under the constraints authored by SysDes-157, namely: (1) the workflow shall trigger on every pull request opened against the default branch and on every merge to t" + }, + { + "id": "SRS-219", + "source": "requirements/srs.md", + "stage": "P0 / MVP", + "allocation": "CI tooling co-located with the SRS-218 workflow (the comparison logic resides in the same SE-18 surface).", + "verification": "Review — the comparison logic and the tolerance table are review-checkable against this clause; a small synthetic data set (one baseline, one PR run for each of the five metric families with values at, just inside, and just outside the tolerance window) demonstrates each marker assignment.", + "statement": "The advisory comparison performed by the SRS-218 workflow shall apply the per-metric tolerance window and the comparison methodology authored by SysDes-158. The tolerance window shall be evaluated per metric as follows: (a) heap allocation " + }, + { + "id": "SysDes-001", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "This SysDes shall establish the Chanora system architectural design and allocate all SysRS requirements to system elements." + }, + { + "id": "SysDes-002", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "This SysDes shall treat Chanora as a cross-platform application system, not as an operating system." + }, + { + "id": "SysDes-003", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "This SysDes shall be used as the system-level design baseline for downstream SRS, SAD, SDD, and Verification artifacts." + }, + { + "id": "SysDes-004", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The SysDes structure shall provide evidence for static architecture, dynamic architecture, architecture analysis, bidirectional traceability, consistency, and architecture communication." + }, + { + "id": "SysDes-005", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "The SysDes shall identify system elements, their responsibilities, their relationships, and their external interfaces." + }, + { + "id": "SysDes-006", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations", + "verification": "Review, Inspection", + "statement": "The SysDes shall describe dynamic behavior for connection, synchronization, voice transmission, voice reception, text messaging, reconnect, permissions, diagnostics, and release operation." + }, + { + "id": "SysDes-007", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "The SysDes shall include architecture analysis, major design rationale, known risks, mitigations, and special characteristics." + }, + { + "id": "SysDes-008", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The SysDes shall maintain bidirectional traceability between every SysRS requirement and at least one allocated system element." + }, + { + "id": "SysDes-009", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The SysDes shall identify affected parties for review, agreement, and communication of the system architecture." + }, + { + "id": "SysDes-010", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Review", + "statement": "The architecture shall separate user interface, protocol logic, state synchronization, audio processing, storage, diagnostics, and platform-specific services." + }, + { + "id": "SysDes-011", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter", + "verification": "Review", + "statement": "The architecture shall isolate direct `tsclientlib` usage inside the protocol adapter." + }, + { + "id": "SysDes-012", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Rust Core", + "verification": "Review", + "statement": "The architecture shall support required target platforms through shared Flutter UI, shared Rust Core, and platform-specific adapters." + }, + { + "id": "SysDes-013", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Review", + "statement": "The architecture shall support production-grade audio processing including Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter." + }, + { + "id": "SysDes-014", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Audio Subsystem", + "verification": "Review", + "statement": "The architecture shall support real-time voice behavior without placing real-time audio processing in Flutter UI." + }, + { + "id": "SysDes-015", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Diagnostics, Verification", + "verification": "Review", + "statement": "The architecture shall support secure local handling of identities, passwords, and diagnostics." + }, + { + "id": "SysDes-016", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review", + "statement": "The architecture shall support operation without a Chanora-operated central backend in MVP." + }, + { + "id": "SysDes-017", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter, Software: Audio Subsystem, Deployment / Operations", + "verification": "Review", + "statement": "The architecture shall provide traceable verification hooks for protocol, state, audio, security, packaging, and platform behavior." + }, + { + "id": "SysDes-018", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "External Server, Software: Audio Subsystem, Deployment / Operations", + "verification": "Review, Inspection", + "statement": "The static architecture shall define Chanora as a client application system interacting with users, audio hardware, OS services, networks, deployment environments, and external compatible voice servers." + }, + { + "id": "SysDes-019", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "User / Operator, Platform, Software: Diagnostics, Verification", + "verification": "Review, Inspection", + "statement": "SE-01 User and Operator shall be a defined system element in the Chanora architecture with responsibility for: Human users who operate Chanora, provide server details, manage permissions, and initiate diagnostic export." + }, + { + "id": "SysDes-020", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Hardware, Software: Audio Subsystem", + "verification": "Review, Inspection", + "statement": "SE-02 Client Device Hardware shall be a defined system element in the Chanora architecture with responsibility for: Physical device running Chanora, including CPU, memory, storage, network interfaces, microphone, speaker/headphone, and opti" + }, + { + "id": "SysDes-021", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform, Software: Audio Subsystem, Platform Secure Storage", + "verification": "Review, Inspection", + "statement": "SE-03 Operating System Services shall be a defined system element in the Chanora architecture with responsibility for: OS services used by Chanora: permissions, secure storage, audio stack, network stack, notifications, windowing, lifecycle" + }, + { + "id": "SysDes-022", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Network", + "verification": "Review, Inspection", + "statement": "SE-04 Network Environment shall be a defined system element in the Chanora architecture with responsibility for: IP network path between client and external compatible server, including DNS, routing, NAT, firewall, VPN, Wi-Fi, cellular, and" + }, + { + "id": "SysDes-023", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "External Server, Software: Audio Subsystem, Platform", + "verification": "Review, Inspection", + "statement": "SE-05 External Compatible Voice Server shall be a defined system element in the Chanora architecture with responsibility for: TeamSpeak 3-compatible external server providing channels, clients, identity authentication, voice packets, text m" + }, + { + "id": "SysDes-024", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software, Platform", + "verification": "Review, Inspection", + "statement": "SE-06 Chanora Application Container shall be a defined system element in the Chanora architecture with responsibility for: Installed Chanora client application package on each target platform. Owns app lifecycle at the application boundary." + }, + { + "id": "SysDes-025", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification", + "verification": "Review, Inspection", + "statement": "SE-07 Flutter UI Layer shall be a defined system element in the Chanora architecture with responsibility for: Cross-platform user interface for connection, channel tree, chat, voice controls, settings, permissions, and diagnostics." + }, + { + "id": "SysDes-026", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter State, Software: Rust Core, Software: State Sync", + "verification": "Review, Inspection", + "statement": "SE-08 Flutter State Layer shall be a defined system element in the Chanora architecture with responsibility for: UI-facing state model derived from Rust Core events and snapshots; owns only presentation state." + }, + { + "id": "SysDes-027", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Bridge, Software: Rust Core", + "verification": "Review, Inspection", + "statement": "SE-09 Flutter-Rust Bridge Layer shall be a defined system element in the Chanora architecture with responsibility for: Generated/native bridge for commands, DTOs, asynchronous calls, event streams, and error propagation between Flutter and " + }, + { + "id": "SysDes-028", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Review, Inspection", + "statement": "SE-10 Rust Core and Connection Manager shall be a defined system element in the Chanora architecture with responsibility for: Authoritative application core coordinating connection actors, commands, events, storage, audio, diagnostics, and " + }, + { + "id": "SysDes-029", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter, Software: Audio Subsystem", + "verification": "Review, Inspection", + "statement": "SE-11 Protocol Adapter using tsclientlib shall be a defined system element in the Chanora architecture with responsibility for: Protocol subsystem wrapping `tsclientlib`, isolating protocol library types, errors, events, and voice packet op" + }, + { + "id": "SysDes-030", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync", + "verification": "Review, Inspection", + "statement": "SE-12 State Synchronization Engine shall be a defined system element in the Chanora architecture with responsibility for: Snapshot + delta state model, deterministic reducers, connection state machine, event ordering, and replayable state b" + }, + { + "id": "SysDes-031", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Review, Inspection", + "statement": "SE-13 Audio Subsystem shall be a defined system element in the Chanora architecture with responsibility for: Capture/playback coordination, Opus-compatible encoding/decoding, jitter buffer, mixer, push-to-talk, mute/deaf, level metering, an" + }, + { + "id": "SysDes-032", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations", + "verification": "Review, Inspection", + "statement": "SE-14 Platform Adapter Layer shall be a defined system element in the Chanora architecture with responsibility for: Platform-specific adapters for audio devices, permissions, lifecycle, notifications, secure storage integration, and release" + }, + { + "id": "SysDes-033", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Software: Storage", + "verification": "Review, Inspection", + "statement": "SE-15 Local Data Store shall be a defined system element in the Chanora architecture with responsibility for: Embedded local database or equivalent storage for bookmarks, recent servers, audio settings, UI settings, per-user volume and mute" + }, + { + "id": "SysDes-034", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Secure Storage", + "verification": "Review, Inspection", + "statement": "SE-16 Secure Storage Provider shall be a defined system element in the Chanora architecture with responsibility for: Platform secure storage integration for identity private keys, server passwords, and future sensitive tokens." + }, + { + "id": "SysDes-035", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Review, Inspection", + "statement": "SE-17 Diagnostics and Observability shall be a defined system element in the Chanora architecture with responsibility for: Structured logs, redaction, event recording, event replay, network diagnostics, audio diagnostics, diagnostic bundle " + }, + { + "id": "SysDes-036", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Storage, Deployment / Operations", + "verification": "Review, Inspection", + "statement": "SE-18 Deployment and Release Environment shall be a defined system element in the Chanora architecture with responsibility for: Packaging, signing, notarization, app-store release, installers, Linux packages, CI/CD, release metadata, and di" + }, + { + "id": "SysDes-037", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "SE-19 Engineering Process and Evidence shall be a defined system element in the Chanora architecture with responsibility for: Architecture reviews, traceability records, verification evidence, compatibility matrix, open decisions, and downs" + }, + { + "id": "SysDes-038", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Flutter State, Software: Bridge, Software: Rust Core", + "verification": "Review, Inspection", + "statement": "The architecture shall use a layered decomposition in which Flutter UI and Flutter State Layer communicate with Rust Core only through the Bridge Layer." + }, + { + "id": "SysDes-039", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Review, Inspection", + "statement": "The architecture shall place protocol, state synchronization, audio processing, storage coordination, diagnostics, and business rules inside Rust Core or Rust Core-owned elements." + }, + { + "id": "SysDes-040", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Flutter State, Software: Protocol Adapter", + "verification": "Review, Inspection", + "statement": "The architecture shall prevent Flutter UI and Flutter State Layer from invoking `tsclientlib` or depending on raw `tsclientlib` types." + }, + { + "id": "SysDes-041", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Rust Core, Software: Audio Subsystem", + "verification": "Review, Inspection", + "statement": "The architecture shall place real-time audio processing outside Flutter UI and inside the Rust Core audio subsystem or platform-native audio processing adapters." + }, + { + "id": "SysDes-042", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "Every SysRS requirement shall be allocated to at least one system element." + }, + { + "id": "SysDes-043", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "External Server, Deployment / Operations, System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "A SysRS requirement may be allocated to multiple system elements when the requirement depends on cooperation between application software, OS services, hardware, network, external server, deployment, or engineering evidence." + }, + { + "id": "SysDes-044", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Rust Core", + "verification": "Review, Inspection", + "statement": "Functional user-facing requirements shall be allocated to Flutter UI, Rust Core, and the relevant subsystem element that executes the behavior." + }, + { + "id": "SysDes-045", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Hardware, Platform, Network", + "verification": "Review, Inspection", + "statement": "Runtime environment requirements shall be allocated to client device hardware, operating system services, platform adapters, network environment, or external compatible server elements." + }, + { + "id": "SysDes-046", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform, Platform Secure Storage, Software: Diagnostics, Verification, System Engineering", + "verification": "Review, Inspection", + "statement": "Security, privacy, and diagnostics requirements shall be allocated to secure storage, diagnostics, platform adapters, and engineering process evidence." + }, + { + "id": "SysDes-047", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "MVP acceptance requirements shall be allocated to the system elements that implement or enable the accepted behavior." + }, + { + "id": "SysDes-048", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification", + "verification": "Inspection, Integration Test", + "statement": "IF-001 User Interface shall expose connection, bookmark, channel tree, online client, chat, voice control, audio setting, permission, and diagnostic workflows." + }, + { + "id": "SysDes-049", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Bridge, Software: Protocol Adapter", + "verification": "Inspection, Integration Test", + "statement": "IF-003 Flutter-Rust Command Interface shall use bridge-safe DTOs and shall not expose raw protocol or `tsclientlib` types." + }, + { + "id": "SysDes-050", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Inspection, Integration Test", + "statement": "IF-004 Rust Core Event Interface shall deliver connection status, snapshots, deltas, voice indicators, errors, and diagnostic events as typed streams." + }, + { + "id": "SysDes-051", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter", + "verification": "Inspection, Integration Test", + "statement": "IF-005 Protocol Adapter Interface shall isolate all direct `tsclientlib` operations and convert protocol data into Chanora internal data structures." + }, + { + "id": "SysDes-052", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "External Server, Software: Protocol Adapter", + "verification": "Inspection, Integration Test", + "statement": "IF-006 External Server Protocol Interface shall use `tsclientlib` to communicate with reachable TeamSpeak 3-compatible external servers." + }, + { + "id": "SysDes-053", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Inspection, Integration Test", + "statement": "IF-007 Audio Capture Interface shall provide PCM capture frames, device state, route changes, and capture errors to the audio subsystem." + }, + { + "id": "SysDes-054", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Inspection, Integration Test", + "statement": "IF-008 Audio Playback Interface shall provide mixed PCM playback frames, playback reference for echo cancellation where required, and playback route events." + }, + { + "id": "SysDes-055", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Storage, Platform Secure Storage", + "verification": "Inspection, Integration Test", + "statement": "IF-009 Secure Storage Interface shall store identity private keys, server passwords, and future sensitive tokens through platform-secure mechanisms." + }, + { + "id": "SysDes-056", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Storage", + "verification": "Inspection, Integration Test", + "statement": "IF-010 Local Data Store Interface shall persist non-secret data through SQLite or an equivalent embedded database." + }, + { + "id": "SysDes-057", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Diagnostics, Verification", + "verification": "Inspection, Integration Test", + "statement": "IF-011 Diagnostics Export Interface shall export user-initiated diagnostic bundles with redaction applied before export." + }, + { + "id": "SysDes-058", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Diagnostics, Verification", + "verification": "Inspection, Integration Test", + "statement": "IF-013 Network Interface shall provide connectivity to external compatible servers and network diagnostic inputs for reconnect and troubleshooting." + }, + { + "id": "SysDes-059", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Platform", + "verification": "Inspection, Integration Test", + "statement": "IF-014 Permission Interface shall mediate microphone, notification, audio session, foreground service, and lifecycle permission behavior on supported platforms." + }, + { + "id": "SysDes-060", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core", + "verification": "System Test, Demo", + "statement": "The connection state machine shall be owned by Rust Core and reflected to Flutter as UI-safe connection status events." + }, + { + "id": "SysDes-061", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter, Software: Audio Subsystem, Platform", + "verification": "System Test, Demo", + "statement": "The voice activity mode shall be active only when a channel context, audio device state, permission state, and protocol voice path are valid." + }, + { + "id": "SysDes-062", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Platform", + "verification": "System Test, Demo", + "statement": "The permission-blocked mode shall prevent unsafe voice operations while preserving user visibility into corrective actions." + }, + { + "id": "SysDes-063", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync", + "verification": "System Test, Demo", + "statement": "The reconnect mode shall preserve UI responsiveness and rebuild authoritative server state from a fresh snapshot after reconnect." + }, + { + "id": "SysDes-064", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Diagnostics, Verification", + "verification": "System Test, Demo", + "statement": "The diagnostics export mode shall be explicitly user-initiated and shall apply redaction before export." + }, + { + "id": "SysDes-065", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Bridge, Software: Rust Core", + "verification": "System Test, Demo", + "statement": "Manual connection flow shall pass host, port, nickname, optional password, and identity reference from Flutter UI to Rust Core through bridge DTOs." + }, + { + "id": "SysDes-066", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Protocol Adapter", + "verification": "System Test, Demo", + "statement": "Rust Core shall use the protocol adapter to establish server connection and authentication through `tsclientlib`." + }, + { + "id": "SysDes-067", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync", + "verification": "System Test, Demo", + "statement": "Initial synchronization shall fetch server information, channel list, client list, and required self-client information before emitting a full snapshot." + }, + { + "id": "SysDes-068", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync", + "verification": "System Test, Demo", + "statement": "Live server events shall be converted into internal events, applied through deterministic reducers, and emitted as UI-safe delta events." + }, + { + "id": "SysDes-069", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Protocol Adapter", + "verification": "System Test, Demo", + "statement": "Channel join flow shall wait for Rust Core/protocol confirmation before treating the UI state as authoritative." + }, + { + "id": "SysDes-070", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Protocol Adapter", + "verification": "System Test, Demo", + "statement": "Text message flow shall route user text from Flutter to Rust Core to protocol adapter and route received messages back as core events." + }, + { + "id": "SysDes-071", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter, Software: Audio Subsystem", + "verification": "System Test, Demo", + "statement": "Outgoing voice flow shall capture PCM frames, apply required processing, encode voice, and send voice packets through the protocol adapter." + }, + { + "id": "SysDes-072", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "System Test, Demo", + "statement": "Incoming voice flow shall receive voice packets, jitter-buffer, decode, apply per-user controls, mix, and play through platform playback." + }, + { + "id": "SysDes-073", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software", + "verification": "System Test, Demo", + "statement": "User-triggered disconnect flow shall transition to Disconnected and shall suppress automatic reconnect." + }, + { + "id": "SysDes-074", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync", + "verification": "System Test, Demo", + "statement": "Recoverable network failure flow shall transition to Reconnecting, apply reconnect policy, and rebuild state from a fresh snapshot." + }, + { + "id": "SysDes-075", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Platform", + "verification": "System Test, Demo", + "statement": "Audio device change flow shall report route/device changes through platform adapters and shall recover or enter a user-safe blocked/degraded state." + }, + { + "id": "SysDes-076", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Storage, Platform Secure Storage, Software: Diagnostics, Verification", + "verification": "System Test, Demo", + "statement": "Secure storage flow shall store and retrieve secrets through platform secure storage without exposing plaintext secrets to logs or diagnostic export." + }, + { + "id": "SysDes-077", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Protocol Adapter, Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Review, Analysis", + "statement": "The architecture shall select Flutter + Rust Core to meet cross-platform UI requirements while centralizing protocol, state, audio, storage, and diagnostics logic." + }, + { + "id": "SysDes-078", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter", + "verification": "Review, Analysis", + "statement": "The architecture shall isolate `tsclientlib` inside the protocol adapter to reduce impact if protocol implementation must be patched, forked, or replaced." + }, + { + "id": "SysDes-079", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync, System Engineering, Verification", + "verification": "Review, Analysis", + "statement": "The architecture shall use snapshot + delta synchronization to support deterministic state recovery, reconnect behavior, event replay, and UI consistency." + }, + { + "id": "SysDes-080", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations", + "verification": "Review, Analysis", + "statement": "The architecture shall use platform adapters to isolate OS-specific permission, audio routing, lifecycle, secure storage, notification, and packaging concerns." + }, + { + "id": "SysDes-081", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Review, Analysis", + "statement": "The architecture shall implement audio processing through a backend abstraction that supports platform-native and Rust-based processing options." + }, + { + "id": "SysDes-082", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform", + "verification": "Review, Analysis", + "statement": "The architecture shall define external compatible server behavior as an external dependency and shall not assume control over server-side permissions, availability, or configuration." + }, + { + "id": "SysDes-083", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Review, Analysis", + "statement": "The architecture shall not introduce Chanora-operated backend infrastructure for MVP voice, channel, or text operation." + }, + { + "id": "SysDes-084", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations", + "verification": "Review, Analysis", + "statement": "The architecture shall treat real-time audio behavior, secure secret storage, protocol compatibility, mobile lifecycle policy, diagnostic redaction, and release signing as special characteristics requiring explicit verification." + }, + { + "id": "SysDes-085", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Flutter UI, Software: Bridge, Software: Rust Core", + "verification": "Review", + "statement": "The architecture shall allocate UI responsiveness to Flutter UI, Bridge Layer, Rust Core asynchronous command handling, and non-blocking reconnect behavior." + }, + { + "id": "SysDes-086", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Hardware, Network, Software: Audio Subsystem, Platform", + "verification": "Test, Analysis", + "statement": "The architecture shall allocate local audio latency requirements to client device hardware, OS audio stack, platform adapters, audio subsystem, codec processing, and network environment." + }, + { + "id": "SysDes-087", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification", + "verification": "Test, Analysis", + "statement": "The architecture shall allocate memory growth constraints to Rust Core queue management, diagnostics log retention, chat history limits, and audio buffer bounds." + }, + { + "id": "SysDes-088", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem", + "verification": "Test, Analysis", + "statement": "The architecture shall allocate reliability recovery requirements to Rust Core reconnect policy, protocol adapter error mapping, state engine snapshot replacement, and platform audio recovery." + }, + { + "id": "SysDes-089", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Secure Storage, Software: Diagnostics, Verification", + "verification": "Audit", + "statement": "The architecture shall allocate security requirements to platform secure storage, secret redaction, diagnostics redaction, user-safe error mapping, and input validation." + }, + { + "id": "SysDes-090", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform, Software: Diagnostics, Verification", + "verification": "Audit", + "statement": "The architecture shall allocate privacy requirements to user-controlled diagnostics, minimal data collection, and permission explainers." + }, + { + "id": "SysDes-091", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Storage, Deployment / Operations, System Engineering, Verification", + "verification": "Inspection, Demo", + "statement": "The architecture shall allocate packaging and release requirements to deployment environment, signing/notarization/app-store packaging, and release metadata review." + }, + { + "id": "SysDes-092", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "Each SysRS requirement shall trace forward to one or more system elements and to one or more SysDes design items with Type, Stage, Allocation, and Verification attributes." + }, + { + "id": "SysDes-093", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "Each system element shall trace backward to one or more SysRS requirements unless explicitly marked as supporting infrastructure." + }, + { + "id": "SysDes-094", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "Each interface shall trace backward to the SysRS requirements that require the interaction or runtime dependency." + }, + { + "id": "SysDes-095", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "Each dynamic flow shall trace backward to the SysRS functional, state, performance, security, or operational requirements that require the behavior." + }, + { + "id": "SysDes-096", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "Architecture changes shall update the SysRS allocation matrix, affected interfaces, affected dynamic flows, and verification hooks." + }, + { + "id": "SysDes-097", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "Consistency review shall check that SysDes does not contradict SysRS, does not introduce unapproved scope, and does not remove required MVP capabilities." + }, + { + "id": "SysDes-098", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Rust Core, Software: Audio Subsystem, Deployment / Operations, System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The system architecture shall be reviewed by product, system engineering, Rust Core engineering, Flutter engineering, audio engineering, platform engineering, QA, security/privacy, and release stakeholders." + }, + { + "id": "SysDes-099", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "Architecture review evidence shall include review date, participants, open issues, decisions, accepted risks, and approval status." + }, + { + "id": "SysDes-100", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering", + "verification": "Review, Inspection", + "statement": "The agreed SysDes baseline shall be communicated to downstream SRS, SAD, SDD, and Verification authors." + }, + { + "id": "SysDes-101", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Protocol Adapter, Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations, System Engineering, Verification", + "verification": "Review, Inspection", + "statement": "Any change affecting `tsclientlib` isolation, real-time audio processing, secure storage, mobile lifecycle, or release wording shall trigger architecture impact review." + }, + { + "id": "SysDes-102", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "External Server, Software: Protocol Adapter", + "verification": "Test, Demo", + "statement": "Protocol verification shall use a protocol probe tool and compatibility matrix to verify external server compatibility and `tsclientlib` adapter behavior." + }, + { + "id": "SysDes-103", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: State Sync", + "verification": "Test, Demo", + "statement": "State verification shall use reducer tests and event replay tests to verify snapshot, delta, reconnect, and malformed-event behavior." + }, + { + "id": "SysDes-104", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Audio Subsystem", + "verification": "Test, Demo", + "statement": "Audio verification shall use audio loopback and processing tests to verify capture, playback, codec, jitter buffer, mixer, Echo Canceller, AGC, Noise Suppression, and High-Pass Filter." + }, + { + "id": "SysDes-105", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Secure Storage, Software: Diagnostics, Verification", + "verification": "Audit", + "statement": "Security verification shall audit secure storage, private-key handling, password handling, input validation, and diagnostic redaction on all target platforms." + }, + { + "id": "SysDes-106", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software: Storage, Deployment / Operations", + "verification": "Inspection, Demo", + "statement": "Deployment verification shall verify release package creation, signing, notarization, app-store builds, and release metadata wording." + }, + { + "id": "SysDes-107", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Verification", + "verification": "Test, Demo", + "statement": "MVP acceptance verification shall demonstrate all acceptance requirements from SysRS-241 through SysRS-257." + }, + { + "id": "SysDes-108", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Software Requirements Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The SysDes shall be the mandatory architectural allocation layer between SysRS and SRS; downstream SRS requirements shall use SysDes IDs as their direct source and shall not use SysRS IDs as their direct source." + }, + { + "id": "SysDes-109", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Software Requirements Engineering", + "verification": "Review, Inspection", + "statement": "The SysDes shall provide enough allocation information for SWE.1 to derive software requirements without directly reinterpreting SysRS requirements." + }, + { + "id": "SysDes-110", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Software Requirements Engineering, Change Control, Verification", + "verification": "Review, Inspection", + "statement": "If a downstream software requirement cannot be derived from an existing SysDes design item, the SysDes shall be revised before the SRS is revised or baselined." + }, + { + "id": "SysDes-111", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Design System", + "verification": "Review, Inspection", + "statement": "The system architecture shall adopt Material 3 as the baseline UI design system for the Flutter client and shall define Chanora-specific UI semantics above it." + }, + { + "id": "SysDes-112", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Design System, Flutter UI", + "verification": "Review, Inspection", + "statement": "The system architecture shall allocate Material 3 theming to a dedicated Design System element rather than to feature screens." + }, + { + "id": "SysDes-113", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Inspection, Test", + "statement": "The Design System element shall own `ThemeData`, `ColorScheme`, typography mapping, shape mapping, elevation mapping, motion mapping, and product semantic token mapping." + }, + { + "id": "SysDes-114", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Design System", + "verification": "Review, Inspection, Test", + "statement": "The system architecture shall define Chanora semantic tokens for connection state, voice state, latency state, channel state, diagnostics state, and accessibility state." + }, + { + "id": "SysDes-115", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Adaptive Shell", + "verification": "Test, Demo", + "statement": "The system architecture shall allocate compact, medium, and expanded layout selection to an Adaptive Shell element." + }, + { + "id": "SysDes-116", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Adaptive Shell, Voice UI", + "verification": "System Test, Demo", + "statement": "The Adaptive Shell shall keep connection status and primary voice controls visible or directly reachable across compact, medium, and expanded layouts." + }, + { + "id": "SysDes-117", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Design System, Verification", + "verification": "Accessibility Test, Review", + "statement": "The system architecture shall allocate accessibility semantics, non-color-only state expression, text scaling, and focus visibility to the Flutter UI and Design System elements." + }, + { + "id": "SysDes-118", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapter, Flutter Shell", + "verification": "Platform Test, Integration Test", + "statement": "The platform architecture shall allocate safe areas, display cutouts, system bars, virtual keyboards, desktop insets, Android back behavior, and iOS navigation behavior to Platform Adapter and Flutter Shell elements." + }, + { + "id": "SysDes-119", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Localization Service, Flutter UI, Diagnostics", + "verification": "Inspection, Test", + "statement": "The system architecture shall allocate user-visible string localization to a Localization Service used by Flutter UI and diagnostics presentation." + }, + { + "id": "SysDes-120", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Protocol Adapter, Rust Core, Flutter UI", + "verification": "Integration Test, System Test", + "statement": "The system architecture shall allocate server-provided names and messages to a Content Text path that is displayed without product localization or translation." + }, + { + "id": "SysDes-121", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI, Bridge, Rust Core, Storage, Diagnostics, Protocol Adapter", + "verification": "Inspection, Integration Test", + "statement": "The system architecture shall standardize UTF-8 as the internal text representation across Flutter, Rust Core, storage, diagnostics, and protocol-facing adapter DTOs." + }, + { + "id": "SysDes-126", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "System Engineering, Software Engineering, Verification", + "verification": "Review, Inspection", + "statement": "The system architecture shall enforce lifecycle traceability so that SysDes covers SysRS, SRS covers software-related SysDes, SAD covers SRS, and SDD covers SAD." + }, + { + "id": "SysDes-127", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software Engineering, System Engineering", + "verification": "Inspection", + "statement": "The system architecture shall prevent SRS requirements from linking directly to SysRS IDs; SRS shall use `Source SysDes` only." + }, + { + "id": "SysDes-128", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software Architecture, System Engineering", + "verification": "Inspection", + "statement": "The system architecture shall prevent SAD architecture items from linking directly to SysRS or SysDes IDs; SAD shall use `Source SRS` only." + }, + { + "id": "SysDes-129", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Software Design, System Engineering", + "verification": "Inspection", + "statement": "The system architecture shall prevent SDD detailed design items from linking directly to SysRS, SysDes, or SRS IDs; SDD shall use `Source SAD` only." + }, + { + "id": "SysDes-130", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Design System, Localization Service, Flutter UI", + "verification": "Accessibility Test, Inspection", + "statement": "The system architecture shall allocate localized accessibility labels for icon-only controls to the Design System and Localization Service." + }, + { + "id": "SysDes-131", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Localization Service", + "verification": "Test", + "statement": "The system architecture shall allocate language fallback behavior to the Localization Service and require deterministic fallback to the baseline product language." + }, + { + "id": "SysDes-132", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter App Shell, Design System, Localization Service", + "verification": "Integration Test", + "statement": "The system architecture shall allocate theme and localization initialization to application startup before feature screens render user-visible content." + }, + { + "id": "SysDes-133", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapter, Release / Operations, Verification", + "verification": "Review, Platform Test", + "statement": "The system architecture shall allocate iOS runtime minimum version policy to platform configuration, platform verification, release readiness, and iOS platform services." + }, + { + "id": "SysDes-134", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Release / Operations, iOS Build Configuration, Verification", + "verification": "Release Inspection", + "statement": "The system architecture shall allocate Apple App Store Connect upload SDK compliance to release engineering and release readiness rather than runtime feature logic." + }, + { + "id": "SysDes-135", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Adapter, Android Build Configuration, Release / Operations, Verification", + "verification": "Review, Platform Test, Release Inspection", + "statement": "The system architecture shall allocate Android minimum runtime version policy and Google Play target SDK compliance to Android platform configuration, platform verification, and release readiness." + }, + { + "id": "SysDes-136", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Rust Core, Flutter UI, State Sync, Audio Subsystem, Protocol Adapter", + "verification": "Review, System Test", + "statement": "The system architecture shall constrain MVP runtime state, UI, audio routing, and protocol orchestration to one active server connection per client instance." + }, + { + "id": "SysDes-137", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Audio Subsystem, Platform Audio, Settings UI", + "verification": "Audio Test, Review", + "statement": "The system architecture shall allocate AEC, AGC, Noise Suppression, and High-Pass Filter default enablement to the audio subsystem with platform capability detection and user-setting control." + }, + { + "id": "SysDes-139", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Storage, Platform Secure Storage, Security", + "verification": "Storage Test, Security Audit", + "statement": "The system architecture shall allocate non-secret local state to SQLite or an equivalent embedded database and secrets to platform secure storage." + }, + { + "id": "SysDes-140", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Bridge, Flutter State, Rust Core", + "verification": "Architecture Review, Integration Test", + "statement": "The system architecture shall allocate Flutter/Rust communication to a stable typed bridge with generated or schema-controlled DTOs." + }, + { + "id": "SysDes-141", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Privacy, Release / Operations, Security", + "verification": "Privacy Review, Security Audit", + "statement": "The system architecture shall exclude automatic diagnostic upload, telemetry upload, and automatic crash reporting from MVP runtime behavior unless a later approved decision updates privacy, security, legal, release, and verification baseli" + }, + { + "id": "SysDes-142", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Input, Rust Core, Flutter UI, Audio Engine", + "verification": "Architecture Review, Platform Test", + "statement": "The desktop Push-to-Talk subsystem shall be allocated to a dedicated **Platform PTT Backend** layer that is selected at runtime per operating system, display server, and granted permission set, with the **Rust Core PTT State Machine** ownin" + }, + { + "id": "SysDes-143", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Input, Rust Core, Flutter UI, Bridge", + "verification": "Integration Test, Architecture Review", + "statement": "The platform PTT backend layer shall report a typed `PttCapabilityLevel` (`L0` Focused, `L1` Global-shortcut-activation, `L2` Global-hold-to-talk, `L3` Global-with-mouse-buttons, `L4` Device-aware) to the Rust Core, and the Rust Core shall " + }, + { + "id": "SysDes-144", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Audio Engine, Rust Core", + "verification": "Audio Test, Integration Test", + "statement": "The audio capture pipeline shall expose two distinct atomic states: `capture_active` (the input stream is open and frames flow into the encoder feeder) and `transmit_active` (the encoder is producing outbound Opus frames and the protocol la" + }, + { + "id": "SysDes-145", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Platform Input", + "verification": "Platform Test (Win/macOS/Linux), Architecture Review", + "statement": "The Windows desktop backend shall be allocated to a Raw-Input-first implementation with a low-level-hook fallback and a Focused-PTT terminal fallback. The macOS desktop backend shall be allocated to a permission-aware Global PTT implementat" + }, + { + "id": "SysDes-146", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Diagnostics, Platform Input", + "verification": "Privacy Review, Diagnostic Inspection, Unit Test", + "statement": "A **diagnostics sanitizer** shall sit between the platform PTT backend and the application log sink. The sanitizer shall reject any record carrying raw key codes, scan codes, virtual-key values, or key-press timing sequences before the reco" + }, + { + "id": "SysDes-147", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Flutter UI", + "verification": "User Acceptance Test, UI Review", + "statement": "The Flutter Voice UI shall surface the active PTT capability level and the active backend identifier as user-facing status (capability badge, fallback notice) so the user understands when a Global PTT binding cannot be honoured and a Focuse" + }, + { + "id": "SysDes-148", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Release / Operations, Verification", + "verification": "Release Inspection, Architecture Review", + "statement": "The release verification record shall carry per-platform PTT capability evidence (detected `PttCapabilityLevel`, active backend identifier, fallback exercised yes/no) before any release artefact may claim Global PTT support. Release notes s" + }, + { + "id": "SysDes-149", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Audio Engine, Bridge, Flutter UI", + "verification": "Unit Test, UI Review", + "statement": "The system architecture shall define a `TransmitMode` element carried as an enum at the audio + bridge + UI boundary with variants `Ptt`, `Continuous`, and a reserved `VoiceActivity` placeholder that has no allocated implementation in this " + }, + { + "id": "SysDes-150", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Audio Engine, Bridge, Flutter UI", + "verification": "Integration Test, UI Review", + "statement": "The audio engine lifecycle shall be allocated to voice-channel membership: the input and output streams shall open on the user's first voice-channel join of the session and shall close on the last voice-channel leave. The output-stream open" + }, + { + "id": "SysDes-151", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Audio Engine", + "verification": "Unit Test, Integration Test", + "statement": "A release-tail element shall be allocated to the audio subsystem as a system-level timer adapter on the `transmit_active` atomic defined in SysDes-144, parameterised by a configurable release-tail period (default 200 ms; user-configurable r" + }, + { + "id": "SysDes-152", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Android Platform Adapter, Audio Subsystem (consumer)", + "verification": "Integration Test, System Test", + "statement": "The system architecture shall allocate engagement of the Android voice-communication audio mode (for example `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mechanism) to the Android Platform Adapter a" + }, + { + "id": "SysDes-153", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Android Platform Adapter, Permission Subsystem, Audio Subsystem (consumer), Voice Subsystem (consumer), Flutter UI (re-request affordance)", + "verification": "Integration Test, System Test", + "statement": "The system architecture shall allocate Android runtime microphone permission (`RECORD_AUDIO`) acquisition and denial-handling to the Android Platform Adapter as the system-design partitioning between the Permission Subsystem and the Voice S" + }, + { + "id": "SysDes-154", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "Android Platform Adapter (owner), Audio Subsystem (consumer through trait), Platform Adapter Layer, Diagnostics (sharing-mode telemetry)", + "verification": "Integration Test, System Test, Audio Test", + "statement": "The system architecture shall allocate the Android voice audio backend as a dedicated subsystem owned by the Android Platform Adapter and exposed to the cross-platform Audio Subsystem (SE-13) through a trait-based backend abstraction, mirro" + }, + { + "id": "SysDes-155", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "macOS Build Configuration (owner), Platform Adapter Layer (macOS Platform Services), Release / Operations (Release Pipeline), Verification", + "verification": "Review, Platform Test (macOS), Release Inspection", + "statement": "The system architecture shall allocate the macOS runtime baseline as a dedicated platform-baseline element parallel to SysDes-133 (iOS) and SysDes-135 (Android), covering (a) the macOS deployment-target policy as a single-source-of-truth sy" + }, + { + "id": "SysDes-156", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "SE-13 (Audio Subsystem) — owns the realtime path being measured; the realtime callback, the Opus encode/decode paths, and the resampler are all SE-13 surfaces", + "verification": "Automated Benchmark Execution (criterion crate per SDD); Inspection of the JSON baseline records committed to the default branch", + "statement": "The system architecture shall allocate to SE-13 (Audio Subsystem) the obligation to expose its realtime capture and playback paths to benchmark instrumentation, such that the maintained numeric performance baselines authorized by SysRS-307 " + }, + { + "id": "SysDes-157", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "SE-18 (Deployment and Release Environment) — owns CI/CD per SysDes-036; the CI workflow definitions, the GitHub Actions runner selection, the PR status-check surface, the PR comment rendering, and the baseline-update workflow all live here", + "verification": "Demo (a CI run on a synthetic PR demonstrates the markdown table report, the visual markers, the non-blocking `success` status on a simulated regression, and the \"no baseline\" fallback on a metric with no prior baseline)", + "statement": "The system architecture shall allocate to SE-18 (Deployment and Release Environment) the integration of the realtime-audio benchmark suite (SysDes-156) into the existing CI workflow as an **advisory** regression-reporting surface, satisfyin" + }, + { + "id": "SysDes-158", + "source": "architecture/sysdes.md", + "stage": "P0 / MVP", + "allocation": "SE-18 (Deployment and Release Environment) — the comparison logic lives in CI tooling co-located with the workflow authored in SysDes-157", + "verification": "Review (the per-metric tolerance values are subject to periodic review; SDD ratifies the values as authored here and may refine the harness implementation; future SAD/SDD revisions may re-tune the values as baseline noise characteristics are observed empirically)", + "statement": "The system architecture shall allocate to SE-18 (Deployment and Release Environment) the per-metric tolerance window and the baseline-comparison methodology used by the advisory CI surface (SysDes-157), satisfying SysRS-309. The tolerance w" + } + ], + "P1": [ + { + "id": "SAD-035", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Storage, Platform Secure Storage", + "verification": "Security Test, Inspection", + "statement": "The architecture shall isolate local storage and secure storage behavior behind storage components." + }, + { + "id": "SAD-036", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics", + "verification": "Audit, Test", + "statement": "The architecture shall isolate diagnostics and redaction behavior in diagnostics components." + }, + { + "id": "SAD-037", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Build, Release, Operations", + "verification": "Inspection, Demo", + "statement": "The architecture shall isolate deployment, release, and packaging support in build and release assets." + }, + { + "id": "SAD-038", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Verification Support", + "verification": "Review, Inspection", + "statement": "The architecture shall provide verification hooks for requirements traceability and platform validation." + }, + { + "id": "SAD-039", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Flutter State", + "verification": "Unit Test, Review", + "statement": "The architecture shall use view models as the boundary between feature screens and application state." + }, + { + "id": "SAD-040", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Bridge Facade", + "verification": "Inspection, Integration Test", + "statement": "The architecture shall use a bridge facade as the only Flutter-to-Rust command boundary." + }, + { + "id": "SAD-041", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Bridge, Flutter State", + "verification": "Integration Test", + "statement": "The architecture shall map asynchronous Rust events into Flutter UI state updates." + }, + { + "id": "SAD-042", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Verification Support", + "verification": "Review, Test", + "statement": "The architecture shall define test seams for theme, localization, adaptive shell, platform services, and bridge facade." + }, + { + "id": "SAD-043", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Design System, Flutter App Shell", + "verification": "Widget Test", + "statement": "The architecture shall support light and dark theme mode behavior." + }, + { + "id": "SAD-044", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Design System", + "verification": "Widget Test", + "statement": "The architecture shall allow dynamic color as an optional enhancement without overriding Chanora semantic state tokens." + }, + { + "id": "SAD-051", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Architecture", + "verification": "Review, Inspection", + "statement": "The architecture shall include a SWE.2 evaluation checklist covering software elements, allocation, interfaces, dynamic behavior, resource objectives, feasibility, testability, traceability, consistency, and communication." + }, + { + "id": "SAD-053", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Architecture", + "verification": "Review, Analysis", + "statement": "The architecture shall include performance and resource views for UI responsiveness, audio latency, memory growth, reconnect, localization, and diagnostics." + }, + { + "id": "SAD-054", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Architecture", + "verification": "Review", + "statement": "The architecture shall document assumptions and dependencies that affect design feasibility." + }, + { + "id": "SAD-057", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Architecture, Software Design", + "verification": "Review, Inspection", + "statement": "The architecture shall explicitly support detailed design refinement of interface names, types, units, resolutions, ranges, and default values." + }, + { + "id": "SAD-058", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Architecture, Software Design", + "verification": "Review", + "statement": "The architecture shall define software units as the target decomposition level for SWE.3 detailed design." + }, + { + "id": "SAD-059", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Design, Verification", + "verification": "Review, Inspection", + "statement": "The architecture shall define that SDD detail must be sufficient to support implementation and unit verification." + }, + { + "id": "SAD-060", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Software Architecture, Software Design, Verification", + "verification": "Review", + "statement": "The architecture shall require SAD and SDD changes to be communicated to relevant affected parties before downstream implementation or verification updates are treated as baseline." + }, + { + "id": "SAD-066", + "source": "architecture/sad.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Platform Audio Adapter", + "verification": "Architecture Review, Audio Test", + "statement": "The software architecture shall hide platform-native and fallback audio processing implementations behind the audio subsystem interface." + }, + { + "id": "SDD-051", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`ArchitectureViewDocs` shall maintain context, container, component, runtime, deployment, data, security, diagnostics, UI, audio, protocol, and i18n views." + }, + { + "id": "SDD-052", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`ArchitectureViewDocs` shall maintain an ADR index for accepted, deprecated, and superseded architectural decisions." + }, + { + "id": "SDD-053", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`DeploymentConfig` shall define platform-specific packaging and release configuration units." + }, + { + "id": "SDD-054", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Unit Test, Audit", + "statement": "`DiagnosticsArchitecture` shall centralize logging, event keys, localized descriptions, redaction, and export presentation." + }, + { + "id": "SDD-055", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`ArchitectureTraceChecker` shall check that SDD items reference only SAD IDs." + }, + { + "id": "SDD-056", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`ArchitectureTraceChecker` shall check that SAD items reference only SRS IDs." + }, + { + "id": "SDD-057", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`ArchitectureViewDocs` shall define reviewable architecture views for context, containers, components, runtime behavior, deployment, data, security, diagnostics, UI, audio, protocol, and i18n." + }, + { + "id": "SDD-058", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`ArchitectureViewDocs` shall define an ADR record structure with ID, title, status, decision, rationale, consequences, affected units, and change history." + }, + { + "id": "SDD-059", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`InterfaceDetailCatalog` shall refine SAD architectural interfaces into unit-level interface entries." + }, + { + "id": "SDD-060", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`InterfaceDetailCatalog` shall define command, event, localization, Unicode, diagnostics, adaptive layout, audio meter, and platform-intent interfaces." + }, + { + "id": "SDD-061", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review, Analysis", + "statement": "`PerformanceDesignNotes` shall record UI responsiveness, audio latency, memory growth, reconnect, localization, and diagnostics resource considerations." + }, + { + "id": "SDD-062", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`AssumptionRegister` shall record software design assumptions and dependencies that affect feasibility." + }, + { + "id": "SDD-064", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review, Inspection", + "statement": "Each software unit detailed design shall include responsibility, inputs, outputs, interfaces, dynamic behavior, error behavior, resource behavior, and verification hooks where applicable." + }, + { + "id": "SDD-065", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`UnitConstructionGuideline` shall state that software units are constructed according to the SDD rather than reverse-documented from code." + }, + { + "id": "SDD-067", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`SoftwareUnitTraceChecker` shall support impact analysis from changed SAD items to affected SDD items." + }, + { + "id": "SDD-068", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`DetailedDesignReviewRecord` shall capture review evidence for SDD completeness, testability, and consistency with SAD." + }, + { + "id": "SDD-069", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Review", + "statement": "`UnitVerificationHandoff` shall identify verification method candidates for each software unit." + }, + { + "id": "SDD-070", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Inspection", + "statement": "`SoftwareUnitRegistry` shall maintain the list of software units, their owning component, source SAD items, and implementation status." + }, + { + "id": "SDD-076", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Unit Test, Audio Test", + "statement": "`AudioProcessingBackendSelector` shall select platform-native audio processing first where available and stable and isolate any fallback backend behind the audio subsystem interface." + }, + { + "id": "SDD-109", + "source": "architecture/sdd.md", + "stage": "P1 / Beta", + "allocation": "", + "verification": "Build Test, Release Inspection", + "statement": "`AndroidAaBuildPipeline` shall define the Android App Bundle (`.aab`) packaging pipeline used for release builds, covering bundletool configuration, ABI splits, signing assertions in CI, and version-code / version-name derivation." + }, + { + "id": "SRS-028", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Flutter UI, Diagnostics", + "verification": "UI Test, Security Audit", + "statement": "The software shall provide a diagnostics UI that allows user-initiated diagnostic export and displays user-safe diagnostic status." + }, + { + "id": "SRS-053", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Protocol Adapter, Bridge", + "verification": "Architecture Review", + "statement": "The Protocol Adapter shall support future patching, forking, or replacement of protocol implementation without changing Flutter UI contracts." + }, + { + "id": "SRS-061", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "State Sync, Diagnostics", + "verification": "Demo", + "statement": "The State Synchronization Engine shall provide replayable event recording hooks for debugging state synchronization." + }, + { + "id": "SRS-070", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Platform Adapters", + "verification": "Inspection", + "statement": "The Audio Subsystem shall provide an audio processing backend abstraction supporting platform-native and Rust-based implementations." + }, + { + "id": "SRS-075", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Flutter UI, Storage", + "verification": "Audio Test, UI Test", + "statement": "The Audio Subsystem shall support per-user volume during playback." + }, + { + "id": "SRS-082", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Platform Adapters", + "verification": "Platform Integration Test", + "statement": "The Audio Subsystem shall recover from audio route or device changes by reconfiguring audio streams or entering a user-safe blocked/degraded state." + }, + { + "id": "SRS-083", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Diagnostics", + "verification": "Demo", + "statement": "The Audio Subsystem shall provide audio loopback and processing test hooks for verification." + }, + { + "id": "SRS-085", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Storage", + "verification": "Unit Test, Integration Test", + "statement": "The software shall persist recent servers in local non-secret storage." + }, + { + "id": "SRS-087", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Storage, Flutter UI", + "verification": "Unit Test, Integration Test", + "statement": "The software shall persist UI settings in local non-secret storage." + }, + { + "id": "SRS-088", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Storage, Audio Subsystem", + "verification": "Unit Test", + "statement": "The software shall persist per-user volume and per-user mute preferences where applicable." + }, + { + "id": "SRS-096", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, Flutter UI", + "verification": "Demo, Security Audit", + "statement": "The software shall support user-initiated diagnostic export." + }, + { + "id": "SRS-097", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, Protocol Adapter, State Sync", + "verification": "Demo", + "statement": "The software shall provide protocol event recording in development or diagnostics mode." + }, + { + "id": "SRS-098", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, State Sync", + "verification": "Demo", + "statement": "The software shall provide event replay support for state synchronization debugging." + }, + { + "id": "SRS-099", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, Audio Subsystem, Platform Adapters", + "verification": "Demo", + "statement": "The software shall provide audio diagnostics for capture, processing backend, codec, jitter buffer, mixer, playback, and route/device status." + }, + { + "id": "SRS-100", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, Rust Core, Protocol Adapter", + "verification": "Demo", + "statement": "The software shall provide network diagnostics for connection status, reconnect attempts, latency where available, and protocol-relevant network failures." + }, + { + "id": "SRS-109", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Platform Adapters, Flutter UI", + "verification": "Platform Integration Test", + "statement": "The software shall provide a platform adapter interface for notification permission requests where required." + }, + { + "id": "SRS-112", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "Android Integration Test", + "statement": "The Android software shall handle audio focus and Bluetooth route changes where platform APIs expose them." + }, + { + "id": "SRS-113", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Platform Adapters, Audio Subsystem", + "verification": "Desktop Integration Test", + "statement": "The desktop software shall support validated audio backends for Windows, macOS, and Linux." + }, + { + "id": "SRS-114", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Platform Adapters, Rust Core, Audio Subsystem", + "verification": "Platform Integration Test", + "statement": "The software shall provide platform adapter lifecycle events for foreground/background, app resume, app suspend, audio interruption, and shutdown where supported." + }, + { + "id": "SRS-115", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Platform Adapters, Diagnostics, Flutter UI", + "verification": "Review, Demo", + "statement": "The software shall document unsupported or degraded platform behaviors through user-safe status and diagnostics." + }, + { + "id": "SRS-116", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Application Container, Deployment Scripts", + "verification": "Build Test", + "statement": "The software shall produce build artifacts for Windows installer packaging." + }, + { + "id": "SRS-118", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Application Container, Deployment Scripts", + "verification": "Build Test", + "statement": "The software shall produce Linux release packages using the selected supported package formats." + }, + { + "id": "SRS-119", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Application Container, Deployment Scripts", + "verification": "Build Test", + "statement": "The software shall produce Android AAB release builds." + }, + { + "id": "SRS-120", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Application Container, Deployment Scripts", + "verification": "Build Test", + "statement": "The software shall produce iOS TestFlight and App Store release builds when signing assets are available." + }, + { + "id": "SRS-122", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Application Container, Diagnostics, Deployment Scripts", + "verification": "Inspection, Security Review", + "statement": "The software shall provide release-build configuration that disables development-only diagnostic capture unless explicitly enabled for test builds." + }, + { + "id": "SRS-127", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Deployment Scripts, Application Container", + "verification": "Build Test, Release Audit", + "statement": "The software shall include release verification support for package creation, signing, notarization, app-store builds, and release metadata wording." + }, + { + "id": "SRS-138", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Platform Adapters, Audio Subsystem, Deployment Scripts", + "verification": "Review, Platform Test", + "statement": "The software team shall analyze operating-environment impacts of mobile lifecycle, foreground service behavior, AVAudioSession behavior, route changes, and app store policies." + }, + { + "id": "SRS-153", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Flutter App Shell", + "verification": "Widget Test, Integration Test", + "statement": "The medium layout shall support side navigation or equivalent navigation rail behavior where available display width permits." + }, + { + "id": "SRS-160", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Flutter UI", + "verification": "Widget Test, System Test", + "statement": "The software shall support visible focus indication and logical focus traversal for desktop and tablet keyboard use." + }, + { + "id": "SRS-163", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Flutter App Shell, Platform Adapter", + "verification": "Platform Test", + "statement": "The software shall model Android back navigation as a platform back intent handled by the shell or platform service layer." + }, + { + "id": "SRS-164", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Flutter App Shell, Platform Adapter", + "verification": "Platform Test", + "statement": "The software shall model iOS navigation gestures, safe areas, keyboard avoidance, and haptics through platform-aware UI services." + }, + { + "id": "SRS-169", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Localization Service, Flutter UI", + "verification": "Review, Inspection", + "statement": "The software shall allow additional locales to be added without changing protocol, audio, state synchronization, or storage modules." + }, + { + "id": "SRS-173", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Protocol Adapter, Platform Adapter, Bridge", + "verification": "Inspection, Integration Test", + "statement": "The software shall isolate non-UTF-8 or platform-specific string conversion in boundary adapters." + }, + { + "id": "SRS-176", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Localization Service, Diagnostics UI", + "verification": "Localization Test", + "statement": "The software shall use locale-aware formatting for user-visible dates, times, numbers, and diagnostic timestamps." + }, + { + "id": "SRS-177", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics", + "verification": "Inspection, Test", + "statement": "The software shall keep diagnostic event keys, codes, and machine-readable fields language-neutral." + }, + { + "id": "SRS-178", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, Localization Service", + "verification": "Inspection, Localization Test", + "statement": "The software shall allow user-facing diagnostic descriptions to be localized independently of machine-readable diagnostic fields." + }, + { + "id": "SRS-179", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "UX, Software Engineering", + "verification": "Review", + "statement": "The software shall maintain UI/UX guideline, design token, component catalog, adaptive layout, and platform behavior documents as downstream design baselines." + }, + { + "id": "SRS-191", + "source": "requirements/srs.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Platform Audio Adapter", + "verification": "Architecture Review, Audio Test", + "statement": "The software shall use platform-native audio processing first for MVP where available and stable, and shall isolate any Rust/WebRTC-style fallback behind the audio subsystem boundary." + }, + { + "id": "SysDes-122", + "source": "architecture/sysdes.md", + "stage": "P1 / Beta", + "allocation": "Protocol Adapter, Platform Adapter, Bridge", + "verification": "Inspection, Integration Test", + "statement": "The system architecture shall isolate non-UTF-8 or platform-specific string conversion at explicit boundary adapters." + }, + { + "id": "SysDes-123", + "source": "architecture/sysdes.md", + "stage": "P1 / Beta", + "allocation": "Flutter UI, Localization Service", + "verification": "Test", + "statement": "The system architecture shall allocate bidirectional text rendering and locale-aware formatting to Flutter UI and Localization Service components." + }, + { + "id": "SysDes-124", + "source": "architecture/sysdes.md", + "stage": "P1 / Beta", + "allocation": "Diagnostics, Localization Service", + "verification": "Inspection, Test", + "statement": "The diagnostics architecture shall keep machine-readable diagnostic keys language-neutral while allowing user-facing descriptions to be localized." + }, + { + "id": "SysDes-125", + "source": "architecture/sysdes.md", + "stage": "P1 / Beta", + "allocation": "System Engineering, UX, Software Team", + "verification": "Review", + "statement": "The system architecture shall define UI/UX guideline, design token, component catalog, adaptive layout, and platform behavior documents as downstream design baselines." + }, + { + "id": "SysDes-138", + "source": "architecture/sysdes.md", + "stage": "P1 / Beta", + "allocation": "Audio Subsystem, Platform Audio Adapter, Rust Core", + "verification": "Architecture Review, Audio Test", + "statement": "The system architecture shall prefer platform-native audio processing for MVP and isolate any Rust/WebRTC-style fallback behind the audio subsystem boundary." + } + ], + "P2": [ + { + "id": "SAD-045", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Software Design", + "verification": "Inspection", + "statement": "The architecture shall keep future SDD derivation independent from non-SAD requirement IDs." + }, + { + "id": "SAD-046", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Software Architecture", + "verification": "Review", + "statement": "The architecture shall include C4-style architecture views in the SAD baseline." + }, + { + "id": "SAD-047", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Software Architecture", + "verification": "Review", + "statement": "The architecture shall include ADRs for architecturally significant decisions." + }, + { + "id": "SAD-048", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Software Architecture", + "verification": "Review", + "statement": "The architecture shall identify software stakeholders and architecture concerns." + }, + { + "id": "SAD-049", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Release Architecture", + "verification": "Review, Inspection", + "statement": "The architecture shall include deployment and operational architecture views." + }, + { + "id": "SAD-050", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Diagnostics Architecture", + "verification": "Review, Test", + "statement": "The architecture shall include diagnostics and observability architecture views." + }, + { + "id": "SAD-055", + "source": "architecture/sad.md", + "stage": "P2 / Production", + "allocation": "Software Architecture", + "verification": "Review", + "statement": "The architecture shall include a glossary for architecture-specific terms." + }, + { + "id": "SDD-063", + "source": "architecture/sdd.md", + "stage": "P2 / Production", + "allocation": "", + "verification": "Review", + "statement": "`ArchitectureGlossary` shall provide definitions for architecture and detailed design terms." + }, + { + "id": "SRS-117", + "source": "requirements/srs.md", + "stage": "P2 / Production", + "allocation": "Application Container, Deployment Scripts", + "verification": "Build/Release Audit", + "statement": "The software shall produce signed and notarized macOS release builds for production release." + }, + { + "id": "SRS-154", + "source": "requirements/srs.md", + "stage": "P2 / Production", + "allocation": "Flutter App Shell", + "verification": "Integration Test, System Test", + "statement": "The expanded layout shall support persistent side panes and persistent voice controls where available display width permits." + }, + { + "id": "SRS-175", + "source": "requirements/srs.md", + "stage": "P2 / Production", + "allocation": "Flutter UI", + "verification": "Localization Test", + "statement": "The software shall support bidirectional text display where the Flutter platform text engine supports it." + } + ], + "SOP": [ + { + "id": "SysRS-001", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall be a cross-platform client application for channel-based voice communication." + }, + { + "id": "SysRS-002", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support Windows, macOS, Linux, iOS, and Android as target client platforms." + }, + { + "id": "SysRS-003", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall use Flutter for the user-facing client interface." + }, + { + "id": "SysRS-004", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall use Rust Core for protocol handling, connection management, state synchronization, audio processing, storage coordination, diagnostics, and business logic." + }, + { + "id": "SysRS-005", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall use `tsclientlib` as the TeamSpeak-compatible protocol client library." + }, + { + "id": "SysRS-006", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall operate as an independent client and shall not present itself as an official TeamSpeak product." + }, + { + "id": "SysRS-007", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow users to connect to TeamSpeak 3-compatible servers reachable from the client device network." + }, + { + "id": "SysRS-008", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow users to participate in channel-based voice communication when the external server and user permissions allow it." + }, + { + "id": "SysRS-009", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow users to send and receive supported text messages when the external server and user permissions allow it." + }, + { + "id": "SysRS-010", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide local bookmark, recent server, identity reference, UI setting, and audio setting management on the client device." + }, + { + "id": "SysRS-011", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support end users who manually connect to compatible voice servers." + }, + { + "id": "SysRS-012", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support regular users who rely on saved bookmarks, persistent identity, audio settings, and common voice controls." + }, + { + "id": "SysRS-013", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support testers and support operators who export diagnostics for troubleshooting." + }, + { + "id": "SysRS-014", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The SysRS shall provide requirements traceability suitable for engineering, QA, system administration, and release operations." + }, + { + "id": "SysRS-015", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The SysRS shall document external environment dependencies that may need administrator configuration, including network reachability and OS-level audio permissions." + }, + { + "id": "SysRS-016", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall treat external TeamSpeak 3-compatible servers as external systems outside Chanora control." + }, + { + "id": "SysRS-017", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not require a Chanora-operated central server for MVP voice, channel, or text operation." + }, + { + "id": "SysRS-018", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not host or operate TeamSpeak-compatible server functionality in the MVP." + }, + { + "id": "SysRS-019", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall rely on operating system services for microphone permission, secure storage, audio routing, notifications, and mobile lifecycle behavior." + }, + { + "id": "SysRS-020", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall treat app stores, package repositories, installers, and update services as deployment environment components." + }, + { + "id": "SysRS-021", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall treat physical microphones, speakers, wired headsets, USB audio devices, and Bluetooth audio devices as external hardware interfaces." + }, + { + "id": "SysRS-022", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall treat routers, firewalls, VPNs, NAT devices, and ISPs as external network environment components." + }, + { + "id": "SysRS-023", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall expose user-safe errors when external dependencies prevent successful operation." + }, + { + "id": "SysRS-024", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a Flutter UI component responsible for rendering screens, receiving user input, and presenting application state." + }, + { + "id": "SysRS-025", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a Flutter State Layer responsible for UI state derived from Rust Core events." + }, + { + "id": "SysRS-026", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a Bridge Layer responsible for commands, DTOs, asynchronous calls, and event streams between Flutter and Rust Core." + }, + { + "id": "SysRS-027", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a Rust Core component responsible for authoritative connection, protocol, state, audio, storage, settings, and diagnostics behavior." + }, + { + "id": "SysRS-028", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a protocol adapter component that isolates direct `tsclientlib` usage." + }, + { + "id": "SysRS-029", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a state synchronization component that implements snapshot + delta state handling." + }, + { + "id": "SysRS-030", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include an audio subsystem component that coordinates capture, processing, encoding, decoding, jitter buffering, mixing, and playback." + }, + { + "id": "SysRS-031", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a local storage component for non-secret data such as bookmarks, recent servers, UI settings, and audio settings." + }, + { + "id": "SysRS-032", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a secure storage adapter for private identities, passwords, and future sensitive tokens." + }, + { + "id": "SysRS-033", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include a diagnostics component for structured logging, redaction, event recording, event replay, audio diagnostics, network diagnostics, and user-initiated export." + }, + { + "id": "SysRS-034", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall include platform adapter components for desktop and mobile platform services." + }, + { + "id": "SysRS-035", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall use a CPU architecture supported by Flutter, Rust, and the selected target platform." + }, + { + "id": "SysRS-036", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall provide sufficient CPU capacity to run the Chanora application, Opus-compatible voice processing, and enabled audio processing features in real time." + }, + { + "id": "SysRS-037", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall provide sufficient memory for the Chanora application to run without unbounded growth in logs, chat history, audio buffers, or event queues." + }, + { + "id": "SysRS-038", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall provide persistent local storage for Chanora application data, settings, logs, and cached metadata." + }, + { + "id": "SysRS-039", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall provide a microphone or supported audio input device for voice transmission." + }, + { + "id": "SysRS-040", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall provide speakers, headphones, or a supported audio output device for voice playback." + }, + { + "id": "SysRS-041", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device shall provide network connectivity to the selected compatible voice server." + }, + { + "id": "SysRS-042", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The desktop client environment should be validated on devices with at least 4 GB RAM for MVP operation." + }, + { + "id": "SysRS-043", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The desktop client environment should be validated with at least 500 MB free local storage for installation, settings, logs, and diagnostic bundle creation." + }, + { + "id": "SysRS-044", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device should provide stable audio device identifiers where the target platform supports persistent device selection." + }, + { + "id": "SysRS-045", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device should provide hardware or OS support for low-latency audio capture and playback." + }, + { + "id": "SysRS-046", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client device should provide Bluetooth audio support where the target operating system supports it." + }, + { + "id": "SysRS-047", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall document platform-specific hardware limitations discovered during compatibility testing." + }, + { + "id": "SysRS-048", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Windows runtime environment shall support native desktop window integration for the Chanora application." + }, + { + "id": "SysRS-049", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Windows runtime environment shall provide microphone capture, speaker/headphone playback, audio device selection, and secure credential storage to the Chanora application." + }, + { + "id": "SysRS-050", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The macOS runtime environment shall support native desktop window integration for the Chanora application." + }, + { + "id": "SysRS-051", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The macOS runtime environment shall provide microphone permission prompts, microphone capture, speaker/headphone playback, audio device selection, and Keychain access to the Chanora application." + }, + { + "id": "SysRS-052", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Linux runtime environment shall support the desktop environments targeted by the selected release package." + }, + { + "id": "SysRS-053", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Linux runtime environment shall provide microphone capture, speaker/headphone playback, audio device selection, and secure storage through Secret Service, libsecret, or equivalent where available." + }, + { + "id": "SysRS-054", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The iOS runtime environment shall provide microphone permissions, foreground voice session capability, audio route change handling, audio interruption recovery, Keychain access, and AVAudioSession behavior to the Chanora application." + }, + { + "id": "SysRS-055", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Android runtime environment shall provide microphone permissions, foreground voice session capability, foreground service behavior, audio focus, Bluetooth route handling, Android Keystore access, and production audio integration through" + }, + { + "id": "SysRS-056", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall define minimum supported operating system versions for each target platform before beta release." + }, + { + "id": "SysRS-057", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall document OS-level permissions required by each target platform before public release." + }, + { + "id": "SysRS-058", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall fail safely with a user-safe message when a required OS service is unavailable." + }, + { + "id": "SysRS-059", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support microphone input for voice transmission." + }, + { + "id": "SysRS-060", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support speaker or headphone output for voice playback." + }, + { + "id": "SysRS-061", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support audio input and output device selection where the target platform exposes selectable devices." + }, + { + "id": "SysRS-062", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall handle audio route changes where the target platform reports them." + }, + { + "id": "SysRS-063", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall recover gracefully from audio device changes where possible." + }, + { + "id": "SysRS-064", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support Echo Canceller for reducing playback audio leaking into microphone input." + }, + { + "id": "SysRS-065", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support Automatic Gain Control for normalizing microphone input level." + }, + { + "id": "SysRS-066", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support Noise Suppression for reducing stationary background noise." + }, + { + "id": "SysRS-067", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support High-Pass Filter for reducing low-frequency rumble and handling noise." + }, + { + "id": "SysRS-068", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support an audio processing backend abstraction so platform-native and Rust-based processing can be selected per platform." + }, + { + "id": "SysRS-069", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow Echo Canceller to use playback reference audio when the selected implementation requires it." + }, + { + "id": "SysRS-070", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall expose audio processing settings to Rust Core and persist them locally." + }, + { + "id": "SysRS-071", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide conservative default settings for Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter." + }, + { + "id": "SysRS-072", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow platform-specific disabling of audio processing features when a feature is unstable or incompatible with a device configuration." + }, + { + "id": "SysRS-073", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall provide an audio loopback test tool for development and compatibility testing." + }, + { + "id": "SysRS-074", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall provide an audio processing test tool for development and compatibility testing." + }, + { + "id": "SysRS-075", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client network environment shall provide IP network connectivity from the client device to the selected compatible voice server." + }, + { + "id": "SysRS-076", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to configure the server host or IP address." + }, + { + "id": "SysRS-077", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to configure the server port." + }, + { + "id": "SysRS-078", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application should support a default TeamSpeak 3-compatible voice port when the user does not provide an explicit port." + }, + { + "id": "SysRS-079", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client network environment shall permit the protocol traffic required by `tsclientlib` and the selected compatible server." + }, + { + "id": "SysRS-080", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client network environment shall support latency suitable for real-time voice communication under expected operating conditions." + }, + { + "id": "SysRS-081", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The client network environment should minimize packet loss for acceptable voice quality." + }, + { + "id": "SysRS-082", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall detect recoverable network failures where possible." + }, + { + "id": "SysRS-083", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall enter reconnect behavior after recoverable network failures." + }, + { + "id": "SysRS-084", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall rebuild server state from a fresh snapshot after reconnect." + }, + { + "id": "SysRS-085", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not require VPN connectivity unless the target server or user environment requires it." + }, + { + "id": "SysRS-086", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall present network failures through user-safe error messages." + }, + { + "id": "SysRS-087", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application should include network diagnostics in user-initiated diagnostic exports." + }, + { + "id": "SysRS-088", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall be TeamSpeak 3-compatible for Chanora MVP operation." + }, + { + "id": "SysRS-089", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall be reachable from the client device network." + }, + { + "id": "SysRS-090", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall permit client connection using the identity, nickname, password, and permissions supplied by the user." + }, + { + "id": "SysRS-091", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall expose server information required for initial synchronization." + }, + { + "id": "SysRS-092", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall expose channel listing required for the channel tree." + }, + { + "id": "SysRS-093", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall expose client listing required for the online client view." + }, + { + "id": "SysRS-094", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall support channel join operations for accessible channels." + }, + { + "id": "SysRS-095", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall emit channel movement events required for state synchronization." + }, + { + "id": "SysRS-096", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall emit client join and leave events required for state synchronization." + }, + { + "id": "SysRS-097", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall emit channel create, update, and delete events required for state synchronization where those events occur." + }, + { + "id": "SysRS-098", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall support channel text message send and receive where user permissions allow." + }, + { + "id": "SysRS-099", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall support voice packet send and receive where user permissions allow." + }, + { + "id": "SysRS-100", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The external voice server shall expose disconnect behavior or connection failure signals that can be mapped by the protocol adapter." + }, + { + "id": "SysRS-101", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall document server-side permissions that can affect channel join, voice transmission, and text messaging." + }, + { + "id": "SysRS-102", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to manually connect to a compatible server." + }, + { + "id": "SysRS-103", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to provide hostname or IP address, port, nickname, and optional server password before connection." + }, + { + "id": "SysRS-104", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support persistent local identity for compatible server authentication." + }, + { + "id": "SysRS-105", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall display connection status to the user." + }, + { + "id": "SysRS-106", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to disconnect from the active server connection." + }, + { + "id": "SysRS-107", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall display the server channel tree after synchronization." + }, + { + "id": "SysRS-108", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall display online clients after synchronization." + }, + { + "id": "SysRS-109", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to join an accessible voice channel." + }, + { + "id": "SysRS-110", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow the user to send and receive channel text messages where permitted." + }, + { + "id": "SysRS-111", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall capture and transmit voice where permitted." + }, + { + "id": "SysRS-112", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall receive and play voice where permitted." + }, + { + "id": "SysRS-113", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide microphone mute control." + }, + { + "id": "SysRS-114", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide output deaf control." + }, + { + "id": "SysRS-115", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide push-to-talk control." + }, + { + "id": "SysRS-116", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall display microphone input level where available." + }, + { + "id": "SysRS-117", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall display speaking indicators where available." + }, + { + "id": "SysRS-118", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow users to save and reuse server bookmarks." + }, + { + "id": "SysRS-119", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow users to configure audio processing features." + }, + { + "id": "SysRS-120", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall allow users to export redacted diagnostics." + }, + { + "id": "SysRS-121", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall use `tsclientlib` inside the protocol subsystem." + }, + { + "id": "SysRS-122", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall isolate direct `tsclientlib` calls inside the `chanora_protocol` component." + }, + { + "id": "SysRS-123", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall prevent raw `tsclientlib` types from crossing into Flutter UI or Flutter State Layer." + }, + { + "id": "SysRS-124", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall convert `tsclientlib` errors into Chanora protocol errors." + }, + { + "id": "SysRS-125", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall convert `tsclientlib` events into internal protocol events." + }, + { + "id": "SysRS-126", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support future patching, replacement, or forking of protocol implementation without changing Flutter UI contracts." + }, + { + "id": "SysRS-127", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall provide protocol compatibility test coverage for MVP features." + }, + { + "id": "SysRS-128", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall include a protocol probe tool for validating target server compatibility." + }, + { + "id": "SysRS-129", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall maintain one authoritative connection state per active server connection." + }, + { + "id": "SysRS-130", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall synchronize state using a snapshot + delta model." + }, + { + "id": "SysRS-131", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall emit a full snapshot after initial synchronization." + }, + { + "id": "SysRS-132", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall emit delta events after live server-side changes." + }, + { + "id": "SysRS-133", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall apply protocol events through deterministic reducers." + }, + { + "id": "SysRS-134", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall preserve event ordering per connection." + }, + { + "id": "SysRS-135", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall rebuild state from a fresh snapshot after reconnect." + }, + { + "id": "SysRS-136", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall prevent Flutter from directly mutating server state." + }, + { + "id": "SysRS-137", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall implement the defined connection state machine from Disconnected through Connecting, Synchronizing, Connected, and Reconnecting." + }, + { + "id": "SysRS-138", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not automatically reconnect after user-triggered disconnect." + }, + { + "id": "SysRS-139", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall include an event replay tool for development and debugging of state synchronization." + }, + { + "id": "SysRS-140", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store server bookmarks locally." + }, + { + "id": "SysRS-141", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store recent servers locally." + }, + { + "id": "SysRS-142", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store audio settings locally." + }, + { + "id": "SysRS-143", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store UI settings locally." + }, + { + "id": "SysRS-144", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store per-user volume preferences locally where applicable." + }, + { + "id": "SysRS-145", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store muted user preferences locally where applicable." + }, + { + "id": "SysRS-146", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall use SQLite or an equivalent embedded database for non-secret local data." + }, + { + "id": "SysRS-147", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall use platform secure storage for sensitive data." + }, + { + "id": "SysRS-148", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store identity private keys using platform secure storage." + }, + { + "id": "SysRS-149", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store server passwords using platform secure storage." + }, + { + "id": "SysRS-150", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not store private keys in plaintext files." + }, + { + "id": "SysRS-151", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not write passwords to logs." + }, + { + "id": "SysRS-152", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall redact secrets from diagnostic exports." + }, + { + "id": "SysRS-153", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall store sensitive data using platform secure storage." + }, + { + "id": "SysRS-154", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall redact secrets from logs." + }, + { + "id": "SysRS-155", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall redact secrets from diagnostic bundles." + }, + { + "id": "SysRS-156", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid exposing internal stack traces to normal users." + }, + { + "id": "SysRS-157", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall validate user input before passing it to protocol operations." + }, + { + "id": "SysRS-158", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Windows runtime environment shall support Windows Credential Manager, DPAPI, or equivalent secure credential storage for the Chanora application." + }, + { + "id": "SysRS-159", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The macOS runtime environment shall support Keychain-based secure credential storage for the Chanora application." + }, + { + "id": "SysRS-160", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The iOS runtime environment shall support Keychain-based secure credential storage for the Chanora application." + }, + { + "id": "SysRS-161", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Android runtime environment shall support Android Keystore or equivalent secure credential storage for the Chanora application." + }, + { + "id": "SysRS-162", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Linux runtime environment shall support Secret Service, libsecret, or equivalent secure storage where available." + }, + { + "id": "SysRS-163", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall minimize collection of personal data." + }, + { + "id": "SysRS-164", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall require user action before exporting diagnostics." + }, + { + "id": "SysRS-165", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall explain microphone permission usage before requesting permission where platform guidelines allow." + }, + { + "id": "SysRS-166", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall explain notification permission usage before requesting permission where platform guidelines allow." + }, + { + "id": "SysRS-167", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not automatically upload diagnostics in MVP." + }, + { + "id": "SysRS-168", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall produce structured diagnostic logs." + }, + { + "id": "SysRS-169", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support log redaction." + }, + { + "id": "SysRS-170", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support protocol event recording in development or diagnostics mode." + }, + { + "id": "SysRS-171", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support event replay for debugging state synchronization." + }, + { + "id": "SysRS-172", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support audio diagnostics." + }, + { + "id": "SysRS-173", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support network diagnostics." + }, + { + "id": "SysRS-174", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall support user-initiated diagnostic export." + }, + { + "id": "SysRS-175", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "Diagnostic export shall exclude or redact sensitive data." + }, + { + "id": "SysRS-176", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall document the expected support workflow for diagnostic bundle collection." + }, + { + "id": "SysRS-177", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall include compatibility test tracking for supported platforms." + }, + { + "id": "SysRS-178", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall keep the UI responsive during connection, synchronization, and reconnect." + }, + { + "id": "SysRS-179", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid visible UI freezes longer than 100 ms during normal operation." + }, + { + "id": "SysRS-180", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall minimize local audio pipeline latency." + }, + { + "id": "SysRS-181", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application should target local audio pipeline latency under 100 ms where platform conditions permit." + }, + { + "id": "SysRS-182", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid unbounded memory growth in chat history." + }, + { + "id": "SysRS-183", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid unbounded memory growth in logs." + }, + { + "id": "SysRS-184", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid unbounded memory growth in audio buffers." + }, + { + "id": "SysRS-185", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid unbounded memory growth in event queues." + }, + { + "id": "SysRS-186", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall perform required audio processing without sustained underruns on supported devices." + }, + { + "id": "SysRS-187", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall keep reconnect processing non-blocking for UI interaction." + }, + { + "id": "SysRS-188", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall recover from transient network loss where possible." + }, + { + "id": "SysRS-189", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall recover gracefully from audio device changes where possible." + }, + { + "id": "SysRS-190", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall isolate connection failures to the affected connection." + }, + { + "id": "SysRS-191", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall avoid crashing on malformed or unexpected protocol events." + }, + { + "id": "SysRS-192", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall support Windows installer packaging for the Chanora application." + }, + { + "id": "SysRS-193", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall support macOS signed and notarized builds for the Chanora application." + }, + { + "id": "SysRS-194", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall support Linux packaging through AppImage, Flatpak, deb, rpm, or a selected subset." + }, + { + "id": "SysRS-195", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall support Android AAB release builds for the Chanora application." + }, + { + "id": "SysRS-196", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall support iOS TestFlight and App Store release builds for the Chanora application." + }, + { + "id": "SysRS-197", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall document platform signing, packaging, and release requirements before public release." + }, + { + "id": "SysRS-198", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall ensure release metadata does not imply official TeamSpeak affiliation." + }, + { + "id": "SysRS-199", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall define release channels for internal, beta, and production builds before external testing." + }, + { + "id": "SysRS-200", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a user interface for manual server connection." + }, + { + "id": "SysRS-201", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a user interface for bookmark management." + }, + { + "id": "SysRS-202", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a user interface for channel tree navigation." + }, + { + "id": "SysRS-203", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a user interface for chat." + }, + { + "id": "SysRS-204", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a user interface for voice controls." + }, + { + "id": "SysRS-205", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a user interface for audio processing settings." + }, + { + "id": "SysRS-206", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a bridge interface between Flutter and Rust Core." + }, + { + "id": "SysRS-207", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a protocol interface between Rust Core and `tsclientlib`." + }, + { + "id": "SysRS-208", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide an audio hardware interface through platform capture and playback adapters." + }, + { + "id": "SysRS-209", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide secure storage interfaces through platform-specific secure storage mechanisms." + }, + { + "id": "SysRS-210", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall provide a network interface to external TeamSpeak 3-compatible servers through `tsclientlib`." + }, + { + "id": "SysRS-211", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not directly expose raw `tsclientlib` types to Flutter." + }, + { + "id": "SysRS-212", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not store private keys in plaintext files." + }, + { + "id": "SysRS-213", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not write passwords to logs." + }, + { + "id": "SysRS-214", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not imply official TeamSpeak affiliation in UI, documentation, or release metadata." + }, + { + "id": "SysRS-215", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall not automatically upload diagnostic information in MVP." + }, + { + "id": "SysRS-216", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall comply with iOS background execution policies." + }, + { + "id": "SysRS-217", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application shall comply with Android foreground service requirements for active voice sessions." + }, + { + "id": "SysRS-218", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not require Chanora-operated backend infrastructure for voice, channels, or text." + }, + { + "id": "SysRS-219", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The selected `tsclientlib` version can support or be extended to support required MVP protocol features." + }, + { + "id": "SysRS-220", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "Required audio processing features can be implemented through a combination of platform-native APIs, Rust DSP, and external audio processing libraries." + }, + { + "id": "SysRS-221", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "Mobile foreground voice behavior is sufficient for MVP." + }, + { + "id": "SysRS-222", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "Background voice behavior will remain constrained by iOS and Android platform policies." + }, + { + "id": "SysRS-223", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "External compatible server administrators are responsible for server availability, permissions, and configuration." + }, + { + "id": "SysRS-224", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "End users are responsible for providing valid server connection details and network access." + }, + { + "id": "SysRS-225", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include TeamSpeak-compatible server hosting functionality." + }, + { + "id": "SysRS-226", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include full server administration functionality." + }, + { + "id": "SysRS-227", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include a complete permission editor." + }, + { + "id": "SysRS-228", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include a plugin system." + }, + { + "id": "SysRS-229", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include 3D positional audio unless explicitly reprioritized." + }, + { + "id": "SysRS-230", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include advanced whisper list management unless explicitly reprioritized." + }, + { + "id": "SysRS-231", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include Server Query administration tools." + }, + { + "id": "SysRS-232", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall not include automatic cloud sync of bookmarks, identities, settings, or diagnostics." + }, + { + "id": "SysRS-233", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall maintain a requirements traceability matrix from SysRS requirements through SysDes, SRS, SAD, SDD, and Verification evidence." + }, + { + "id": "SysRS-234", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify protocol compatibility through a protocol probe tool." + }, + { + "id": "SysRS-235", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify state synchronization through reducer tests and event replay tests." + }, + { + "id": "SysRS-236", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify audio capture, processing, encode/decode, and playback through audio loopback and processing tests." + }, + { + "id": "SysRS-237", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify secure storage behavior on every target platform before public release." + }, + { + "id": "SysRS-238", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify diagnostic redaction before enabling diagnostic export for external testers." + }, + { + "id": "SysRS-239", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify release packaging on every target platform before production release." + }, + { + "id": "SysRS-240", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The project shall verify that public wording does not imply official TeamSpeak affiliation." + }, + { + "id": "SysRS-241", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall connect to a TeamSpeak 3-compatible server using `tsclientlib`." + }, + { + "id": "SysRS-242", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall display the server channel tree." + }, + { + "id": "SysRS-243", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall display online clients." + }, + { + "id": "SysRS-244", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall allow the user to join a voice channel." + }, + { + "id": "SysRS-245", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall send voice." + }, + { + "id": "SysRS-246", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall receive voice." + }, + { + "id": "SysRS-247", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support microphone mute." + }, + { + "id": "SysRS-248", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support output deaf." + }, + { + "id": "SysRS-249", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support push-to-talk." + }, + { + "id": "SysRS-250", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support Echo Canceller." + }, + { + "id": "SysRS-251", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support Automatic Gain Control." + }, + { + "id": "SysRS-252", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support Noise Suppression." + }, + { + "id": "SysRS-253", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall support High-Pass Filter." + }, + { + "id": "SysRS-254", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall send and receive channel text messages." + }, + { + "id": "SysRS-255", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall save and reuse server bookmarks." + }, + { + "id": "SysRS-256", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall use secure storage for sensitive data." + }, + { + "id": "SysRS-257", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The MVP shall export redacted diagnostic logs." + }, + { + "id": "SysRS-258", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall use Material 3 as the baseline design system for the Flutter client user interface." + }, + { + "id": "SysRS-259", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall define a Chanora-specific design system above Material 3 for voice, connection, channel, latency, diagnostics, accessibility, and platform-adaptive states." + }, + { + "id": "SysRS-260", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support compact, medium, and expanded window classes for responsive client layout." + }, + { + "id": "SysRS-261", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall preserve visibility of connection status and primary voice controls across compact, medium, and expanded layouts." + }, + { + "id": "SysRS-262", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall provide screen-reader semantics for critical interactive controls and critical status indicators." + }, + { + "id": "SysRS-263", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall not communicate critical connection, voice, latency, permission, or error states by color alone." + }, + { + "id": "SysRS-264", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support keyboard focus traversal and visible focus indication on desktop-class and tablet keyboard environments." + }, + { + "id": "SysRS-265", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall keep critical controls reachable when the user increases text size using platform accessibility settings." + }, + { + "id": "SysRS-266", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall respect platform safe areas, display cutouts, system bars, virtual keyboards, and desktop window insets." + }, + { + "id": "SysRS-267", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall provide platform-appropriate handling for Android system back navigation, including predictive-back-compatible behavior where supported by the platform." + }, + { + "id": "SysRS-268", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall provide platform-appropriate handling for iOS navigation gestures, safe areas, keyboard avoidance, haptics, and system permission presentation." + }, + { + "id": "SysRS-269", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support localization of user-visible client application strings." + }, + { + "id": "SysRS-270", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall externalize user-visible strings from source code into localization resources or an equivalent localization mechanism." + }, + { + "id": "SysRS-271", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support English as the baseline product language." + }, + { + "id": "SysRS-272", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support adding additional product languages without changing protocol, audio, state synchronization, or storage architecture." + }, + { + "id": "SysRS-273", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall preserve and display Unicode server names, channel names, client nicknames, and text messages received from compatible servers." + }, + { + "id": "SysRS-274", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall use UTF-8 internally for text exchanged between Flutter, Rust Core, local storage, diagnostics, and protocol-facing adapters unless a platform API requires conversion at the boundary." + }, + { + "id": "SysRS-275", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall perform encoding conversion at explicit boundary adapters when external server, operating system, or platform APIs use a different text representation." + }, + { + "id": "SysRS-276", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall not corrupt or drop multilingual Unicode content in logs or diagnostic exports, except where redaction intentionally removes sensitive content." + }, + { + "id": "SysRS-277", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support bidirectional text display for user-visible localized strings and server-provided text where the platform text engine supports it." + }, + { + "id": "SysRS-278", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support locale-aware formatting for dates, times, numbers, and diagnostic timestamps where those values are user-visible." + }, + { + "id": "SysRS-279", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support fallback behavior when a translation key is missing." + }, + { + "id": "SysRS-280", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall keep machine-readable diagnostic fields stable and language-neutral while allowing user-facing diagnostic descriptions to be localized." + }, + { + "id": "SysRS-281", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall separate product localization from server-provided content; server-provided names and messages shall be displayed as content, not translated by the client." + }, + { + "id": "SysRS-282", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support accessibility labels and localization for icon-only controls." + }, + { + "id": "SysRS-283", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall define a UI/UX guideline document as a downstream non-normative design baseline derived from this SysRS and SysDes." + }, + { + "id": "SysRS-284", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall define design tokens for color, typography, spacing, shape, elevation, motion, density, connection state, voice state, latency state, and diagnostics state." + }, + { + "id": "SysRS-285", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall maintain traceability across the hierarchy `SysRS -> SysDes -> SRS -> SAD -> SDD` without allowing SRS, SAD, or SDD to bypass the immediately preceding lifecycle layer." + }, + { + "id": "SysRS-286", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support iOS runtime deployment on iOS 13 or later unless Flutter, plugin, audio, or platform constraints require raising the minimum version." + }, + { + "id": "SysRS-287", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "For Apple App Store Connect upload on or after 2026-04-28, the Chanora iOS/iPadOS build shall be produced with Xcode 26 or later using the iOS 26 / iPadOS 26 SDK or later, unless Apple publishes a newer applicable upload requirement before " + }, + { + "id": "SysRS-288", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora Android application shall support Android API 28 (Android 9.0) or later as the minimum runtime baseline, per DEC-004 (Accepted 2026-05-14, which raised the original API 24 recommendation to API 28). The minimum may be raised fur" + }, + { + "id": "SysRS-289", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "For Google Play submission, the Chanora Android build shall target the Android API level required by Google Play on the upload date." + }, + { + "id": "SysRS-290", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora MVP shall support one active server connection per client instance; multiple simultaneous active server connections shall be deferred outside MVP scope." + }, + { + "id": "SysRS-291", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora MVP shall enable Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter by default where supported and stable, while allowing user or platform policy to disable supported processing where applicable." + }, + { + "id": "SysRS-292", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall prefer platform-native audio processing for MVP where available and stable, with Rust/WebRTC-style audio processing retained as a controlled fallback or later architecture option." + }, + { + "id": "SysRS-293", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall use SQLite or an equivalent embedded local database for non-secret local state, while storing secrets only through platform secure storage." + }, + { + "id": "SysRS-294", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs; `flutter_rust_bridge` is the default candidate unless prototype evidence selects a better option." + }, + { + "id": "SysRS-295", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora MVP shall not perform automatic diagnostic upload, automatic telemetry upload, or automatic crash reporting unless a later approved decision updates privacy, security, legal, release, and verification documents." + }, + { + "id": "SysRS-296", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora desktop application shall support **Focused Push-to-Talk** on Windows, macOS, and Linux. Focused PTT is the minimum required behaviour: the user shall be able to hold a bound input (keyboard key, mouse button) inside the focused" + }, + { + "id": "SysRS-297", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora desktop application shall additionally support **Global Push-to-Talk** where the operating system, the user-granted permission set, the display server, and the available input backend together permit it. Where global PTT is not " + }, + { + "id": "SysRS-298", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The detected desktop PTT capability level shall be exposed to the user interface and to the release verification record. The exposed value shall match the actual runtime capability — the application shall not advertise a Global PTT level wh" + }, + { + "id": "SysRS-299", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora Windows desktop application shall prefer the Raw Input backend for Global PTT, with a low-level keyboard hook used only as a fallback when Raw Input is unavailable, and Focused PTT used as the final fallback when no Global PTT b" + }, + { + "id": "SysRS-300", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora macOS desktop application shall request the operating-system permission required for Global PTT (Input Monitoring / Accessibility), use the permission-aware Global PTT backend when the permission is granted, and fall back to Foc" + }, + { + "id": "SysRS-301", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora Linux desktop application shall use a capability-dependent Global PTT backend selected from the available display server (X11 or Wayland) and compositor support (GNOME on Wayland is the officially-tested target for the first pub" + }, + { + "id": "SysRS-302", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall not log, store, persist, or include in the user-initiated diagnostic export any raw desktop key-event history, key code stream, or key-press timing sequence. Diagnostic export may include the detected PT" + }, + { + "id": "SysRS-303", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall define the v1 voice transmit mode set as `Ptt` and `Continuous`, with `VoiceActivity` reserved on the enum surface but unimplemented in this baseline (deferred per DEC-030). The default mode on a fresh i" + }, + { + "id": "SysRS-304", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall apply a configurable PTT release-tail interval between the moment the bound PTT input reports key-up and the moment the transmit gate closes, so that the trailing syllable of a spoken word is not clipped" + }, + { + "id": "SysRS-305", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "When the Chanora Android application has an active voice session connected, the system shall engage the Android in-call audio mode (for example via `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mecha" + }, + { + "id": "SysRS-306", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora Android application shall acquire the Android runtime microphone permission (`RECORD_AUDIO`) at or before the point of voice session activation, and shall not begin microphone capture without that permission having been granted " + }, + { + "id": "SysRS-307", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora project shall maintain measured numeric performance baselines for the realtime audio capture and playback paths. The baseline set shall include, at minimum: (i) heap allocation count per realtime audio callback measured after wa" + }, + { + "id": "SysRS-308", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora project's continuous-integration workflow shall execute the realtime-audio benchmark suite on every pull request against the default branch and on every merge to the default branch, on at least one host architecture (Linux x86_6" + }, + { + "id": "SysRS-309", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The advisory CI regression comparison authorized by SysRS-308 shall use an explicitly declared tolerance window — a numeric percentage (or a numeric per-metric percentage set) above the maintained baseline (SysRS-307) — beyond which the adv" + }, + { + "id": "SysRS-310", + "source": "requirements/sysrs.md", + "stage": "", + "allocation": "", + "verification": "", + "statement": "The Chanora application system shall support macOS runtime deployment on macOS 10.15 (Catalina) or later as the minimum supported runtime, unless Flutter, plugin, audio, or platform constraints require raising the minimum version. This clau" + } + ] + } +} diff --git a/docs/privacy/privacy-policy.md b/docs/privacy/privacy-policy.md deleted file mode 100644 index b31930f..0000000 --- a/docs/privacy/privacy-policy.md +++ /dev/null @@ -1,122 +0,0 @@ -# Priv Privacy Policy V0.9.2.2.1 - -**Document type:** Privacy / Public Policy Draft -**Version:** 0.9.2 -**Status:** Baseline Candidate / Legal Review Required -**Language:** English -**Product:** Chanora -**Repo path:** `docs/privacy/privacy-policy.md` --- - -## 1. Important Notice - -This is a draft privacy policy template for review. It must be reviewed by a qualified legal/privacy reviewer before public release or store submission. - -## 2. Overview - -Chanora is a client application for connecting to compatible voice communication servers. Chanora is designed to operate primarily on the user's device. - -## 3. Data Processed by the App - -Depending on how the user configures and uses the app, Chanora may process: - -- server address and port; -- server password if provided by the user; -- user nickname; -- identity information needed for server connection; -- channel names and server-provided names; -- chat messages displayed in the app; -- audio input and output during voice sessions; -- local application settings; -- audio device settings; -- diagnostic information generated by the app. - -## 4. Local Storage - -Chanora may store local settings, bookmarks, recent server information, audio preferences, and related configuration on the user's device. - -Sensitive secrets such as server passwords or identity secrets are intended to be stored using platform secure storage mechanisms where supported. - -## 5. Diagnostics - -Chanora may allow the user to generate diagnostic bundles for troubleshooting. - -Diagnostic export is intended to be user-initiated. Diagnostic bundles should be redacted to avoid including passwords, identity secrets, and other sensitive information. - -Chanora should not automatically upload diagnostic bundles unless a future version explicitly introduces an opt-in upload feature and updates this policy. - -## 6. Audio and Microphone - -Chanora uses microphone access to provide voice communication features. Audio is processed for voice communication and may include echo cancellation, automatic gain control, noise suppression, and high-pass filtering. - -Chanora should not record or persist voice audio unless a future feature explicitly states otherwise and receives user consent where required. - -## 7. Permissions - -Chanora may request permissions required for voice communication, notifications, audio routing, local storage access, or platform-specific behavior. - -Permission requirements vary by platform. - -## 8. Data Sharing - -This draft policy assumes: - -- Chanora does not sell user data. -- Chanora does not automatically upload diagnostics. -- Chanora does not include automatic telemetry unless later approved and documented. -- User-initiated sharing of diagnostic bundles is controlled by the user. - -These assumptions must be confirmed before public release. - -## 9. Third-Party Servers - -When the user connects to a compatible external server, the server may receive connection information, nickname, voice data, text messages, or other information necessary for communication. The operation of external servers is outside Chanora's control. - -## 10. Third-Party Dependencies - -Chanora may use third-party software dependencies. The dependency and license list should be published or made available where required by applicable licenses. - -## 11. Children's Privacy - -TBD by legal/privacy reviewer. - -## 12. Regional Requirements - -TBD by legal/privacy reviewer. Public release may require region-specific privacy disclosures. - -## 13. Contact - -TBD. - -## 14. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial privacy policy draft template; legal review required before public release. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Privacy Addendum (Baseline Candidate 0.9.3) - -Per SysRS-302 / SRS-202 / DEC-027, the Chanora desktop PTT subsystem operates under the following privacy rule: - -- Chanora shall not log, persist, or transmit raw keyboard key codes, scan codes, virtual-key values, keysyms, or key-press timing sequences. -- The user-initiated diagnostic export shall include only the detected PTT capability level (`L0Focused`, `L1GlobalShortcut`, `L2GlobalHoldToTalk`, `L3GlobalWithMouseButtons`, or the reserved `L4DeviceAware`), the active backend identifier (a fixed string per implementation, for example `"raw-input"`, `"event-tap"`, `"gnome-wayland-portal"`, `"focused"`), and the bound input class (`"keyboard"`, `"mouse-side-button"`). -- The bound key value itself is never included in any diagnostic, even when the user invokes the export explicitly. -- Whether Global PTT is available depends on the operating system, the user-granted permission set, the display server, and the available input backend. Where Global PTT cannot be honoured, Chanora falls back to Focused PTT and reports the fallback honestly through the UI capability badge. - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop Push-to-Talk privacy addendum: raw key history is not recorded or exported; Global PTT is capability-dependent and the UI reflects actual runtime capability. | diff --git a/docs/references/aspice-swe2-swe3-integration-note.md b/docs/references/aspice-swe2-swe3-integration-note.md deleted file mode 100644 index 324a656..0000000 --- a/docs/references/aspice-swe2-swe3-integration-note.md +++ /dev/null @@ -1,87 +0,0 @@ - -# Chanora SWE.2 / SWE.3 Reference Integration Note - -**Version:** 0.9.2 -**Status:** Baseline Candidate note -**Language:** English - -**Repo path:** `docs/references/aspice-swe2-swe3-integration-note.md` --- - -## 1. Purpose - -This note records the refinements applied to Chanora SAD and SDD after reviewing additional software architecture and detailed design references. - -## 2. SAD Updates - -The SAD was updated to include: - -- SWE.2 architecture completeness and evaluation criteria -- Interface catalog -- Performance and resource view -- Assumptions and dependencies -- Architecture glossary -- Additional SAD design items covering: - - architecture evaluation - - interface catalog - - performance/resource views - - assumptions/dependencies - - glossary - - SDD refinement requirements - - SAD/SDD communication and baseline expectations - -## 3. SDD Updates - -The SDD was updated to include: - -- SWE.3 detailed-design completeness criteria -- Unit interface detail catalog -- Detailed design evaluation checklist -- Additional SDD detailed design items covering: - - ArchitectureViewDocs - - ADR record structure - - InterfaceDetailCatalog - - PerformanceDesignNotes - - AssumptionRegister - - ArchitectureGlossary - - SoftwareUnitDesignTemplate - - UnitConstructionGuideline - - SoftwareUnitTraceChecker - - DetailedDesignReviewRecord - - UnitVerificationHandoff - - SoftwareUnitRegistry - -## 4. Traceability Rule Preserved - -The updated documents preserve the strict traceability chain: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -``` - -Direct source rules: - -| Document | Direct source | -|---|---| -| SAD | SRS only | -| SDD | SAD only | - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial research note for expanding SAD structure and updating SDD coverage. | -| 0.2.0 | 2026-05-14 | Added SWE.2 and SWE.3 reference integration summary. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/references/external-references.md b/docs/references/external-references.md deleted file mode 100644 index 435c747..0000000 --- a/docs/references/external-references.md +++ /dev/null @@ -1,128 +0,0 @@ - -# Chanora External Reference Collection - -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora - -**Repo path:** `docs/references/external-references.md` --- - -## 1. Material 3 and Flutter References - -| Reference | Purpose | -|---|---| -| https://m3.material.io/ | Material 3 design system baseline | -| https://m3.material.io/foundations/design-tokens/overview | Material 3 design tokens | -| https://m3.material.io/styles/color/system/how-the-system-works | Material 3 color system | -| https://m3.material.io/styles/typography | Material 3 typography | -| https://m3.material.io/foundations/adaptive-design | Material 3 adaptive design | -| https://m3.material.io/components | Material 3 components | -| https://docs.flutter.dev/ui/design/material | Material Design in Flutter | -| https://docs.flutter.dev/ui/widgets/material | Flutter Material widget catalog | -| https://docs.flutter.dev/release/breaking-changes/material-3-default | Flutter Material 3 default behavior | -| https://docs.flutter.dev/release/breaking-changes/material-3-migration | Flutter Material 3 migration guidance | -| https://api.flutter.dev/flutter/material/ThemeData-class.html | Flutter ThemeData API | -| https://api.flutter.dev/flutter/material/ColorScheme-class.html | Flutter ColorScheme API | -| https://api.flutter.dev/flutter/material/ThemeExtension-class.html | Flutter ThemeExtension API | - -## 2. Android and iOS Platform References - -| Reference | Purpose | -|---|---| -| https://developer.android.com/develop/ui/compose/layouts/adaptive/use-window-size-classes | Android window size classes and adaptive layout reference | -| https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture | Android predictive back behavior | -| https://developer.android.com/develop/connectivity/bluetooth/bt-permissions | Android Bluetooth permissions | -| https://developer.apple.com/design/human-interface-guidelines/ | Apple Human Interface Guidelines | -| https://developer.apple.com/documentation/avfaudio/avaudiosession/category-swift.struct | AVAudioSession category reference | - -## 3. ASPICE and Requirements / Design Process References - -| Reference | Purpose | -|---|---| -| `Automotive-SPICE-PAM-v40.pdf` | Automotive SPICE process model | -| https://www.ul.com/sis/resources/process-swe-1 | UL SWE.1 Software Requirements Analysis guidance | -| https://www.ul.com/sis/resources/process-swe-2 | UL SWE.2 Software Architectural Design guidance | -| https://www.ul.com/sis/resources/process-swe-3 | UL SWE.3 Software Detailed Design and Unit Construction guidance | -| https://www.ul.com/sis/resources/process-swe-4 | UL SWE.4 Software Unit Verification guidance | -| https://www.ul.com/sis/resources/process-swe-5 | UL SWE.5 Software Component Verification and Integration Verification guidance | -| https://www.ul.com/sis/resources/process-swe-6 | UL SWE.6 Software Verification guidance | -| https://www.ul.com/sis/insights/system-integration-and-integration-test-sys4-automotive-spice | UL SYS.4 System Integration and Integration Test guidance | -| https://polarion.code.blog/2021/11/10/swe-2-software-architectural-design/ | Polarion SWE.2 Software Architectural Design notes | -| https://polarion.code.blog/2022/04/21/swe-3-software-detailed-design-and-unit-construction/ | Polarion SWE.3 Software Detailed Design and Unit Construction notes | -| https://polarion.code.blog/2023/01/18/swe-4-software-unit-verification/ | Polarion SWE.4 Software Unit Verification notes | -| https://polarion.code.blog/2023/06/28/swe-5-software-integration-and-integration-test/ | Polarion SWE.5 Software Integration and Integration Test notes | -| https://polarion.code.blog/2025/06/05/swe-6-software-qualification-test/ | Polarion SWE.6 Software Qualification Test notes | -| https://polarion.code.blog/2025/08/06/sys-4-system-integration-and-integration-verification-a-spice-4-0/ | Polarion SYS.4 System Integration and Integration Verification notes | - -## 4. Software Architecture and Design Document References - -| Reference | Purpose | -|---|---| -| https://medium.com/codex/what-goes-in-a-software-architecture-document-e97d808d5cec | Software Architecture Document content and architecture views | -| https://www.atlassian.com/work-management/knowledge-sharing/documentation/software-design-document | Software Design Document structure, including overview, architecture, data design, interface design, component design, UI design, assumptions, dependencies, and glossary | - -## 5. Use in Chanora Documentation - -| Reference category | Applied to | -|---|---| -| Material 3 and Flutter | UI/UX guideline, design tokens, component catalog, adaptive layout, SysDes, SRS, SAD, SDD | -| Android and iOS platform references | Platform behavior guide, SysRS, SysDes, SRS, SAD, SDD | -| ASPICE references | SysDes, SRS, SAD, SDD, SWE.4, SWE.5, SWE.6, SYS.4, traceability matrix | -| Software architecture/design document references | SAD v0.3, SDD v0.3 | - -## 6. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial reference collection. | -| 0.2.0 | 2026-05-14 | Added Atlassian software design document reference, UL SWE.2, UL SWE.3, Polarion SWE.2, Polarion SWE.3, and Medium SAD article reference. | -| 0.3.0 | 2026-05-14 | Added UL and Polarion references for SWE.4, SWE.5, SWE.6, and SYS.4 verification planning. | - ---- - -## 7. Platform Release Policy Reference Addendum - -| Reference | Purpose | -|---|---| -| Apple Developer - Upcoming Requirements | Apple App Store Connect SDK submission requirement; current baseline uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ on or after 2026-04-28 unless newer Apple policy applies. | -| Flutter supported platforms | Runtime platform support baseline; current decision uses iOS 13+ and Android API 24+ unless project constraints raise them. | -| Google Play target API level requirements | Android target SDK release gate; target the Google Play-required API level on upload date. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - ---- - -## 8. Apple SDK Gate Reference Correction - -| Reference | Purpose | -|---|---| -| https://developer.apple.com/news/upcoming-requirements/?id=02032026a | Apple Upcoming Requirements page defining the App Store Connect upload build gate: since April 28, 2026, uploaded apps must be built with Xcode 26 or later using the applicable platform 26 SDK or later. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Reference Addendum (Baseline Candidate 0.9.3) - -| Area | Reference (informative) | -|---|---| -| Windows input APIs | Microsoft Windows Raw Input documentation (`RegisterRawInputDevices`, `WM_INPUT`); Windows low-level keyboard / mouse hook documentation (`WH_KEYBOARD_LL`, `WH_MOUSE_LL`). | -| macOS event tap | Apple Core Graphics event-tap documentation (`CGEventTapCreate`, `kCGEventTapDisabledByTimeout`); IOKit `IOHIDCheckAccess` for permission state. | -| Linux Wayland global shortcuts | freedesktop.org XDG portal documentation for the `org.freedesktop.portal.GlobalShortcuts` interface. | -| Permission-aware input on macOS | Apple privacy / TCC documentation for Input Monitoring and Accessibility entitlements. | - -Reviewers should consult the current upstream version of each reference because OS surfaces change over time; the references above identify the relevant area rather than pinning a specific version. - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop-PTT external references covering Windows Raw Input + hook documentation, macOS event-tap + IOHIDCheckAccess, Linux GlobalShortcuts portal, and macOS Input Monitoring / Accessibility entitlements. | diff --git a/docs/release/ios-build.md b/docs/release/ios-build.md deleted file mode 100644 index 8972c57..0000000 --- a/docs/release/ios-build.md +++ /dev/null @@ -1,664 +0,0 @@ -# Building Chanora v0.2.0-beta.1 on iOS via macOS host - -**Document type:** Release / Platform Build Instructions -**Version:** 0.1.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/release/ios-build.md` - ---- - -## 1. Purpose - -This document gives exact step-by-step instructions for building the -Chanora `v0.2.0-beta.1` Internal Beta on an Apple macOS host. It -exists because the development host is Linux x86_64; the entire -iOS toolchain (Xcode, `xcrun`, `codesign`, `xcodebuild`, the -`iPhoneOS` SDK) is macOS-only under Apple licence and cannot be -cross-compiled from Linux. Even projects like `xcbuild` or -`cctools-port` cannot produce a signed `.ipa` that an iOS device's -`installd` will accept. - -After following this doc you will have: - -- `Runner.app` — the iOS app bundle. -- `libchanora_bridge.a` and/or an XCFramework containing both - device (arm64) and simulator (arm64+x86_64) slices of the Rust - cdylib. -- A `Runner.ipa` archive suitable for ad-hoc / TestFlight / App - Store distribution depending on the provisioning profile you sign - with. - -The doc assumes you have: - -- A macOS host (physical Mac or rental — see §3 for options). -- An Apple Developer account ($99/year). A free Apple ID can build - for personal devices via Xcode automatic signing, but profiles - expire in 7 days; the paid account is strongly recommended. -- Permission to enrol a test iPhone or iPad in the developer team. -- The Chanora source code (this repository), reachable from the - Mac (git remote, scp, or AirDrop). - ---- - -## 2. Toolchain versions pinned for this build - -| Tool | Version | Why | -|---|---|---| -| macOS | 14 Sonoma or 15 Sequoia | Xcode 26 requires macOS 14+ at minimum | -| Xcode | **26 or newer** (DEC-021) | Required to upload to App Store Connect on or after 2026-04-28. Beta builds for internal devices also pin to 26+ for parity. | -| iOS SDK | **26 or newer** (DEC-021) | Bundled with Xcode 26+. | -| iOS deployment target | **iOS 13** (DEC-003) | Matches Flutter 3.41.9's baseline support. The Podfile and Runner.xcodeproj must set this. | -| Command Line Tools | Latest stable (`xcode-select --install` or via Xcode) | Provides `xcrun`, `xcodebuild`, `codesign`. | -| Flutter SDK | 3.41.9 stable | Same pin as Linux/Android/Windows builds. | -| Dart SDK | 3.11.5 | Bundled with Flutter. | -| Rust toolchain | stable 1.95 (or newer) | Workspace `rust-version = "1.95"`. | -| Rust targets | `aarch64-apple-ios`, `aarch64-apple-ios-sim`, `x86_64-apple-ios` | Device + Apple-silicon simulator + Intel-Mac simulator. | -| `cbindgen` (optional) | 0.27+ | Only if you wire a C header for the bridge; FRB does not require it. | -| `cargo-lipo` (legacy) | not required | `cargo-lipo` was deprecated for multi-arch iOS in favor of `cargo build --target ` + `xcodebuild -create-xcframework`. | -| CocoaPods | 1.16+ | Required by Flutter iOS builds (Podfile in `apps/chanora_flutter/ios/`). | -| Opus library | bundled via `audiopus_sys` build script with iOS-specific CMake toolchain | Apple does not ship libopus; we cross-compile it per Rust target. | -| Apple Developer ID + certificate | one-time | Required to sign the .ipa. Free Apple ID OK for personal-device install (7-day profile). | - -> **Why not Xcode 15 or 16?** Apple's App Store Connect upload gate -> (DEC-021) requires the iOS 26 SDK on or after 2026-04-28. Even for -> internal Beta where you don't upload, we pin Xcode 26+ so the same -> archive can be re-signed for TestFlight without re-building. - ---- - -## 3. macOS host options - -### 3.1 Owned Apple hardware (cheapest long-term) - -| Hardware | Min spec | Notes | -|---|---|---| -| Mac mini (M2, 2023+) | 16 GiB RAM, 256 GiB SSD | Best price/perf; ~USD $799 new | -| MacBook Air / Pro (M2+) | 16 GiB RAM | Portable; ~USD $1099+ new | -| Used Intel Mac (2018+) | 16 GiB RAM | Will need macOS 14+; check Apple's compatibility list | - -Apple's licence forbids running macOS on non-Apple hardware -("Hackintoshes") for any commercial purpose. Don't. - -### 3.2 macOS rental (no hardware purchase) - -| Provider | Cost | Notes | -|---|---|---| -| MacStadium | USD ~$79+/month for an M-series Mac mini | Dedicated host; supports Xcode + signing | -| MacinCloud | USD ~$30+/month "Pay-As-You-Go" or "Dedicated Server" plans | Shared options exist; choose Dedicated for full Xcode access | -| Scaleway Apple silicon (EU) | EUR ~0.13/hour for Mac mini M2 | Hourly billing; cheap for short builds | -| AWS EC2 Mac (`mac1.metal`, `mac2.metal`) | USD ~$1.08/hour with a 24h minimum allocation | Most expensive; use only if you need AWS integration | - -> Apple's licence permits cloud hosts that comply with their terms. -> All of the above explicitly meet that requirement. - -### 3.3 Borrowed Mac - -Find a friend or coworker with a Mac that can run Xcode 26. Install -your dev certificate to their Keychain locally for the build session -only, then remove it. This is the cheapest option if you have access. - ---- - -## 4. Install the toolchain (one-time per Mac) - -All commands assume a normal user account; only the Xcode install -needs an Administrator password. - -### 4.1 Xcode + Command Line Tools - -Either: - -```bash -# Easiest: install Xcode from the Mac App Store. -# (Or download the .xip from https://developer.apple.com/download/all/) -open "https://apps.apple.com/app/xcode/id497799835" - -# Then accept the licence and install Command Line Tools. -sudo xcodebuild -license accept -xcode-select --install # idempotent; skip if already done - -# Verify. -xcodebuild -version # expect Xcode 26.x -xcrun --version -xcrun simctl list runtimes | head -``` - -If you already have Xcode 16 or 17 installed, **add** Xcode 26 -side-by-side (don't replace) and switch via `sudo xcode-select -s -/Applications/Xcode-26.app`. - -### 4.2 Homebrew + Rust + Flutter + CocoaPods - -```bash -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - -# Rust (managed by rustup, not brew) -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal -source "$HOME/.cargo/env" - -# Add the three iOS targets. -rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios - -# Flutter — pinned to 3.41.9 stable to match the Linux / Android -# builds. -brew install --cask flutter -flutter --version | head -3 -flutter precache --ios - -# CocoaPods. -brew install cocoapods -pod --version # expect 1.16 or newer -``` - -> If your Mac is Apple-silicon and Homebrew installs to -> `/opt/homebrew`, make sure that's on `PATH` for new shells: -> `eval "$(/opt/homebrew/bin/brew shellenv)"`. - -### 4.3 Opus - -`audiopus_sys` ships an Opus source tree and tries to build it via -CMake. On iOS the cmake-crate's generated build sometimes confuses -the iOS toolchain. We use the same pre-built libopus strategy that -the Android build uses: - -```bash -# Get the audiopus_sys-bundled libopus source after a first cargo -# fetch (it gets unpacked into the registry). -cd ~/chanora -cargo fetch -OPUS_SRC=$(find ~/.cargo/registry/src -path '*audiopus_sys-*/opus' -type d | head -1) -mkdir -p /tmp/opus-ios -cp -R "$OPUS_SRC"/* /tmp/opus-ios/ - -# Helper: build libopus.a for one iOS arch. -build_opus_ios() { - local ARCH=$1 # arm64 | x86_64 | arm64-simulator - local SDK=$2 # iphoneos | iphonesimulator - local OUT=/tmp/opus-ios-${ARCH} - rm -rf /tmp/opus-ios/build && mkdir /tmp/opus-ios/build - cd /tmp/opus-ios/build - cmake .. \ - -DCMAKE_SYSTEM_NAME=iOS \ - -DCMAKE_OSX_SYSROOT=$(xcrun --sdk "$SDK" --show-sdk-path) \ - -DCMAKE_OSX_ARCHITECTURES="${ARCH%-simulator}" \ - -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 \ - -DBUILD_SHARED_LIBS=OFF \ - -DOPUS_BUILD_PROGRAMS=OFF \ - -DOPUS_BUILD_TESTING=OFF \ - -DCMAKE_INSTALL_PREFIX="$OUT" \ - -G "Unix Makefiles" - make -j8 install - # Wrap so LIBOPUS_LIB_DIR appends /lib correctly. - mkdir -p "$OUT-wrap/lib" - cp "$OUT/lib/libopus.a" "$OUT-wrap/lib/" - cd /tmp/opus-ios -} - -build_opus_ios arm64 iphoneos # device -build_opus_ios arm64-simulator iphonesimulator # Apple-silicon Mac sim -build_opus_ios x86_64 iphonesimulator # Intel Mac sim -``` - -You should end up with three wrap dirs each containing `lib/libopus.a`: - -``` -/tmp/opus-ios-arm64-wrap/lib/libopus.a -/tmp/opus-ios-arm64-simulator-wrap/lib/libopus.a -/tmp/opus-ios-x86_64-wrap/lib/libopus.a -``` - -### 4.4 Cargo target linker config - -iOS targets need explicit linker config to find the SDK. Create -`~/.cargo/config.toml`: - -```toml -[target.aarch64-apple-ios] -rustflags = ["-C", "link-arg=-fembed-bitcode"] - -[target.aarch64-apple-ios-sim] -rustflags = ["-C", "link-arg=-fembed-bitcode"] - -[target.x86_64-apple-ios] -rustflags = ["-C", "link-arg=-fembed-bitcode"] -``` - -Rust's built-in iOS targets already drive the right linker via -`xcrun`, so usually no further config is needed. If you hit a -"-platform_version not supported" error, ensure Xcode CLI tools are -fresh: `sudo xcode-select --reset`. - -### 4.5 (Optional) `flutter_rust_bridge_codegen` - -Only needed if you modify `crates/chanora_bridge/src/api.rs` on the -Mac. The bindings shipped in the repo are platform-agnostic Dart + -Rust source and do **not** need regenerating per platform. - -```bash -cargo install flutter_rust_bridge_codegen --version "=2.12.0" -``` - ---- - -## 5. Get the source onto the Mac - -Same two options as the Windows doc: - -### Option A — git remote - -```bash -# On Linux dev host: push to a private remote. -cd /home/milkice/chanora -git remote add origin git@github.com:/chanora.git -git push --all -git push --tags -``` - -```bash -# On the Mac: -cd ~ -git clone https://github.com//chanora.git -cd chanora -git checkout v0.2.0-beta.1 -``` - -### Option B — zip / AirDrop - -```bash -# On Linux: -git -C /home/milkice/chanora archive --format=zip \ - --output=/tmp/chanora-v0.2.0-beta.1.zip v0.2.0-beta.1 - -# Transfer the zip to the Mac (AirDrop, scp, USB), then: -cd ~ -unzip /Volumes/.../chanora-v0.2.0-beta.1.zip -d chanora -cd chanora -``` - ---- - -## 6. Add the iOS platform to the Flutter app - -The product Flutter app was scaffolded with `--platforms=linux,android`, -so the `ios/` folder does not yet exist. Add it once on the Mac: - -```bash -cd ~/chanora/apps/chanora_flutter -flutter create --platforms=ios . -``` - -This creates `apps/chanora_flutter/ios/` containing: - -``` -ios/ - Runner/ - AppDelegate.swift - Info.plist - Runner-Bridging-Header.h - Assets.xcassets/ - Runner.xcodeproj/ - Runner.xcworkspace/ - Podfile - Flutter/ -``` - -> **Important:** Do **not** commit this `ios/` folder back to the -> repo from the Mac unless you also do the corresponding edits the -> source-of-truth host uses (icons, bundle ID, signing config). -> For Beta it is fine to keep it Mac-only. - -### 6.1 Set the iOS deployment target - -Edit `apps/chanora_flutter/ios/Podfile`'s first line to: - -```ruby -platform :ios, '13.0' # DEC-003 -``` - -And in Xcode (`open Runner.xcworkspace`): - -- Project → Runner → General → Minimum Deployments → iOS 13.0 -- Project → Runner → Signing & Capabilities → set your Team - -### 6.2 Add iOS-required entitlements + Info.plist keys - -Chanora's audio engine needs the microphone. Edit -`apps/chanora_flutter/ios/Runner/Info.plist` to include: - -```xml -NSMicrophoneUsageDescription -Chanora uses the microphone for voice chat with TeamSpeak-compatible servers. - - -UIBackgroundModes - - audio - - - -NSAppTransportSecurity - - NSAllowsArbitraryLoads - - -``` - -The bundle identifier should be set to a reverse-DNS string under -your developer team, e.g. `app.chanora.chanora_flutter`. Update it -in Xcode → Runner → General → Identity → Bundle Identifier. - ---- - -## 7. Build the Rust libraries for iOS - -We build three flavors and combine them into an XCFramework that -Xcode can link against from both device and simulator slices. - -```bash -cd ~/chanora -export LIBOPUS_STATIC=1 -export LIBOPUS_NO_PKG=1 - -build_bridge_for_ios() { - local TARGET=$1 # aarch64-apple-ios | aarch64-apple-ios-sim | x86_64-apple-ios - local OPUS_DIR=$2 # /tmp/opus-ios-*-wrap - export LIBOPUS_LIB_DIR="$OPUS_DIR" - - # Wipe audiopus_sys build cache so LIBOPUS_LIB_DIR is re-read. - rm -rf target/$TARGET/release/build/audiopus_sys-* - - cargo build --release --target "$TARGET" -p chanora_bridge -} - -build_bridge_for_ios aarch64-apple-ios /tmp/opus-ios-arm64-wrap -build_bridge_for_ios aarch64-apple-ios-sim /tmp/opus-ios-arm64-simulator-wrap -build_bridge_for_ios x86_64-apple-ios /tmp/opus-ios-x86_64-wrap -``` - -Expected static-lib outputs (the `[lib]` section in -`crates/chanora_bridge/Cargo.toml` already declares `staticlib`): - -``` -target/aarch64-apple-ios/release/libchanora_bridge.a (~25 MiB, device) -target/aarch64-apple-ios-sim/release/libchanora_bridge.a (~25 MiB, M-series simulator) -target/x86_64-apple-ios/release/libchanora_bridge.a (~25 MiB, Intel simulator) -``` - -### 7.1 Build the simulator universal binary with `lipo` - -The simulator side needs both arches in one `.a` for Xcode to pick -the host architecture automatically: - -```bash -mkdir -p target/universal-ios-sim -lipo -create \ - target/aarch64-apple-ios-sim/release/libchanora_bridge.a \ - target/x86_64-apple-ios/release/libchanora_bridge.a \ - -output target/universal-ios-sim/libchanora_bridge.a -file target/universal-ios-sim/libchanora_bridge.a -``` - -### 7.2 Build the XCFramework - -```bash -rm -rf target/ChanoraBridge.xcframework -xcodebuild -create-xcframework \ - -library target/aarch64-apple-ios/release/libchanora_bridge.a \ - -library target/universal-ios-sim/libchanora_bridge.a \ - -output target/ChanoraBridge.xcframework -``` - -Result: - -``` -target/ChanoraBridge.xcframework/ - Info.plist - ios-arm64/libchanora_bridge.a - ios-arm64_x86_64-simulator/libchanora_bridge.a -``` - -### 7.3 Link the XCFramework from the Flutter iOS app - -Open `apps/chanora_flutter/ios/Runner.xcworkspace` in Xcode. - -1. Drag `target/ChanoraBridge.xcframework` into the Runner project - (Embed: "Do Not Embed" — it's a static lib). -2. Project → Runner → Build Phases → Link Binary with Libraries → - ensure `ChanoraBridge.xcframework` is listed. -3. The FRB Dart loader expects to find the symbols in the main app - binary on iOS (static linkage). The generated - `apps/chanora_flutter/lib/src/rust/frb_generated.io.dart` should - look up via `DynamicLibrary.process()` on iOS — this is the - default for FRB v2 when the Rust crate type is `staticlib`. - -If the dart-side loader expects a separate dylib, regenerate -bindings with the iOS target hint: - -```bash -flutter_rust_bridge_codegen generate -``` - -(The repo's bindings already target this style; no change usually -needed.) - ---- - -## 8. Regenerate the FRB bindings (optional) - -Skip unless you've modified `crates/chanora_bridge/src/api.rs` on -the Mac. The bindings are platform-agnostic Dart + Rust source. - -```bash -cd ~/chanora -flutter_rust_bridge_codegen generate -``` - -Takes ~5–10 minutes on first run (cargo expand). - ---- - -## 9. Build the iOS app via Flutter - -```bash -cd ~/chanora/apps/chanora_flutter -flutter pub get -cd ios && pod install && cd .. -flutter build ios --release --no-codesign -``` - -`flutter build ios --no-codesign` produces an unsigned `Runner.app`. -For signed `.ipa` for TestFlight or device install, use: - -```bash -flutter build ipa --release --export-method development -# or: --export-method ad-hoc | enterprise | app-store -``` - -This requires: - -- A configured Team and Bundle Identifier (set in Xcode in §6.1). -- A matching provisioning profile in your Keychain (Xcode's - Automatic Signing usually handles this if you've signed into - your Apple ID in Xcode → Settings → Accounts). - -Expected output locations: - -| Variant | Path | -|---|---| -| Unsigned app bundle | `apps/chanora_flutter/build/ios/iphoneos/Runner.app/` | -| Signed `.ipa` | `apps/chanora_flutter/build/ios/ipa/chanora_flutter.ipa` | - ---- - -## 10. Install on a physical iPhone/iPad - -### 10.1 Wired install (USB or USB-C) - -```bash -# List paired devices. -xcrun devicectl list devices - -# Install the ipa. -xcrun devicectl device install app --device \ - apps/chanora_flutter/build/ios/ipa/chanora_flutter.ipa - -# Launch it. -xcrun devicectl device process launch \ - --device --terminate-existing \ - app.chanora.chanora_flutter -``` - -### 10.2 TestFlight (wireless to many testers) - -```bash -xcrun altool --upload-app \ - --type ios \ - --file apps/chanora_flutter/build/ios/ipa/chanora_flutter.ipa \ - --username "" \ - --password "" -``` - -Then in App Store Connect: - -1. Wait for processing (10–30 minutes). -2. Add the build to a TestFlight test group. -3. Invite testers by Apple ID email. - -Testers install via the TestFlight app on their device. - ---- - -## 11. Smoke test on the iPhone/iPad - -Open the installed Chanora app: - -1. **Banner**: "Beta build — voice in/out wired; not production - ready." -2. **Form**: pre-populated with `cn.teamspeak.app` + `ChanoraBeta`. -3. **Connect**. - -> **Known limitation (same as Android):** the protocol layer's -> `hickory-resolver` cannot resolve hostnames on iOS by default. If -> Connect times out, enter the literal IP. For `cn.teamspeak.app` -> that is currently `175.178.125.23`. A proper fix wires the iOS -> system resolver into hickory; Beta+ work. - -4. Once connected, the channel tree appears. -5. **Start audio** → grant microphone permission when prompted. -6. **Hold to talk** → frame counter increments under PTT. - -If audio fails to start, check: - -- Microphone permission granted in Settings → Chanora → Microphone. -- Device not in silent mode (output side only). -- iOS Audio Session category — by default Flutter uses - `AVAudioSessionCategoryPlayback`. Voice transmission needs - `PlayAndRecord` with `voiceChat` mode. **Beta+ work.** - ---- - -## 12. Package the release artefact - -`flutter build ipa` already produces a single `.ipa`. Stamp it with -the build identifier: - -```bash -cd ~/chanora/apps/chanora_flutter -cp build/ios/ipa/chanora_flutter.ipa \ - "$HOME/chanora-v0.2.0-beta.1-ios.ipa" -shasum -a 256 "$HOME/chanora-v0.2.0-beta.1-ios.ipa" -``` - -Typical size: 60–90 MiB (includes Flutter engine + Dart AOT + -Rust static lib + bundled libopus + iOS resources). - ---- - -## 13. Download to your local host - -If on a rental Mac: - -```bash -# From the Mac, copy back to Linux dev host. -scp "$HOME/chanora-v0.2.0-beta.1-ios.ipa" \ - user@your-linux-host:/home/milkice/ -``` - -Or pull from the rental's web file manager. Keep the `.ipa` -re-installable indefinitely if the provisioning profile is -ad-hoc/enterprise; for development profiles it expires in 7 days. - ---- - -## 14. Final artefact paths (what you actually produce) - -On the Mac, after a successful build: - -| Artefact | Path | -|---|---| -| Rust device static lib | `~/chanora/target/aarch64-apple-ios/release/libchanora_bridge.a` | -| Rust Apple-silicon sim lib | `~/chanora/target/aarch64-apple-ios-sim/release/libchanora_bridge.a` | -| Rust Intel sim lib | `~/chanora/target/x86_64-apple-ios/release/libchanora_bridge.a` | -| Lipo'd simulator lib | `~/chanora/target/universal-ios-sim/libchanora_bridge.a` | -| XCFramework | `~/chanora/target/ChanoraBridge.xcframework/` | -| Unsigned app bundle | `~/chanora/apps/chanora_flutter/build/ios/iphoneos/Runner.app/` | -| Signed `.ipa` | `~/chanora/apps/chanora_flutter/build/ios/ipa/chanora_flutter.ipa` | -| Renamed release `.ipa` | `~/chanora-v0.2.0-beta.1-ios.ipa` | - ---- - -## 15. After the build — deallocate (rental hosts) - -| Provider | Deallocate command | -|---|---| -| MacStadium | Suspend / shut down via control panel | -| MacinCloud | "Stop" the session in account dashboard | -| Scaleway | `scw instance server stop ` | -| AWS EC2 Mac | Stop the host; release the dedicated host if at end of 24h minimum | - -Always verify the billing dashboard shows the instance as stopped, -not just shut down at the OS level. - ---- - -## 16. Known issues and caveats - -| Issue | Workaround | -|---|---| -| `audiopus_sys` cmake-build fails with "no member named '__int128_t'" | Re-export `LIBOPUS_LIB_DIR` to a pre-built `.a` directory (§4.3); never let cargo's cmake-build attempt to compile Opus on iOS. | -| `hickory-resolver` cannot resolve hostnames on iOS | Use literal IP. Fix: wire `dns-via-system` resolver into `chanora_protocol`. Beta+ work. | -| Microphone permission prompt never appears | The `NSMicrophoneUsageDescription` is missing from Info.plist. See §6.2. | -| Audio plays but no transmission | iOS AVAudioSession category likely set to `Playback` not `PlayAndRecord`. Configure the session in Swift before Flutter loads, or via a small plugin. Beta+ work. | -| Code signing fails with "No signing certificate" | Open Xcode → Settings → Accounts → add your Apple ID, then close and reopen `Runner.xcworkspace` to refresh. | -| `flutter build ipa` complains about missing entitlements | Make sure the provisioning profile in Apple Developer console includes the App ID with microphone capability enabled. | -| TestFlight upload rejected: "Invalid bundle. Apple silicon support" | Build with `flutter build ipa --release` (not `--debug`); debug AOT is JIT-only and not allowed in TestFlight. | -| App crashes on launch with `dyld: Library not loaded: libchanora_bridge.dylib` | The bridge is built as `staticlib`, not `cdylib`, on iOS — FRB's loader uses `DynamicLibrary.process()`. If you accidentally built a `cdylib`, the loader path won't match. Stick to staticlib. | -| First `flutter build ios` takes > 30 minutes | Normal — first Pod install + CocoaPods cache. | - ---- - -## 17. Reproducibility note - -Like the Windows build, the iOS build is **not bit-reproducible**: - -- `xcodebuild` embeds a creation timestamp in the `.ipa`. -- `audiopus_sys` picks the cmake-discovered Xcode toolchain version. -- Dart AOT compilation embeds a Dart kernel hash. -- Code-signing inherently makes every signed `.ipa` unique. - -If true reproducibility is required for a future External Beta or -MVP Public release, that is Beta+ work; the build above is -sufficient for an Internal Beta milestone per DEC-001. - ---- - -## 18. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial iOS build instructions for Chanora `v0.2.0-beta.1`. Targets a macOS 14+ host running Xcode 26+ (DEC-021), Rust 1.95 stable with `aarch64-apple-ios` + `aarch64-apple-ios-sim` + `x86_64-apple-ios` targets, Flutter 3.41.9 stable, `flutter_rust_bridge` 2.12.0. Produces `Runner.app` + `chanora_flutter.ipa` via `flutter build ipa --release`. iOS deployment target pinned to 13.0 (DEC-003). Surface caveat: DEC-011.1 iOS audio remains Deferred — `cpal`'s iOS backend has not been empirically verified, and AVAudioSession category configuration is required for voice transmission. | diff --git a/docs/release/platform-release-policy.md b/docs/release/platform-release-policy.md deleted file mode 100644 index d7c325f..0000000 --- a/docs/release/platform-release-policy.md +++ /dev/null @@ -1,83 +0,0 @@ -# Rel Platform Release Policy - -**Document type:** Release / Platform Release Policy -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/release/platform-release-policy.md` --- - -## 1. Purpose - -This document separates runtime deployment targets from app-store upload build-SDK gates. - -## 2. iOS / iPadOS Policy - -| Policy item | Decision | -|---|---| -| Runtime deployment target | iOS 13 or later unless Flutter, plugin, audio, or product constraints require raising it. | -| App Store Connect upload build-SDK gate | For upload on or after 2026-04-28, use Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later, unless Apple publishes a newer applicable requirement before upload. | -| Internal Alpha / local development | May use development toolchains suitable for internal testing if no App Store Connect upload is performed. | -| TestFlight / App Store upload | Must satisfy the active Apple App Store Connect upload requirement. | - -## 3. Android Policy - -| Policy item | Decision | -|---|---| -| Runtime minimum | Android API 24 or later unless Flutter, plugin, audio, or product constraints require raising it. | -| Store upload target API | Target the Google Play-required API level on the upload date. | -| Internal Alpha / sideload testing | May use internal build configuration suitable for internal testing, but release readiness must state whether Google Play rules apply. | - -## 4. Release Readiness Rule - -The Go/No-Go record shall record: - -- runtime minimum versions; -- store upload build/toolchain gates; -- build number; -- commit SHA; -- tag; -- artifact hashes; -- platform-specific release status; -- whether the release is internal-only or store-uploaded. - -## 5. Traceability - -| Policy | Traceability | -|---|---| -| iOS runtime minimum | SysRS-286 -> SysDes-133 -> SRS-185 -> SAD-061 -> SDD-071 | -| Apple App Store Connect upload SDK gate | SysRS-287 -> SysDes-134 -> SRS-186 -> SAD-062 -> SDD-072 | -| Android runtime and target API policy | SysRS-288/289 -> SysDes-135 -> SRS-187/188 -> SAD-063 -> SDD-073 | - -## 6. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Initial platform release policy separating runtime targets from store upload build-SDK gates. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Release Policy Addendum (Baseline Candidate 0.9.3) - -Per SysDes-148 the release readiness record shall carry, for every desktop release artefact, the following per-platform evidence: - -| Field | Source | Acceptance | -|---|---|---| -| Detected `PttCapabilityLevel` | Live runtime measurement on the verification host. | Must equal the level the release notes claim. | -| Active backend identifier | `DesktopPttBackend::backend_id()` reported by the live measurement. | Must equal the backend the release notes claim. | -| Focused fallback exercised | Manual verification step. | Must record "yes" with a re-measurement of the same backend identifier after the user revokes the relevant permission / blocks the relevant input path. | -| Capability badge UI | Screenshot or platform-test trace. | Must match the runtime capability. | - -Release notes shall not claim Global PTT support on a platform when the live measurement returned `L0Focused`. Release notes shall not claim mouse-side-button support on a platform when the live measurement did not include a side-button binding (per DEC-026 the Linux portal may not expose side-button bindings on every session). - -Per DEC-025 the only officially-tested Linux environment for the first public release is GNOME on Wayland. Other Linux environments are supported at the `L0Focused` capability only; the release notes shall not claim Global PTT support outside the tested compositor. - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT release-policy evidence requirements: per-platform capability level + backend identifier + fallback-exercised + capability badge UI screenshot must be recorded before release notes may claim Global PTT support. | diff --git a/docs/release/release-artifact-policy.md b/docs/release/release-artifact-policy.md deleted file mode 100644 index 586c7c5..0000000 --- a/docs/release/release-artifact-policy.md +++ /dev/null @@ -1,51 +0,0 @@ -# Release Artifact Policy - -**Document type:** Release / Artifact Policy -**Version:** 0.1.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/release/release-artifact-policy.md` - ---- - -## 1. Purpose - -This document defines the expected release artifact metadata before a release is approved. - -## 2. Required Artifact Metadata - -| Field | Required | -|---|---| -| Release version | Yes | -| Build number | Yes | -| Git commit SHA | Yes | -| Git tag | Yes | -| Build timestamp | Yes | -| Build environment | Yes | -| Platform | Yes | -| Artifact filename | Yes | -| SHA-256 hash | Yes | -| Signing status | Required for public/store release | -| Notarization status | Required for macOS public release | -| Store upload status | Required for store release | - -## 3. Artifact Types - -| Platform | Expected artifact | -|---|---| -| Windows | Installer or packaged app artifact | -| macOS | Signed/notarized app bundle or installer | -| Linux | AppImage, Flatpak, deb, rpm, or selected package | -| Android | AAB/APK | -| iOS / iPadOS | App Store Connect/TestFlight upload artifact | - -## 4. Rule - -Release artifacts shall not be treated as approved until the Release Readiness / Go-No-Go record is completed. - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial release artifact policy. | diff --git a/docs/release/release-readiness-go-nogo-record.md b/docs/release/release-readiness-go-nogo-record.md deleted file mode 100644 index 1d83a79..0000000 --- a/docs/release/release-readiness-go-nogo-record.md +++ /dev/null @@ -1,234 +0,0 @@ - -# CHANORA_REL_Release_Readiness_Go_NoGo_Record_v0.9.2.2.1 - -**Document type:** Release Readiness Checklist / Go-No-Go Record -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/release/release-readiness-go-nogo-record.md` --- - -## 1. Purpose - -This document records the auditable release readiness decision for a Chanora release. - -Design documents alone do not authorize release. A release requires an explicit readiness decision based on scope, build identity, requirement completion, verification evidence, security review, platform readiness, legal/privacy readiness, known risks, and approval. - -## 2. Release Identity - -| Field | Value | -|---|---| -| Release name | TBD by Product Owner | -| Release type | TBD: Internal Alpha / External Beta / MVP Public / Store Release | -| Release version | TBD | -| Release candidate ID | TBD | -| Release date target | TBD | -| Release owner | TBD | -| Product owner | TBD | -| Engineering owner | TBD | -| QA / verification owner | TBD | -| Security reviewer | TBD | -| Legal / compliance reviewer | TBD | - -## 3. Build Identity - -| Field | Value | -|---|---| -| Git repository | TBD | -| Git branch | TBD | -| Git commit SHA | TBD | -| Git tag | TBD | -| iOS App Store Connect upload SDK gate | Xcode 26+ and iOS 26 / iPadOS 26 SDK+ for upload on or after 2026-04-28 | -| Platform release policy included | Yes | -| Build number | TBD | -| CI pipeline ID | TBD | -| Build timestamp | TBD | -| Windows artifact | TBD | -| macOS artifact | TBD | -| Linux artifact | TBD | -| Android artifact | TBD | -| iOS artifact | TBD | -| Artifact hash method | SHA-256 unless otherwise specified | -| Artifact hashes | TBD | - -## 4. Scope Readiness - -| Question | Answer | Evidence | Owner | -|---|---|---|---| -| Is this release scope defined? | TBD | Release scope statement | Product Owner | -| Is this release Internal Alpha, External Beta, MVP Public, or Store Release? | TBD | Release scope statement | Product Owner | -| Are included features listed? | TBD | Release notes / scope list | Product Owner | -| Are excluded/deferred features listed? | TBD | Deferred requirements list | Product Owner | -| Are target platforms listed? | TBD | Platform readiness table | Engineering Owner | -| Are known limitations documented? | TBD | Known issue register | Product Owner / QA | - -## 5. Requirements Readiness - -| Requirement group | Status | Evidence | Deferred items / waiver | -|---|---|---|---| -| P0 / MVP connection requirements | TBD | SRS/SWE.6 evidence | TBD | -| P0 / MVP channel and state requirements | TBD | SRS/SWE.6 evidence | TBD | -| P0 / MVP voice requirements | TBD | SRS/SWE.6 evidence | TBD | -| Audio processing requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD | -| Storage and secure storage requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD | -| Diagnostics and redaction requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD | -| Material 3 / UI requirements | TBD | SWE.6 evidence | TBD | -| Accessibility requirements | TBD | SWE.6 evidence | TBD | -| Platform behavior requirements | TBD | SYS.4/SWE.6 evidence | TBD | -| i18n / Unicode requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD | -| Traceability requirements | TBD | Validation report | TBD | - -## 6. Verification Readiness - -| Verification layer | Required evidence | Status | Failed items | Waivers | -|---|---|---|---|---| -| SWE.4 Unit Verification | Unit verification summary report | TBD | TBD | TBD | -| SWE.5 Software Integration Verification | Integration verification summary report | TBD | TBD | TBD | -| SWE.6 Software Verification | Software verification summary report | TBD | TBD | TBD | -| SYS.4 System Integration Verification | System integration verification summary report | TBD | TBD | TBD | -| Regression Verification | Regression report | TBD | TBD | TBD | -| Manual exploratory test | Test notes | TBD | TBD | TBD | - -## 7. Security Readiness - -| Question | Required answer | Status | Evidence | -|---|---|---|---| -| Is secure storage verified for supported platforms? | Yes / waived | TBD | Security test report | -| Are secrets excluded from plaintext logs? | Yes / waived | TBD | Redaction test result | -| Is diagnostic export redaction verified? | Yes / waived | TBD | Diagnostics audit | -| Is dependency/license scan completed? | Yes / waived | TBD | Dependency scan report | -| Are high/critical dependency issues resolved or waived? | Yes / waived | TBD | Security waiver record | -| Are user-facing errors safe and non-sensitive? | Yes / waived | TBD | Review record | -| Are platform permissions justified? | Yes / waived | TBD | Permission review | - -## 8. Platform Readiness - -| Platform | Release status | Build artifact | Verification status | Known blockers | Owner | -|---|---|---|---|---|---| -| Windows | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD | -| macOS | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD | -| Linux | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD | -| Android | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD | -| iOS | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD, including Apple App Store SDK gate | TBD | TBD | - -## 9. Legal, OSS, and Privacy Readiness - -| Question | Required answer | Status | Evidence | Owner | -|---|---|---|---|---| -| Is the app clearly identified as unofficial and not affiliated with TeamSpeak? | Yes | TBD | App copy / legal notice | Legal | -| Is the TeamSpeak trademark/non-affiliation wording reviewed? | Yes | TBD | Legal review record | Legal | -| Is OSS license review completed? | Yes | TBD | OSS notice / license report | Legal / Engineering | -| Are Rust, Flutter, tsclientlib, and platform dependencies included in OSS review? | Yes | TBD | OSS license report | Legal / Engineering | -| Is privacy policy completed for the release scope? | Yes | TBD | Privacy policy URL/file | Legal | -| Are diagnostics/logging disclosures complete? | Yes | TBD | Privacy policy / in-app notice | Legal / Product | -| Are App Store / Play Store metadata requirements complete if applicable? | Yes / N/A | TBD | Store metadata review | Product / Legal | - -## 10. Known Issues and Waivers - -| Issue ID | Description | Severity | Impact | Waiver? | Waiver owner | Expiry / follow-up | -|---|---|---|---|---|---|---| -| TBD | TBD | TBD | TBD | TBD | TBD | TBD | - -## 10A. Required Security, Privacy, and Legal Evidence - -| Evidence document | Required status before External Beta / Public release | -|---|---| -| `CHANORA_SEC_Threat_Model_v0.9.2.2.1.md` | Reviewed; v1.0 approved before public release | -| `CHANORA_SEC_Secure_Storage_Audit_Report_v0.9.2.2.1.md` | Completed for release-scope platforms | -| `CHANORA_SEC_Diagnostic_Redaction_Audit_Report_v0.9.2.2.1.md` | Completed and approved | -| `CHANORA_SEC_Dependency_And_Supply_Chain_Report_v0.9.2.2.1.md` | Completed with no unapproved critical/high risk | -| `CHANORA_PRIV_Privacy_Policy_v0.9.2.2.1.md` | Legal/privacy reviewed; v1.0 approved before public release | -| `CHANORA_LEGAL_Trademark_And_Attribution_Review_v0.9.2.2.1.md` | Legal reviewed; v1.0 approved before public release | - - -## 10B. Key Product Decision Gate - -| Decision | Required status before Go | -|---|---| -| Release type | Confirmed | -| Release platform scope | Confirmed | -| Minimum iOS version | Confirmed | -| Apple App Store SDK gate | Confirmed and release-inspected | -| Minimum Android version | Confirmed | -| Android target SDK policy | Confirmed | -| Multiple active connections in MVP | Confirmed | -| AEC/AGC/NS/HPF default states | Confirmed | -| Audio processing implementation path | Confirmed | -| Legal/trademark/licensing review requirement | Confirmed | -| Local database choice | Confirmed | -| Flutter/Rust bridge choice | Confirmed | -| Diagnostics upload policy | Confirmed | -| Crash reporting policy | Confirmed | -| Product license model | Confirmed or explicitly not required for release scope | - - -## 11. Release Decision - -| Decision | Meaning | -|---|---| -| Go | Release is approved for the stated scope and platforms. | -| Conditional Go | Release is approved only if listed conditions are satisfied. | -| No-Go | Release is not approved. | - -**Decision:** TBD: Go / Conditional Go / No-Go - -## 12. Conditional Go Conditions - -| Condition ID | Condition | Owner | Due date | Evidence required | -|---|---|---|---|---| -| TBD | TBD | TBD | TBD | TBD | - -## 13. Approval - -| Role | Name | Decision | Date | Evidence / Signature | -|---|---|---|---|---| -| Product Owner | TBD | TBD | TBD | TBD | -| Engineering Owner | TBD | TBD | TBD | TBD | -| QA / Verification Owner | TBD | TBD | TBD | TBD | -| Security Reviewer | TBD | TBD | TBD | TBD | -| Legal / Compliance Reviewer | TBD | TBD | TBD | TBD | -| Release Manager | TBD | TBD | TBD | TBD | - -## 14. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial release readiness and Go/No-Go record template. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Release Readiness Addendum (Baseline Candidate 0.9.3) - -The release readiness checklist for every desktop release artefact gains the following items per SysDes-148, SysRS-298, and DEC-023 / DEC-024 / DEC-025 / DEC-026 / DEC-027 / DEC-028. - -| Item | Owner | Evidence required | Status | -|---|---|---|---| -| RR-PTT-001 Windows Global PTT verified on a Windows reference host. | Windows Platform Owner | Live measurement of `PttCapabilityLevel` + `backend_id` returned at runtime. Backend identifier shall be `raw-input` (preferred) or `low-level-hook` (fallback) for Global. | Open | -| RR-PTT-002 macOS Global PTT verified with permission granted on a macOS reference host. | macOS Platform Owner | Live measurement + `permission_state = Granted` reported through the Event-Tap backend; UI capability badge screenshot. | Open | -| RR-PTT-003 macOS Focused PTT fallback verified with permission denied. | macOS Platform Owner | Live measurement of `PttCapabilityLevel::L0Focused` after revoking Input Monitoring; UI capability badge screenshot showing the fallback notice. | Open | -| RR-PTT-004 Linux Global PTT verified on GNOME-on-Wayland. | Linux Platform Owner | Live measurement returning `gnome-wayland-portal` backend identifier from a live GNOME-on-Wayland host; portal binding dialog screenshot. | **Implemented** (live `CreateSession` + `BindShortcuts` + signal subscription landed in code; awaiting live trace from a GNOME-on-Wayland reference host before the cell can be marked Done). | -| RR-PTT-005 Linux Focused fallback verified on a non-tested compositor (any of: X11, sway, KDE) | Linux Platform Owner | Live measurement of `L0Focused` on at least one non-tested compositor; release notes do not claim Global support on the untested environment. | Open | -| RR-PTT-006 Diagnostic export carries no key data. | Privacy Reviewer | Inspection of a user-initiated diagnostic export captured while PTT is bound to a real key; export shall contain `capability_level`, `backend_id`, `bound_input_class` and shall not contain a recognisable key code. | Open | -| RR-PTT-007 Missed-key-up watchdog timeout demonstrated. | Audio Owner | Test trace showing `transmit_active` clearing after the configured 30 s ceiling when the watchdog forces a release. | **Done (v1.0.0-rc.4)** — covered by `chanora_audio::ptt::tests::watchdog_clears_transmit_after_timeout` (and the negative `watchdog_does_not_clear_on_normal_release`). Live platform trace still required per RR-PTT-001..005. | -| RR-PTT-008 Capability badge matches runtime capability on every supported platform. | UX Owner | UI screenshot or platform-test trace. | Open | - -A release decision shall be **No-Go** for any platform whose RR-PTT items are not all closed. - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT release-readiness items RR-PTT-001 through RR-PTT-008 covering Windows / macOS / Linux Global verification, permission-denied fallback verification, diagnostic-export privacy inspection, missed-key-up watchdog test, and capability-badge UI verification. | -| 0.9.4 | 2026-05-15 | RR-PTT-007 (missed-key-up watchdog) flipped to Done — the cross-platform `chanora_audio::ptt::MissedKeyUpWatchdog` ships in v1.0.0-rc.4 with two passing unit tests. Live per-platform traces (RR-PTT-001..005, RR-PTT-008) remain required for the live verification phase but are no longer blocked on engineering. | -| 0.9.5 | 2026-05-15 | RR-PTT-004 status flipped to Implemented (live trace from a GNOME-on-Wayland reference host pending). The Linux backend now runs the full portal `CreateSession` + `BindShortcuts` + `Activated` / `Deactivated` flow on a dedicated tokio task per backend instance. | diff --git a/docs/release/windows-build.md b/docs/release/windows-build.md deleted file mode 100644 index d65039c..0000000 --- a/docs/release/windows-build.md +++ /dev/null @@ -1,514 +0,0 @@ -# Building Chanora v0.2.0-beta.1 on Windows via Azure VM - -**Document type:** Release / Platform Build Instructions -**Version:** 0.1.0 -**Status:** Draft -**Language:** English -**Product:** Chanora -**Repo path:** `docs/release/windows-build.md` - ---- - -## 1. Purpose - -This document gives exact step-by-step instructions for building the -Chanora `v0.2.0-beta.1` Internal Beta on a Windows host, using an -Azure Virtual Machine. It exists because the development host is -Linux; `flutter build windows` requires a Windows host with Visual -Studio 2022 and cannot be cross-compiled. - -After following this doc you will have: - -- `chanora_flutter.exe` — the Windows desktop binary. -- `chanora_bridge.dll` — the Rust cdylib loaded by the .exe via FFI. -- A complete release bundle directory the app needs at runtime. - -The doc assumes you have: - -- An Azure subscription with permission to create VMs. -- An RDP client (Windows: built-in; macOS: Microsoft Remote Desktop; - Linux: `remmina` or `rdesktop`). -- The Chanora source code locally (this repository). - ---- - -## 2. Toolchain versions pinned for this build - -| Tool | Version | Why | -|---|---|---| -| Windows Server | 2022 Datacenter | LTS, plenty of Azure images, ships PowerShell 5.1 + Server Core APIs | -| Visual Studio 2022 | Build Tools (Community works too) | Required by `flutter build windows`; provides MSVC, Windows SDK, CMake, link.exe | -| Visual Studio workload | "Desktop development with C++" | Provides MSVC v143, Windows 10/11 SDK, CMake tools, C++ ATL | -| Flutter SDK | 3.41.9 stable | Matches the Linux/Beta build; bridge codegen is version-sensitive | -| Dart SDK | 3.11.5 | Comes with Flutter 3.41.9 | -| Rust toolchain | stable 1.95 (or newer) | Workspace `rust-version = "1.95"` | -| Rust target | `x86_64-pc-windows-msvc` | Native Windows ABI; produces MSVC-compatible .dll | -| `cargo-ndk` | N/A | Not needed for Windows; only Android needs it | -| Opus library | bundled via `audiopus_sys` build script + cmake | On Windows there is no system libopus by default; we build it from source | -| Git for Windows | latest | Convenient `git` + the bundled Bash for running `flutter` if needed | -| 7-Zip (optional) | latest | Convenient for unpacking the source bundle if you uploaded it as zip | - ---- - -## 3. Azure VM provisioning - -### 3.1 Recommended SKU - -| Setting | Value | Rationale | -|---|---|---| -| Image | `Windows Server 2022 Datacenter — x64 Gen2` | Most common LTS Windows image | -| Size | `Standard_D4s_v5` (4 vCPU, 16 GiB) or larger | The Cargo cold build pulls hundreds of crates; 4 cores keeps the build under 30 minutes | -| OS disk | Premium SSD 128 GiB | Default 128 GiB is enough for VS 2022 (~10 GiB), Flutter SDK (~2 GiB), Rust toolchain (~1 GiB), source + build artefacts (~15 GiB) | -| Auth | Password (you'll RDP in) | Sufficient for a short-lived build VM | -| Inbound port rules | Allow **RDP (3389)** only from your IP | Lock RDP to your IP via NSG; never open to 0.0.0.0/0 | -| Networking | New VNet + public IP | Standard for an ad-hoc build host | -| Auto-shutdown | Enable, 19:00 local time | Stops you forgetting and burning hours | - -### 3.2 Estimated cost - -`Standard_D4s_v5` in West US 2 is about **USD $0.20/hour** for the -compute plus ~USD $0.01/hour for the disk. A first cold build -(provision → install everything → compile → archive) is typically -2–3 hours. Total: under **USD $1** per build session if you -deallocate after. - -> **Cost gotcha:** *Stopped (deallocated)* VMs do not bill for -> compute; *Stopped* (in the OS shutdown sense, but not deallocated -> in Azure) still bills compute. Always check the Azure portal shows -> the VM as **Stopped (deallocated)**. - -### 3.3 Provisioning checklist - -1. Azure Portal → **Create a resource** → **Windows Server 2022 Datacenter (x64 Gen2)**. -2. Choose region near you. -3. Size: `Standard_D4s_v5`. -4. Administrator account: pick a username (e.g. `chanora`) + a strong - password. -5. Inbound ports: RDP only, **restricted to your public IP**. -6. Disks: keep Premium SSD 128 GiB. -7. Networking: defaults; ensure auto-assign public IP. -8. Management → Auto-shutdown: **On**, time = end of your work day, - notification = email. -9. Review + create. - -### 3.4 First RDP login - -1. Get the VM's public IP from the Azure portal. -2. RDP in as `chanora` / your password. -3. (Optional) Open Server Manager → Local Server → IE Enhanced - Security Configuration → turn **Off** for Administrators so the - downloads in §4 don't get blocked. - ---- - -## 4. Install the toolchain (one-time per VM) - -Run all of these in an **elevated PowerShell** (right-click PowerShell → Run as Administrator). - -### 4.1 Visual Studio 2022 Build Tools + workload - -```powershell -# Download the VS 2022 Build Tools bootstrapper -Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_buildtools.exe' ` - -OutFile "$env:TEMP\vs_buildtools.exe" - -# Install with the C++ desktop workload (this is what Flutter requires). -# --quiet suppresses UI; --wait blocks until done; takes 10-15 minutes. -& "$env:TEMP\vs_buildtools.exe" --quiet --wait --norestart ` - --add Microsoft.VisualStudio.Workload.VCTools ` - --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` - --add Microsoft.VisualStudio.Component.Windows11SDK.22621 ` - --add Microsoft.VisualStudio.Component.VC.CMake.Project ` - --add Microsoft.VisualStudio.Component.VC.ATL ` - --includeRecommended -``` - -When this completes, **reboot the VM** (Visual Studio Build Tools -needs it for environment variables). - -### 4.2 Git for Windows - -```powershell -winget install --id Git.Git --silent --accept-source-agreements --accept-package-agreements -``` - -### 4.3 Rust (stable, with the MSVC target) - -```powershell -# Download rustup-init for Windows. -Invoke-WebRequest -Uri 'https://win.rustup.rs/x86_64' ` - -OutFile "$env:TEMP\rustup-init.exe" - -# Install the default toolchain (stable-x86_64-pc-windows-msvc). -& "$env:TEMP\rustup-init.exe" -y --default-toolchain stable --profile minimal - -# Open a NEW PowerShell so PATH picks up cargo. -# Then verify: -cargo --version -rustc --version -``` - -Expected output: `cargo 1.95.0` (or newer), `rustc 1.95.0`. The -default target on Windows is `x86_64-pc-windows-msvc` — this is what -we want. - -### 4.4 Flutter SDK (pinned to 3.41.9 stable) - -```powershell -# Download Flutter SDK -$flutter = 'https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_3.41.9-stable.zip' -Invoke-WebRequest -Uri $flutter -OutFile "$env:TEMP\flutter.zip" -Expand-Archive "$env:TEMP\flutter.zip" -DestinationPath 'C:\' - -# Add to PATH for the current user (persists across sessions). -[Environment]::SetEnvironmentVariable( - 'Path', - [Environment]::GetEnvironmentVariable('Path', 'User') + ';C:\flutter\bin', - 'User' -) - -# Open a NEW PowerShell so PATH applies, then: -flutter --version -flutter doctor -``` - -`flutter doctor` should show green on: - -- ✓ Flutter (Channel stable, 3.41.9, on Microsoft Windows …) -- ✓ Windows Version (Windows … 10.0.20348 or later) -- ✓ Visual Studio - develop Windows apps (Visual Studio Build Tools 2022 …) - -Yellow on Android Studio / Chrome is fine — we're only building -Windows. - -### 4.5 `flutter_rust_bridge_codegen` and Dart deps - -```powershell -cargo install flutter_rust_bridge_codegen --version "=2.12.0" -``` - -Takes ~5 minutes (compiles `flutter_rust_bridge_codegen` from source). - -### 4.6 Opus build dependency - -The `audiopus` Rust crate wraps the C Opus library. On Windows there -is no system Opus, so the `audiopus_sys` build script will attempt to -build Opus from source via CMake (which the VS workload already -provided). No extra action is required — but verify CMake is on -PATH: - -```powershell -cmake --version -``` - -Expected: `cmake version 3.x` (any 3.x ≥ 3.18 is fine). - -If CMake is not found, install it explicitly: - -```powershell -winget install --id Kitware.CMake --silent -``` - ---- - -## 5. Get the source onto the VM - -Two options. Pick whichever is easier for you. - -### Option A — Push the repo to a temporary git remote - -On the Linux host where the repo lives: - -```bash -# E.g. create a private GitHub repo and push: -git remote add origin https://github.com//chanora.git -git push --all -git push --tags -``` - -Then on the Windows VM: - -```powershell -cd C:\ -git clone https://github.com//chanora.git -cd chanora -git checkout v0.2.0-beta.1 -``` - -### Option B — Upload the source as a zip via RDP clipboard - -On Linux: - -```bash -cd /home/milkice -git -C chanora archive --format=zip --output=/tmp/chanora-v0.2.0-beta.1.zip v0.2.0-beta.1 -``` - -Copy `/tmp/chanora-v0.2.0-beta.1.zip` into the RDP session -(clipboard or shared drive), unzip into `C:\chanora\`. - -Either way, you end up with the working tree at `C:\chanora\`, -checked out at the `v0.2.0-beta.1` tag. - ---- - -## 6. Add the Windows platform to the Flutter app - -The product Flutter app was created with `--platforms=linux,android`, -so the `windows/` platform folder does not yet exist. Add it once on -the build VM: - -```powershell -cd C:\chanora\apps\chanora_flutter -flutter create --platforms=windows . -``` - -This creates `apps/chanora_flutter/windows/` containing: - -``` -windows/ - CMakeLists.txt - flutter/ - CMakeLists.txt - generated_plugin_registrant.cc - ... - runner/ - main.cpp - Runner.rc - chanora_flutter.exe.manifest - ... -``` - -> **Important:** Do **not** commit this `windows/` folder back to the -> repo from the VM unless you also do the corresponding edits the -> source-of-truth host uses (icon, manifest, etc.). For Beta it is -> fine to keep it VM-only. - ---- - -## 7. Build the Rust cdylib for Windows - -```powershell -cd C:\chanora -cargo build --release -p chanora_bridge -``` - -This builds the workspace, including: - -- The whole `tsclientlib` git dependency tree (slow first time — - expect ~5–10 minutes for the first compile of `audiopus_sys` + - `tsproto` etc.). -- `chanora_bridge` as a `cdylib` + `staticlib` + `rlib`. - -Expected output location: - -``` -C:\chanora\target\release\chanora_bridge.dll -``` - -(Note: no `lib` prefix on Windows MSVC.) - -Verify: - -```powershell -Get-Item C:\chanora\target\release\chanora_bridge.dll | Format-List Name, Length, LastWriteTime -``` - -The DLL is typically ~16–18 MiB. - ---- - -## 8. Regenerate the FRB bindings (optional — only if you changed the bridge API) - -The Linux build already produced `lib/src/rust/*.dart` and -`crates/chanora_bridge/src/frb_generated.rs`. The bindings are -platform-agnostic Dart + Rust source, so **they do not need -regenerating on Windows**. Skip §8 unless you modified -`crates/chanora_bridge/src/api.rs` after `v0.2.0-beta.1`. - -If you do need to regenerate: - -```powershell -cd C:\chanora -flutter_rust_bridge_codegen generate -``` - -Takes ~5–10 minutes the first time on Windows. - ---- - -## 9. Build the Flutter Windows binary - -```powershell -cd C:\chanora\apps\chanora_flutter -flutter pub get -flutter build windows --release -``` - -`flutter build windows`: - -1. Invokes CMake on `apps/chanora_flutter/windows/`. -2. Builds `chanora_flutter.exe` via MSVC. -3. Bundles the Flutter engine DLL (`flutter_windows.dll`), ICU data, - Dart-AOT-compiled `app.so` (delivered as `data\app.so`), the - Flutter `data\` directory, and platform-specific resources. - -Build time: ~3–5 minutes on `Standard_D4s_v5` once dependencies are -cached. - -Expected output location: - -``` -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\ -``` - -Contents: - -| File | Size (approx) | Notes | -|---|---|---| -| `chanora_flutter.exe` | ~10 MiB | The launcher .exe | -| `flutter_windows.dll` | ~17 MiB | Flutter engine | -| `data\icudtl.dat` | ~10 MiB | Unicode tables | -| `data\app.so` | varies | AOT-compiled Dart code | -| `data\flutter_assets\` | varies | Images, fonts, ARB-derived .json | - ---- - -## 10. Add the Rust DLL to the bundle - -The Flutter app loads `chanora_bridge.dll` at runtime via `dart:ffi`. -Drop the DLL next to the .exe (the same directory): - -```powershell -$src = 'C:\chanora\target\release\chanora_bridge.dll' -$dst = 'C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\' -Copy-Item $src $dst -Force -``` - -Verify everything is in place: - -```powershell -Get-ChildItem $dst -Recurse | Select-Object FullName, Length | - Format-Table -AutoSize -``` - -You should see: - -``` -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\chanora_flutter.exe -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\chanora_bridge.dll -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\flutter_windows.dll -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\data\app.so -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\data\icudtl.dat -C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\data\flutter_assets\... -``` - ---- - -## 11. Smoke test on the VM - -Double-click `chanora_flutter.exe` (or `& '...\chanora_flutter.exe'` -in PowerShell). The Beta UI should appear: - -- Banner: "Beta build — voice in/out wired; not production ready." -- Form: `cn.teamspeak.app` + `ChanoraBeta` pre-populated. -- Connect button. - -Press **Connect** → after a few seconds you should see the channel -tree of `cn.teamspeak.app` (Vigorous Pro). Press **Start audio** → -PTT button appears. Hold it to transmit (a Windows mic permission -prompt may appear). - -> **Network gotcha:** Some Azure regions block UDP 9987 outbound by -> default. If Connect times out, check the VM's NSG (outbound rules) -> and the regional firewall. - ---- - -## 12. Package the release artefact - -```powershell -$src = 'C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release' -$out = 'C:\chanora-v0.2.0-beta.1-windows-x64.zip' -Compress-Archive -Path "$src\*" -DestinationPath $out -Force -Get-Item $out | Format-List Name, Length -``` - -Expected size: ~50–80 MiB. - ---- - -## 13. Download to your local host - -From your local machine (Linux/macOS/Windows): - -```bash -# Use Azure CLI to copy via SAS, or just RDP the file out. -# Simplest: in the RDP session enable clipboard file transfer -# (mstsc /control or Remmina's "share local folder"), then drag the -# zip out. -``` - -Or use Azure Blob Storage if you want versioned hosting. - ---- - -## 14. Final artefact paths (what you actually produce) - -Inside the VM, after a successful build: - -| Artefact | Path on the VM | -|---|---| -| Bridge DLL | `C:\chanora\target\release\chanora_bridge.dll` | -| Flutter EXE | `C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\chanora_flutter.exe` | -| Complete runtime bundle | `C:\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\` | -| Release zip | `C:\chanora-v0.2.0-beta.1-windows-x64.zip` | - ---- - -## 15. After the build — deallocate the VM - -```powershell -# In the Azure CLI on your local host, OR via the portal: -az vm deallocate --resource-group --name -``` - -Verify the portal says **Stopped (deallocated)**. - ---- - -## 16. Known issues and caveats - -| Issue | Workaround | -|---|---| -| `audiopus_sys` build fails with "cmake not found" | Re-run §4.6's `winget install Kitware.CMake` and open a new PowerShell. | -| `flutter build windows` complains about Long Paths | `Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Value 1`, then reboot. | -| Microsoft Defender quarantines `chanora_bridge.dll` | Add `C:\chanora\target\release\` to Defender exclusions before the cargo build. | -| The build VM cannot reach `cn.teamspeak.app` on UDP 9987 | Confirm Azure regional firewall allows outbound UDP. The Linux dev host's verification doesn't translate to Azure VMs automatically. | -| First `cargo build` takes > 30 minutes | Normal. Subsequent builds reuse `target/` and are ~1 minute. | -| `flutter pub get` fails behind a corporate proxy | Set `HTTPS_PROXY` and `HTTP_PROXY` environment variables before running. | -| The `windows/` folder created by `flutter create` is missing icons | Replace `windows\runner\resources\app_icon.ico` with a Chanora icon. The default Flutter icon ships otherwise. Cosmetic only for Beta. | - ---- - -## 17. Reproducibility note - -This build process is **not bit-reproducible** on Windows in the -current state: - -- The `audiopus_sys` build script picks the CMake-discovered MSVC - toolchain, which embeds its version into the DLL. -- Dart AOT compilation embeds a Dart kernel hash. -- Windows resource compilation embeds a build timestamp. - -If true reproducibility is required for a future External Beta or -MVP Public release, that is Beta+ work; the build above is -sufficient for an Internal Beta milestone per DEC-001. - ---- - -## 18. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial Windows build instructions for Chanora `v0.2.0-beta.1`. Targets Azure VM `Standard_D4s_v5` running Windows Server 2022, Visual Studio 2022 Build Tools with the C++ desktop workload, Rust 1.95 stable (`x86_64-pc-windows-msvc`), Flutter 3.41.9 stable, `flutter_rust_bridge` 2.12.0. Produces `chanora_flutter.exe` + `chanora_bridge.dll` packaged into `chanora-v0.2.0-beta.1-windows-x64.zip`. | diff --git a/docs/requirements/srs.md b/docs/requirements/srs.md deleted file mode 100644 index 6b11506..0000000 --- a/docs/requirements/srs.md +++ /dev/null @@ -1,2850 +0,0 @@ -# Chanora SRS — Software Requirements Specification - -**Product name:** Chanora -**Document type:** SRS / Software Requirements Specification -**ASPICE process alignment:** SWE.1 Software Requirements Analysis -**Version:** 0.9.9 -**Status:** Baseline Candidate -**Source baseline:** `chanora_SysDes_ASPICE_SYS3_v0.5.md` -**Architecture baseline:** Flutter + Rust Core + `tsclientlib` protocol adapter -**Target client platforms:** Windows, macOS, Linux, iOS, Android - -**Repo path:** `docs/requirements/srs.md` --- - -## 1. Purpose - -This SRS defines the software requirements for the Chanora client application. It is derived from the approved SysDes baseline and is written in the style of ASPICE SWE.1 Software Requirements Analysis. - -The SRS covers all SysDes design items that require implementation or enablement by the software team, including software-facing constraints from hardware, operating system services, networks, external compatible servers, deployment, diagnostics, and verification. - -Chanora remains an application, not an operating system. The software requirements specify what the Chanora software shall do and what operating-environment assumptions or interfaces it shall handle. - -## 2. ASPICE SWE.1 Alignment - -This document addresses the following SWE.1 concerns: - -- Specify software requirements from system requirements and system architecture. -- Structure and prioritize software requirements. -- Analyze software requirements for correctness, technical feasibility, and operating-environment impact. -- Establish consistency and traceability to system architecture; system-requirement coverage is inherited through the SysDes allocation chain. -- Communicate the agreed software requirements and impact analysis to affected parties. - -## 3. Software Scope - -### 3.1 In Scope for Software Team - -The software team owns or implements the following software elements: - -- Chanora application container -- Flutter UI layer -- Flutter state layer -- Flutter-Rust bridge layer -- Rust Core and connection manager -- Protocol adapter using `tsclientlib` -- State synchronization engine -- Audio subsystem -- Platform adapter software layer -- Local data store integration -- Secure storage integration layer -- Diagnostics and observability subsystem -- Software-facing deployment scripts and release metadata -- Software verification hooks and test-support tooling - -### 3.2 Out of Scope for Software Implementation - -- Implementing or operating external TeamSpeak 3-compatible servers -- Controlling user-managed network infrastructure, routers, VPNs, NAT devices, or ISPs -- Manufacturing or controlling physical audio hardware -- Changing operating system vendor policies for permissions, secure storage, background execution, or app-store review -- Providing a Chanora-operated backend for MVP voice, channels, or text - -Software shall still handle these items as external interfaces, constraints, assumptions, degraded states, or error conditions where applicable. - -## 4. Requirement Attribute Model - -Each SRS requirement uses the following attributes. - -| Attribute | Meaning | -|---|---| -| SRS ID | Unique software requirement identifier, formatted as `SRS-XXX` | -| Type | Functional, non-functional, interface, platform, security, diagnostics, packaging, analysis, or process classification | -| Stage | Delivery stage: `P0 / MVP`, `P1 / Beta`, `P2 / Production`, or `P3 / Future` | -| Allocated to | Software component or software engineering responsibility | -| Source SysDes | System design item(s) from which the software requirement is directly derived | -| Verification method | Review, inspection, unit test, integration test, system test, platform test, security audit, performance test, demo, or release audit | -| Acceptance criteria | Objective condition for acceptance | -| Analysis | Technical feasibility and impact note | - - -## 4.1 Traceability Policy - -This SRS uses `Source SysDes` as the only direct upstream source field for individual `SRS-XXX` requirements. - -The approved lifecycle chain is: - -```text -System requirements baseline -> SysDes -> SRS -``` - -Therefore: - -- System-level requirements are allocated and justified in SysDes. -- SRS requirements are derived from SysDes design items. -- Individual SRS requirements shall cite `Source SysDes` only. -- Individual SRS requirements shall not directly cite upstream system requirement IDs. -- A missing software need shall be fixed by correcting SysDes first, then deriving or updating SRS. - -## 5. Software Requirements - -### 5.1 SWE.1 Process, Traceability, and Baseline Requirements - -**SRS-001**: The software requirements specification shall define software requirements derived from the approved Chanora SysDes baseline. - -- Type: Process / SWE.1 -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-001 through SysDes-003 -- Verification method: Review -- Acceptance criteria: SRS contains requirement statements, attributes, and source links to SysDes. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-002**: Each software requirement shall have a unique `SRS-XXX` identifier, type, stage, software allocation, source SysDes link, verification method, acceptance criteria, and feasibility analysis. - -- Type: Process / Requirement Attribute -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-004 through SysDes-009, SysDes-092 through SysDes-097 -- Verification method: Inspection -- Acceptance criteria: Every SRS item contains the mandatory attribute fields. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-003**: The software requirements shall be structured by software component and cross-cutting concern to support allocation to the software team. - -- Type: Process / Structuring -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-005, SysDes-006, SysDes-010, SysDes-038, SysDes-039 -- Verification method: Review -- Acceptance criteria: Document sections map to UI, state, bridge, Rust Core, protocol, audio, storage, diagnostics, platform adapters, packaging, and verification hooks. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-004**: The software requirements shall be prioritized using P0 / MVP, P1 / Beta, P2 / Production, and P3 / Future stage labels. - -- Type: Process / Prioritization -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-006, SysDes-017, SysDes-091, SysDes-102 through SysDes-110 -- Verification method: Inspection -- Acceptance criteria: Each SRS item contains a stage value. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-005**: The software requirements shall maintain bidirectional traceability to SysDes design items only; upstream system-requirement coverage shall be inherited through the approved SysDes allocation baseline. - -- Type: Process / Traceability -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-008, SysDes-009, SysDes-092 through SysDes-097, SysDes-108 through SysDes-110 -- Verification method: Inspection -- Acceptance criteria: Coverage matrix shows SysDes-to-SRS and SRS-to-SysDes mappings, without direct links from SRS requirements to upstream system requirement IDs. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-006**: The software requirements shall analyze impact on the operating environment for OS services, audio hardware, network connectivity, external compatible servers, secure storage, deployment, and mobile lifecycle constraints. - -- Type: Process / Operating Environment Analysis -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-018 through SysDes-023, SysDes-032, SysDes-034, SysDes-036, SysDes-080, SysDes-082, SysDes-084, SysDes-086, SysDes-090, SysDes-091, SysDes-101 -- Verification method: Review -- Acceptance criteria: Operating environment section identifies software impacts and external dependencies. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-007**: The agreed SRS baseline shall be communicated to SAD, SDD, implementation, and verification authors. - -- Type: Process / Communication -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-003, SysDes-098 through SysDes-100 -- Verification method: Review -- Acceptance criteria: Revision history and communication section identify affected parties and downstream use. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.2 Software Boundary and Architecture Requirements - -**SRS-008**: The software shall be implemented as a cross-platform client application and shall not be implemented or described as an operating system. - -- Type: Constraint -- Stage: P0 / MVP -- Allocated to: Application Container -- Source SysDes: SysDes-002, SysDes-024 -- Verification method: Review -- Acceptance criteria: App metadata, documentation, and architecture describe Chanora as an application. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-009**: The software shall operate without requiring Chanora-operated backend infrastructure for MVP voice, channel, and text operation. - -- Type: Constraint -- Stage: P0 / MVP -- Allocated to: Application Container, Rust Core -- Source SysDes: SysDes-016, SysDes-083 -- Verification method: Review, System Test -- Acceptance criteria: MVP operation connects directly to user-provided compatible servers. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-010**: The software shall not implement TeamSpeak-compatible server hosting functionality in MVP. - -- Type: Constraint -- Stage: P0 / MVP -- Allocated to: Application Container, Protocol Adapter -- Source SysDes: SysDes-023, SysDes-082, SysDes-083 -- Verification method: Inspection -- Acceptance criteria: No server-hosting module or process exists in the MVP software. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-011**: The software shall use a layered structure that separates Flutter UI, Flutter State, Bridge, Rust Core, Protocol Adapter, State Sync, Audio, Storage, Diagnostics, and Platform Adapters. - -- Type: Architecture Constraint -- Stage: P0 / MVP -- Allocated to: All Software Components -- Source SysDes: SysDes-010, SysDes-038, SysDes-039, SysDes-041 -- Verification method: Inspection -- Acceptance criteria: Repository and dependency graph show separate modules/crates/layers. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-012**: The software shall keep real-time audio processing outside Flutter UI. - -- Type: Architecture Constraint -- Stage: P0 / MVP -- Allocated to: Flutter UI, Audio Subsystem -- Source SysDes: SysDes-014, SysDes-040, SysDes-071, SysDes-072 -- Verification method: Inspection, Performance Test -- Acceptance criteria: Flutter UI does not process PCM frames or execute real-time DSP. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-013**: The software shall support Windows, macOS, Linux, iOS, and Android through shared Flutter UI, shared Rust Core, and platform-specific adapters. - -- Type: Platform Requirement -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, Platform Adapters -- Source SysDes: SysDes-012, SysDes-032, SysDes-041 -- Verification method: Build Test -- Acceptance criteria: Target platform builds compile with shared core and platform adapter boundaries. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-014**: The software shall isolate OS-specific permissions, audio routing, lifecycle, secure storage, notification, and packaging behavior behind platform adapter interfaces. - -- Type: Architecture Constraint -- Stage: P0 / MVP -- Allocated to: Platform Adapters -- Source SysDes: SysDes-032, SysDes-050, SysDes-080 -- Verification method: Inspection, Integration Test -- Acceptance criteria: Platform-specific code is not embedded directly in core protocol or state modules. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-015**: The software shall provide verification hooks for protocol, state, audio, security, packaging, and platform behavior. - -- Type: Verification Hook -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, State Sync, Audio, Diagnostics, Platform Adapters -- Source SysDes: SysDes-017, SysDes-102 through SysDes-107 -- Verification method: Inspection, Demo -- Acceptance criteria: Tools, logs, and tests expose evidence for each verification area. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.3 Application Container and Flutter UI Requirements - -**SRS-016**: The software shall provide an application container that initializes Flutter UI, Bridge, Rust Core, platform adapters, storage, and diagnostics in a deterministic startup sequence. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Application Container -- Source SysDes: SysDes-024, SysDes-038, SysDes-041 -- Verification method: Integration Test -- Acceptance criteria: Application startup reaches idle/home state without race-condition crashes. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-017**: The software shall provide a home or entry screen for manual connection, recent servers, and saved bookmarks. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Source SysDes: SysDes-025, SysDes-055, SysDes-059 -- Verification method: UI Test -- Acceptance criteria: User can open connection and bookmark flows from the entry screen. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-018**: The software shall provide a manual connection UI that accepts host or IP address, port, nickname, and optional server password. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Source SysDes: SysDes-025, SysDes-055, SysDes-059, SysDes-065 -- Verification method: UI Test -- Acceptance criteria: Connection request can be submitted with all required fields and validated before dispatch. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-019**: The software shall display connection states including Disconnected, Connecting, Synchronizing, Connected, Reconnecting, and Failed or equivalent user-safe states. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Flutter State -- Source SysDes: SysDes-025, SysDes-060, SysDes-061, SysDes-064, SysDes-066 -- Verification method: UI Test, System Test -- Acceptance criteria: UI state follows Rust Core connection events. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-020**: The software shall display a server channel tree derived from the Rust Core snapshot and delta events. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Flutter State -- Source SysDes: SysDes-025, SysDes-026, SysDes-030, SysDes-046, SysDes-061, SysDes-067, SysDes-068 -- Verification method: UI Test, System Test -- Acceptance criteria: Channel tree updates after initial sync and live channel events. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-021**: The software shall display online clients in their channels and update the display after client join, leave, and move events. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Flutter State -- Source SysDes: SysDes-025, SysDes-026, SysDes-030, SysDes-061, SysDes-067, SysDes-068 -- Verification method: UI Test, System Test -- Acceptance criteria: Client list reflects snapshot and live delta changes. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-022**: The software shall visually identify the current user and current channel when the data is available from Rust Core. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Flutter State -- Source SysDes: SysDes-025, SysDes-026, SysDes-030, SysDes-067 -- Verification method: UI Test -- Acceptance criteria: Current user and current channel receive distinct UI state markers. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-023**: The software shall provide a channel join interaction that sends a join command through the Bridge and waits for Rust Core or protocol confirmation before treating the join as authoritative. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Bridge, Rust Core -- Source SysDes: SysDes-055, SysDes-069 -- Verification method: System Test -- Acceptance criteria: UI does not finalize current-channel state until confirmation or failure event is received. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-024**: The software shall provide channel text chat UI for message display and message input. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Bridge, Rust Core -- Source SysDes: SysDes-025, SysDes-055, SysDes-070 -- Verification method: UI Test, System Test -- Acceptance criteria: User can send text and receive displayed messages through core events. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-025**: The software shall provide a persistent voice control surface for microphone mute, output deaf, push-to-talk state, input level, and current channel. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Audio Subsystem -- Source SysDes: SysDes-025, SysDes-031, SysDes-056, SysDes-063, SysDes-071, SysDes-072 -- Verification method: UI Test, System Test -- Acceptance criteria: Voice controls are visible and correctly update Rust Core/audio state. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-026**: The software shall provide an audio settings UI for input device, output device, Echo Canceller, Automatic Gain Control, Noise Suppression, High-Pass Filter, and related defaults. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter UI, Audio Subsystem, Storage -- Source SysDes: SysDes-025, SysDes-031, SysDes-033, SysDes-056, SysDes-075, SysDes-081, SysDes-086 -- Verification method: UI Test -- Acceptance criteria: Settings can be changed and persist across application restart where supported. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-027**: The software shall provide permission explanation UI before requesting microphone, notification, or mobile foreground-service related permissions where platform guidelines allow. - -- Type: Functional / Privacy -- Stage: P0 / MVP -- Allocated to: Flutter UI, Platform Adapters -- Source SysDes: SysDes-019, SysDes-021, SysDes-025, SysDes-032, SysDes-050, SysDes-090 -- Verification method: UI Test, Privacy Review -- Acceptance criteria: Permission explainers appear before or with OS permission prompts as appropriate. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-028**: The software shall provide a diagnostics UI that allows user-initiated diagnostic export and displays user-safe diagnostic status. - -- Type: Functional / Diagnostics -- Stage: P1 / Beta -- Allocated to: Flutter UI, Diagnostics -- Source SysDes: SysDes-019, SysDes-025, SysDes-035, SysDes-056, SysDes-076, SysDes-090, SysDes-105 -- Verification method: UI Test, Security Audit -- Acceptance criteria: User can export diagnostics only by explicit action, and export is redacted. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-029**: The Flutter UI shall not directly invoke `tsclientlib`, access raw protocol types, or own authoritative server state. - -- Type: Constraint -- Stage: P0 / MVP -- Allocated to: Flutter UI, Flutter State -- Source SysDes: SysDes-040, SysDes-052 through SysDes-054, SysDes-057 -- Verification method: Inspection -- Acceptance criteria: Static dependency analysis shows no UI dependency on protocol library types. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-030**: The Flutter UI shall subscribe to UI-safe core events and reduce them into presentation state only. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Flutter State -- Source SysDes: SysDes-026, SysDes-030, SysDes-047, SysDes-057, SysDes-061, SysDes-067, SysDes-068 -- Verification method: Inspection, UI Test -- Acceptance criteria: State providers/stores are driven by event DTOs and do not mutate Rust-owned server state. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-031**: The software shall provide a typed Flutter-Rust Bridge API for connection, channel, chat, voice, settings, storage, and diagnostics commands. - -- Type: Interface -- Stage: P0 / MVP -- Allocated to: Bridge Layer -- Source SysDes: SysDes-027, SysDes-038, SysDes-042, SysDes-045, SysDes-049, SysDes-055, SysDes-056 -- Verification method: Integration Test -- Acceptance criteria: Flutter can call each command group through generated or native bindings. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.4 Bridge Requirements - -**SRS-032**: The Bridge shall expose long-lived event streams from Rust Core to Flutter for connection, snapshot, delta, chat, voice, audio device, error, and diagnostic events. - -- Type: Interface -- Stage: P0 / MVP -- Allocated to: Bridge Layer, Rust Core -- Source SysDes: SysDes-027, SysDes-038, SysDes-042, SysDes-046, SysDes-047, SysDes-056, SysDes-061, SysDes-067, SysDes-068 -- Verification method: Integration Test -- Acceptance criteria: Flutter receives ordered events and handles stream lifecycle without UI blocking. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-033**: The Bridge shall serialize and deserialize only bridge-safe DTOs and shall not expose Rust internal references or raw protocol library objects. - -- Type: Interface / Safety -- Stage: P0 / MVP -- Allocated to: Bridge Layer -- Source SysDes: SysDes-027, SysDes-040, SysDes-042, SysDes-052, SysDes-057 -- Verification method: Inspection, Integration Test -- Acceptance criteria: Generated bindings contain DTOs and value objects only. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-034**: The Bridge shall map Rust Core errors into user-safe Flutter error DTOs. - -- Type: Interface / Error Handling -- Stage: P0 / MVP -- Allocated to: Bridge Layer, Rust Core -- Source SysDes: SysDes-027, SysDes-042, SysDes-045, SysDes-088, SysDes-089 -- Verification method: Integration Test -- Acceptance criteria: Known error cases produce category, message, and recovery hint fields. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-035**: The Bridge shall execute commands asynchronously and shall not block the Flutter UI thread during network, storage, or audio operations. - -- Type: Non-functional -- Stage: P0 / MVP -- Allocated to: Bridge Layer, Rust Core -- Source SysDes: SysDes-027, SysDes-042, SysDes-046, SysDes-085 -- Verification method: Performance Test -- Acceptance criteria: UI remains responsive during connect, reconnect, sync, and diagnostic export. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-036**: The Rust Core shall own authoritative connection lifecycle and server state for each active connection. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Rust Core -- Source SysDes: SysDes-028, SysDes-030, SysDes-044, SysDes-051, SysDes-060, SysDes-061, SysDes-064, SysDes-066 through SysDes-068 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Connection state transitions and snapshots are managed in Rust Core. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.5 Rust Core and Connection Management Requirements - -**SRS-037**: The Rust Core shall manage connection actors or equivalent isolated execution contexts for connection-specific commands and events. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Rust Core -- Source SysDes: SysDes-028, SysDes-044, SysDes-051, SysDes-057, SysDes-060, SysDes-066 -- Verification method: Inspection, Unit Test -- Acceptance criteria: Each connection has an isolated command/event path. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-038**: The Rust Core shall expose connect, disconnect, reconnect, join channel, send message, audio control, settings, bookmark, identity, and diagnostics commands to the Bridge. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Rust Core, Bridge -- Source SysDes: SysDes-028, SysDes-042, SysDes-055, SysDes-060, SysDes-065, SysDes-069, SysDes-070, SysDes-073, SysDes-074, SysDes-076 -- Verification method: Integration Test -- Acceptance criteria: Bridge command suite calls corresponding Rust Core operations. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-039**: The Rust Core shall coordinate protocol, state synchronization, audio, storage, diagnostics, and platform adapter interfaces without leaking implementation details to Flutter. - -- Type: Functional / Architecture -- Stage: P0 / MVP -- Allocated to: Rust Core -- Source SysDes: SysDes-028, SysDes-039, SysDes-042, SysDes-052, SysDes-077 -- Verification method: Inspection -- Acceptance criteria: Core public API exposes stable DTOs and not internal crate types. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-040**: The Rust Core shall emit connection status events for Connecting, Synchronizing, Connected, Reconnecting, Disconnected, and failure states. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync -- Source SysDes: SysDes-060, SysDes-064, SysDes-066, SysDes-074 -- Verification method: Unit Test, System Test -- Acceptance criteria: Status event sequence matches connection state machine under normal and failure flows. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-041**: The Rust Core shall suppress automatic reconnect after user-triggered disconnect. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Rust Core -- Source SysDes: SysDes-064, SysDes-073, SysDes-074, SysDes-088 -- Verification method: System Test -- Acceptance criteria: User disconnect results in Disconnected state and no reconnect attempt. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-042**: The Rust Core shall apply reconnect policy after recoverable network or protocol failures. - -- Type: Functional / Reliability -- Stage: P0 / MVP -- Allocated to: Rust Core, Protocol Adapter, State Sync -- Source SysDes: SysDes-064, SysDes-066, SysDes-074, SysDes-088 -- Verification method: System Test -- Acceptance criteria: Recoverable failure enters Reconnecting and either recovers or reports safe failure. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-043**: The Rust Core shall rebuild server state from a fresh snapshot after reconnect succeeds. - -- Type: Functional / Reliability -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync -- Source SysDes: SysDes-030, SysDes-067, SysDes-074, SysDes-079, SysDes-088 -- Verification method: System Test, Event Replay Test -- Acceptance criteria: Post-reconnect state is produced from new snapshot, not patched from stale state. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-044**: The Protocol Adapter shall be the only software component that directly depends on `tsclientlib`. - -- Type: Architecture Constraint -- Stage: P0 / MVP -- Allocated to: Protocol Adapter -- Source SysDes: SysDes-011, SysDes-029, SysDes-040, SysDes-043, SysDes-053, SysDes-057, SysDes-078 -- Verification method: Inspection -- Acceptance criteria: Dependency graph shows `tsclientlib` dependency only in protocol adapter crate/module. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.6 Protocol Adapter Requirements - -**SRS-045**: The Protocol Adapter shall connect to TeamSpeak 3-compatible servers through `tsclientlib` using user-provided host, port, nickname, identity, and optional password. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Rust Core -- Source SysDes: SysDes-029, SysDes-043, SysDes-065, SysDes-102 -- Verification method: Protocol Integration Test -- Acceptance criteria: Protocol probe and app can establish a session to a compatible test server. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-046**: The Protocol Adapter shall fetch server information, channel list, client list, and current-user information needed to build the initial snapshot. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, State Sync -- Source SysDes: SysDes-029, SysDes-043, SysDes-061, SysDes-067, SysDes-102 -- Verification method: Protocol Integration Test -- Acceptance criteria: Initial snapshot has server, channel, client, and self-client data. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-047**: The Protocol Adapter shall translate raw `tsclientlib` events into internal protocol events. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, State Sync -- Source SysDes: SysDes-029, SysDes-043, SysDes-052, SysDes-057, SysDes-068, SysDes-078 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Known client, channel, message, voice, and disconnect events map to internal events. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-048**: The Protocol Adapter shall translate protocol errors into normalized Chanora protocol errors. - -- Type: Functional / Error Handling -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Rust Core -- Source SysDes: SysDes-029, SysDes-043, SysDes-045, SysDes-088 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Known network, authentication, permission, and protocol failures produce normalized errors. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-049**: The Protocol Adapter shall implement channel join commands and report success or failure to Rust Core. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Protocol Adapter -- Source SysDes: SysDes-029, SysDes-043, SysDes-069, SysDes-102 -- Verification method: Protocol Integration Test -- Acceptance criteria: Accessible channel join succeeds; denied join reports user-safe failure. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-050**: The Protocol Adapter shall implement channel text message send and receive paths. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Protocol Adapter -- Source SysDes: SysDes-029, SysDes-043, SysDes-070, SysDes-102 -- Verification method: Protocol Integration Test -- Acceptance criteria: Text sent from UI reaches server and incoming text reaches core events. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-051**: The Protocol Adapter shall implement voice packet send and receive paths required by the audio subsystem. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Audio Subsystem -- Source SysDes: SysDes-029, SysDes-043, SysDes-058, SysDes-071, SysDes-072, SysDes-102, SysDes-104 -- Verification method: Protocol Integration Test, Audio Test -- Acceptance criteria: Encoded outgoing frames are sent and incoming voice packets are delivered to audio pipeline. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-052**: The Protocol Adapter shall expose protocol-probe diagnostics for connection, snapshot, event, text, and voice compatibility. - -- Type: Verification Hook -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Diagnostics -- Source SysDes: SysDes-017, SysDes-035, SysDes-102 -- Verification method: Demo -- Acceptance criteria: Protocol probe produces compatibility output for test servers. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-053**: The Protocol Adapter shall support future patching, forking, or replacement of protocol implementation without changing Flutter UI contracts. - -- Type: Maintainability -- Stage: P1 / Beta -- Allocated to: Protocol Adapter, Bridge -- Source SysDes: SysDes-011, SysDes-029, SysDes-043, SysDes-078 -- Verification method: Architecture Review -- Acceptance criteria: Protocol adapter trait/API boundary isolates library-specific types. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-054**: The State Synchronization Engine shall maintain a connection state model containing connection status, server info, current user, channels, clients, channel tree, permissions, chat state, and voice state where available. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: State Sync -- Source SysDes: SysDes-030, SysDes-044, SysDes-047, SysDes-061, SysDes-067, SysDes-068 -- Verification method: Unit Test -- Acceptance criteria: State object can represent required snapshot and runtime states. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.7 State Synchronization Requirements - -**SRS-055**: The State Synchronization Engine shall produce a full snapshot event after initial synchronization. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: State Sync -- Source SysDes: SysDes-030, SysDes-047, SysDes-061, SysDes-067 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: SnapshotReady event is emitted after server, channel, and client data are available. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-056**: The State Synchronization Engine shall apply live server events as deterministic deltas. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: State Sync -- Source SysDes: SysDes-030, SysDes-047, SysDes-061, SysDes-068 -- Verification method: Unit Test -- Acceptance criteria: Same event sequence produces same final state and emitted deltas. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-057**: The State Synchronization Engine shall preserve per-connection event ordering. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: State Sync, Rust Core -- Source SysDes: SysDes-030, SysDes-044, SysDes-047, SysDes-068 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Out-of-order processing is prevented or deterministically handled per connection. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-058**: The State Synchronization Engine shall use reducer functions or equivalent deterministic logic for snapshot, channel, client, chat, voice, and connection events. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: State Sync -- Source SysDes: SysDes-030, SysDes-047, SysDes-068, SysDes-079, SysDes-103 -- Verification method: Unit Test -- Acceptance criteria: Reducer tests cover snapshot and major delta event types. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-059**: The State Synchronization Engine shall replace stale server state with a fresh snapshot after reconnect. - -- Type: Functional / Reliability -- Stage: P0 / MVP -- Allocated to: State Sync -- Source SysDes: SysDes-030, SysDes-047, SysDes-066, SysDes-074, SysDes-079, SysDes-088, SysDes-103 -- Verification method: Event Replay Test, System Test -- Acceptance criteria: Reconnect tests confirm old channel/client state is replaced. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-060**: The State Synchronization Engine shall tolerate malformed or unexpected protocol events without crashing the application. - -- Type: Reliability -- Stage: P0 / MVP -- Allocated to: State Sync, Rust Core -- Source SysDes: SysDes-030, SysDes-047, SysDes-068, SysDes-088, SysDes-103 -- Verification method: Unit Test, Fuzz/Negative Test -- Acceptance criteria: Malformed event tests produce safe error or ignored event behavior. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-061**: The State Synchronization Engine shall provide replayable event recording hooks for debugging state synchronization. - -- Type: Verification Hook -- Stage: P1 / Beta -- Allocated to: State Sync, Diagnostics -- Source SysDes: SysDes-030, SysDes-035, SysDes-079, SysDes-103 -- Verification method: Demo -- Acceptance criteria: Recorded event stream can be replayed to reproduce state. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-062**: The Audio Subsystem shall coordinate audio capture, preprocessing, audio processing, Opus-compatible encoding, voice packet handoff, receive decoding, jitter buffering, per-user controls, mixing, and playback. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-013, SysDes-020, SysDes-031, SysDes-058, SysDes-063, SysDes-071, SysDes-072, SysDes-081, SysDes-086, SysDes-104 -- Verification method: Audio Integration Test -- Acceptance criteria: End-to-end voice send and receive operate through the audio subsystem. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.8 Audio Subsystem Requirements - -**SRS-063**: The Audio Subsystem shall process outgoing microphone PCM frames before encoding. - -- Type: Functional -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 -- Verification method: Audio Test -- Acceptance criteria: Capture pipeline accepts PCM frames and outputs encoded voice frames when gate allows. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-064**: The Audio Subsystem shall apply a High-Pass Filter before voice encoding when enabled. - -- Type: Functional / Audio Processing -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 -- Verification method: Audio Processing Test -- Acceptance criteria: Low-frequency attenuation is measurable in HPF test cases. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-065**: The Audio Subsystem shall apply Noise Suppression before voice encoding when enabled. - -- Type: Functional / Audio Processing -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 -- Verification method: Audio Processing Test -- Acceptance criteria: Stationary-noise reduction is measurable or verified by backend tests. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-066**: The Audio Subsystem shall apply Echo Canceller before voice encoding when enabled and when playback reference audio is available or the selected backend provides equivalent behavior. - -- Type: Functional / Audio Processing -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-086, SysDes-104 -- Verification method: Audio Processing Test -- Acceptance criteria: Echo cancellation backend can use playback reference or platform equivalent. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-067**: The Audio Subsystem shall apply Automatic Gain Control before voice encoding when enabled. - -- Type: Functional / Audio Processing -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 -- Verification method: Audio Processing Test -- Acceptance criteria: AGC normalizes input gain without unacceptable clipping under test cases. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-068**: The Audio Subsystem shall expose enable/disable settings for Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter. - -- Type: Functional / Settings -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Flutter UI, Storage -- Source SysDes: SysDes-031, SysDes-033, SysDes-056, SysDes-081 -- Verification method: UI Test, Unit Test -- Acceptance criteria: Changing each setting updates Rust Core/audio configuration and persists locally. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-069**: The Audio Subsystem shall support conservative default audio processing configuration per platform. - -- Type: Non-functional / Audio -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-013, SysDes-031, SysDes-081, SysDes-086 -- Verification method: Review, Audio Test -- Acceptance criteria: Default configuration is documented and validated for each supported platform. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-070**: The Audio Subsystem shall provide an audio processing backend abstraction supporting platform-native and Rust-based implementations. - -- Type: Architecture / Audio -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-031, SysDes-032, SysDes-058, SysDes-081 -- Verification method: Inspection -- Acceptance criteria: Backend trait/interface allows substitution without Flutter UI changes. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-071**: The Audio Subsystem shall encode outgoing voice using an Opus-compatible encoder. - -- Type: Functional / Audio Codec -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-031, SysDes-058, SysDes-071, SysDes-104 -- Verification method: Audio Test -- Acceptance criteria: PCM input produces decodable Opus-compatible encoded frames. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-072**: The Audio Subsystem shall decode incoming voice using an Opus-compatible decoder. - -- Type: Functional / Audio Codec -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-031, SysDes-058, SysDes-072, SysDes-104 -- Verification method: Audio Test -- Acceptance criteria: Incoming encoded frames produce expected PCM output. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-073**: The Audio Subsystem shall use jitter buffering for incoming voice packets. - -- Type: Functional / Audio Playback -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-031, SysDes-058, SysDes-072, SysDes-086, SysDes-104 -- Verification method: Audio Test -- Acceptance criteria: Packet jitter test produces continuous playback without buffer instability within defined limits. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-074**: The Audio Subsystem shall support per-user mute during playback. - -- Type: Functional / Audio Playback -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Flutter UI -- Source SysDes: SysDes-031, SysDes-058, SysDes-072 -- Verification method: Audio Test, UI Test -- Acceptance criteria: Muted remote user is not mixed into output. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-075**: The Audio Subsystem shall support per-user volume during playback. - -- Type: Functional / Audio Playback -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Flutter UI, Storage -- Source SysDes: SysDes-031, SysDes-033, SysDes-058, SysDes-072 -- Verification method: Audio Test, UI Test -- Acceptance criteria: Remote user gain changes affect only that user and persist where applicable. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-076**: The Audio Subsystem shall mix decoded incoming voice streams before playback. - -- Type: Functional / Audio Playback -- Stage: P0 / MVP -- Allocated to: Audio Subsystem -- Source SysDes: SysDes-031, SysDes-058, SysDes-072, SysDes-104 -- Verification method: Audio Test -- Acceptance criteria: Multiple incoming streams are mixed into a playback stream without clipping beyond defined limits. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-077**: The Audio Subsystem shall implement microphone mute as a gate that prevents local voice transmission. - -- Type: Functional / Voice Control -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Rust Core, Flutter UI -- Source SysDes: SysDes-031, SysDes-063, SysDes-071 -- Verification method: System Test -- Acceptance criteria: When muted, no outgoing voice packets are sent. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-078**: The Audio Subsystem shall implement output deaf as a gate that prevents incoming voice playback. - -- Type: Functional / Voice Control -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Rust Core, Flutter UI -- Source SysDes: SysDes-031, SysDes-063, SysDes-072 -- Verification method: System Test -- Acceptance criteria: When deafened, incoming voice is not played. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-079**: The Audio Subsystem shall implement push-to-talk gating before outgoing voice packet transmission. - -- Type: Functional / Voice Control -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Flutter UI -- Source SysDes: SysDes-031, SysDes-063, SysDes-071 -- Verification method: System Test -- Acceptance criteria: Outgoing voice is sent only when push-to-talk is active unless configured otherwise. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-080**: The Audio Subsystem shall provide input level metering to Rust Core or Flutter through UI-safe events. - -- Type: Functional / Voice Metering -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Flutter UI -- Source SysDes: SysDes-025, SysDes-031, SysDes-063, SysDes-071 -- Verification method: Audio Test, UI Test -- Acceptance criteria: Input level meter changes with microphone input. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-081**: The Audio Subsystem shall provide speaking indicator events for local and remote users where available. - -- Type: Functional / Voice Metering -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, State Sync, Flutter UI -- Source SysDes: SysDes-025, SysDes-031, SysDes-063, SysDes-072 -- Verification method: Audio Test, UI Test -- Acceptance criteria: Speaking indicators activate according to local gate and remote voice activity. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-082**: The Audio Subsystem shall recover from audio route or device changes by reconfiguring audio streams or entering a user-safe blocked/degraded state. - -- Type: Reliability / Audio -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-032, SysDes-050, SysDes-075, SysDes-086 -- Verification method: Platform Integration Test -- Acceptance criteria: Device disconnect/change does not crash the app and reports clear status. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-083**: The Audio Subsystem shall provide audio loopback and processing test hooks for verification. - -- Type: Verification Hook -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Diagnostics -- Source SysDes: SysDes-017, SysDes-035, SysDes-104 -- Verification method: Demo -- Acceptance criteria: Audio test tools can exercise capture, processing, encode/decode, jitter, mixer, and playback paths. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-084**: The software shall persist bookmarks in local non-secret storage. - -- Type: Functional / Storage -- Stage: P0 / MVP -- Allocated to: Storage -- Source SysDes: SysDes-033, SysDes-036, SysDes-049 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Bookmark create, update, delete, and list operations persist across restart. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.9 Storage and Secure Storage Requirements - -**SRS-085**: The software shall persist recent servers in local non-secret storage. - -- Type: Functional / Storage -- Stage: P1 / Beta -- Allocated to: Storage -- Source SysDes: SysDes-033, SysDes-036, SysDes-049 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Recent server entries are stored and displayed after restart. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-086**: The software shall persist audio settings in local non-secret storage. - -- Type: Functional / Storage -- Stage: P0 / MVP -- Allocated to: Storage, Audio Subsystem -- Source SysDes: SysDes-033, SysDes-036, SysDes-049, SysDes-056, SysDes-081 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: Audio settings survive application restart. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-087**: The software shall persist UI settings in local non-secret storage. - -- Type: Functional / Storage -- Stage: P1 / Beta -- Allocated to: Storage, Flutter UI -- Source SysDes: SysDes-033, SysDes-036, SysDes-049 -- Verification method: Unit Test, Integration Test -- Acceptance criteria: UI settings survive application restart. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-088**: The software shall persist per-user volume and per-user mute preferences where applicable. - -- Type: Functional / Storage -- Stage: P1 / Beta -- Allocated to: Storage, Audio Subsystem -- Source SysDes: SysDes-033, SysDes-036, SysDes-049, SysDes-072 -- Verification method: Unit Test -- Acceptance criteria: Preferences are stored by server/user identity keys where available. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-089**: The software shall use SQLite or an equivalent embedded data store for non-secret local data. - -- Type: Architecture / Storage -- Stage: P0 / MVP -- Allocated to: Storage -- Source SysDes: SysDes-033, SysDes-036, SysDes-049, SysDes-091 -- Verification method: Inspection -- Acceptance criteria: Storage implementation uses an embedded local data store and migration mechanism. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-090**: The software shall access platform secure storage only through a secure storage provider abstraction. - -- Type: Interface / Security -- Stage: P0 / MVP -- Allocated to: Storage, Platform Adapters -- Source SysDes: SysDes-021, SysDes-032, SysDes-034, SysDes-048, SysDes-050, SysDes-076, SysDes-080, SysDes-089, SysDes-105 -- Verification method: Inspection, Security Audit -- Acceptance criteria: Secrets are read/written through secure storage interface only. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-091**: The software shall store identity private keys using platform secure storage and shall not persist them in plaintext files. - -- Type: Security -- Stage: P0 / MVP -- Allocated to: Storage, Platform Secure Storage -- Source SysDes: SysDes-034, SysDes-048, SysDes-076, SysDes-089, SysDes-105 -- Verification method: Security Audit -- Acceptance criteria: Filesystem and database inspection shows no plaintext private keys. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-092**: The software shall store server passwords using platform secure storage and shall not persist them in plaintext logs or non-secret database fields. - -- Type: Security -- Stage: P0 / MVP -- Allocated to: Storage, Platform Secure Storage, Diagnostics -- Source SysDes: SysDes-034, SysDes-048, SysDes-076, SysDes-089, SysDes-105 -- Verification method: Security Audit -- Acceptance criteria: Password values are redacted from logs and absent from non-secret storage. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-093**: The software shall redact secrets before writing diagnostic logs or diagnostic exports. - -- Type: Security / Diagnostics -- Stage: P0 / MVP -- Allocated to: Diagnostics, Storage -- Source SysDes: SysDes-015, SysDes-035, SysDes-076, SysDes-089, SysDes-090, SysDes-105 -- Verification method: Security Audit -- Acceptance criteria: Diagnostic redaction tests cover private keys, passwords, tokens, and known secret fields. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-094**: The software shall validate user input before passing values to protocol operations or storage operations. - -- Type: Security -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, Protocol Adapter, Storage -- Source SysDes: SysDes-045, SysDes-065, SysDes-089, SysDes-105 -- Verification method: Unit Test, Security Test -- Acceptance criteria: Invalid host, port, nickname, password, and path-like values are rejected or sanitized safely. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-095**: The software shall produce structured diagnostic logs for connection, protocol, state, audio, storage, platform, and release-relevant events. - -- Type: Diagnostics -- Stage: P0 / MVP -- Allocated to: Diagnostics -- Source SysDes: SysDes-015, SysDes-017, SysDes-035, SysDes-056, SysDes-076, SysDes-087, SysDes-090, SysDes-098, SysDes-105 -- Verification method: Inspection, Demo -- Acceptance criteria: Logs contain structured fields and categories without secrets. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.10 Diagnostics, Security, and Privacy Requirements - -**SRS-096**: The software shall support user-initiated diagnostic export. - -- Type: Diagnostics -- Stage: P1 / Beta -- Allocated to: Diagnostics, Flutter UI -- Source SysDes: SysDes-019, SysDes-025, SysDes-035, SysDes-076, SysDes-090, SysDes-105 -- Verification method: Demo, Security Audit -- Acceptance criteria: Export is available only after user action and output is redacted. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-097**: The software shall provide protocol event recording in development or diagnostics mode. - -- Type: Diagnostics / Verification Hook -- Stage: P1 / Beta -- Allocated to: Diagnostics, Protocol Adapter, State Sync -- Source SysDes: SysDes-035, SysDes-079, SysDes-102, SysDes-103 -- Verification method: Demo -- Acceptance criteria: Recorded protocol/core event file can be generated in diagnostics mode. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-098**: The software shall provide event replay support for state synchronization debugging. - -- Type: Diagnostics / Verification Hook -- Stage: P1 / Beta -- Allocated to: Diagnostics, State Sync -- Source SysDes: SysDes-035, SysDes-079, SysDes-103 -- Verification method: Demo -- Acceptance criteria: Event replay can rebuild expected state from a recorded sequence. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-099**: The software shall provide audio diagnostics for capture, processing backend, codec, jitter buffer, mixer, playback, and route/device status. - -- Type: Diagnostics / Verification Hook -- Stage: P1 / Beta -- Allocated to: Diagnostics, Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-035, SysDes-075, SysDes-086, SysDes-104 -- Verification method: Demo -- Acceptance criteria: Audio diagnostics report current pipeline and device status. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-100**: The software shall provide network diagnostics for connection status, reconnect attempts, latency where available, and protocol-relevant network failures. - -- Type: Diagnostics / Reliability -- Stage: P1 / Beta -- Allocated to: Diagnostics, Rust Core, Protocol Adapter -- Source SysDes: SysDes-035, SysDes-074, SysDes-088, SysDes-102 -- Verification method: Demo -- Acceptance criteria: Diagnostics include network and reconnect evidence without secrets. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-101**: The software shall minimize personal data collection in MVP. - -- Type: Privacy -- Stage: P0 / MVP -- Allocated to: All Software Components -- Source SysDes: SysDes-090, SysDes-105 -- Verification method: Privacy Review -- Acceptance criteria: MVP does not collect telemetry or upload personal diagnostics automatically. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-102**: The software shall not automatically upload diagnostics in MVP. - -- Type: Privacy / Constraint -- Stage: P0 / MVP -- Allocated to: Diagnostics -- Source SysDes: SysDes-090, SysDes-105 -- Verification method: Security Audit -- Acceptance criteria: No automatic diagnostic upload endpoint or job is present. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-103**: The software shall display user-safe errors without raw internal stack traces. - -- Type: Security / Error Handling -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, Bridge, Diagnostics -- Source SysDes: SysDes-027, SysDes-042, SysDes-045, SysDes-056, SysDes-089 -- Verification method: UI Test, Security Review -- Acceptance criteria: Runtime errors displayed to users contain safe message and recovery hint only. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-104**: The software shall provide a platform adapter interface for microphone capture. - -- Type: Interface / Platform -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-058, SysDes-071 -- Verification method: Platform Integration Test -- Acceptance criteria: Each supported platform can provide captured PCM frames to the audio pipeline. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.11 Platform Adapter Requirements - -**SRS-105**: The software shall provide a platform adapter interface for speaker/headphone playback. - -- Type: Interface / Platform -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-058, SysDes-072 -- Verification method: Platform Integration Test -- Acceptance criteria: Each supported platform can play mixed PCM frames from the audio pipeline. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-106**: The software shall provide a platform adapter interface for audio device enumeration and selection where supported. - -- Type: Interface / Platform -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Audio Subsystem, Flutter UI -- Source SysDes: SysDes-020, SysDes-021, SysDes-032, SysDes-050, SysDes-056, SysDes-075 -- Verification method: Platform Integration Test -- Acceptance criteria: Input/output device lists are exposed and selection changes are applied or reported as unsupported. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-107**: The software shall provide a platform adapter interface for audio route changes. - -- Type: Interface / Platform -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-086 -- Verification method: Platform Integration Test -- Acceptance criteria: Route changes are emitted to Rust Core/Flutter and handled safely. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-108**: The software shall provide a platform adapter interface for microphone permission requests. - -- Type: Interface / Platform -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Flutter UI -- Source SysDes: SysDes-021, SysDes-025, SysDes-032, SysDes-050, SysDes-090 -- Verification method: Platform Integration Test -- Acceptance criteria: Permission state is queryable and request flow triggers platform permission behavior. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-109**: The software shall provide a platform adapter interface for notification permission requests where required. - -- Type: Interface / Platform -- Stage: P1 / Beta -- Allocated to: Platform Adapters, Flutter UI -- Source SysDes: SysDes-021, SysDes-025, SysDes-032, SysDes-050, SysDes-090 -- Verification method: Platform Integration Test -- Acceptance criteria: Notification permission flow is available on platforms requiring it. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-110**: The iOS software shall integrate with AVAudioSession or equivalent platform audio session behavior for foreground voice sessions. - -- Type: Platform / iOS -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080 -- Verification method: iOS Integration Test -- Acceptance criteria: iOS foreground voice session handles capture, playback, route change, and interruption callbacks. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-111**: The Android software shall integrate with foreground service behavior for active voice sessions. - -- Type: Platform / Android -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080 -- Verification method: Android Integration Test -- Acceptance criteria: Android active voice session uses foreground service behavior according to platform rules. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-112**: The Android software shall handle audio focus and Bluetooth route changes where platform APIs expose them. - -- Type: Platform / Android -- Stage: P1 / Beta -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080, SysDes-086 -- Verification method: Android Integration Test -- Acceptance criteria: Audio focus loss/gain and Bluetooth route events are handled safely. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-113**: The desktop software shall support validated audio backends for Windows, macOS, and Linux. - -- Type: Platform / Desktop -- Stage: P1 / Beta -- Allocated to: Platform Adapters, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080, SysDes-086 -- Verification method: Desktop Integration Test -- Acceptance criteria: Desktop audio capture/playback works on representative Windows, macOS, and Linux systems. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-114**: The software shall provide platform adapter lifecycle events for foreground/background, app resume, app suspend, audio interruption, and shutdown where supported. - -- Type: Interface / Platform -- Stage: P1 / Beta -- Allocated to: Platform Adapters, Rust Core, Audio Subsystem -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080 -- Verification method: Platform Integration Test -- Acceptance criteria: Lifecycle events reach Rust Core and do not corrupt connection/audio state. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-115**: The software shall document unsupported or degraded platform behaviors through user-safe status and diagnostics. - -- Type: Platform / Diagnostics -- Stage: P1 / Beta -- Allocated to: Platform Adapters, Diagnostics, Flutter UI -- Source SysDes: SysDes-050, SysDes-075, SysDes-084, SysDes-090 -- Verification method: Review, Demo -- Acceptance criteria: Unsupported device/permission/lifecycle cases are visible in UI or diagnostics. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-116**: The software shall produce build artifacts for Windows installer packaging. - -- Type: Packaging -- Stage: P1 / Beta -- Allocated to: Application Container, Deployment Scripts -- Source SysDes: SysDes-036, SysDes-091, SysDes-106 -- Verification method: Build Test -- Acceptance criteria: Windows installer artifact is generated from configured CI or release script. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.12 Packaging and Release Requirements - -**SRS-117**: The software shall produce signed and notarized macOS release builds for production release. - -- Type: Packaging -- Stage: P2 / Production -- Allocated to: Application Container, Deployment Scripts -- Source SysDes: SysDes-036, SysDes-091, SysDes-106 -- Verification method: Build/Release Audit -- Acceptance criteria: macOS release process includes signing and notarization evidence. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-118**: The software shall produce Linux release packages using the selected supported package formats. - -- Type: Packaging -- Stage: P1 / Beta -- Allocated to: Application Container, Deployment Scripts -- Source SysDes: SysDes-036, SysDes-091, SysDes-106 -- Verification method: Build Test -- Acceptance criteria: At least one selected Linux package format is generated. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-119**: The software shall produce Android AAB release builds. - -- Type: Packaging -- Stage: P1 / Beta -- Allocated to: Application Container, Deployment Scripts -- Source SysDes: SysDes-036, SysDes-091, SysDes-106 -- Verification method: Build Test -- Acceptance criteria: Android AAB build succeeds with release configuration. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-120**: The software shall produce iOS TestFlight and App Store release builds when signing assets are available. - -- Type: Packaging -- Stage: P1 / Beta -- Allocated to: Application Container, Deployment Scripts -- Source SysDes: SysDes-036, SysDes-091, SysDes-106 -- Verification method: Build Test -- Acceptance criteria: iOS archive/export succeeds on supported macOS build environment. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-121**: The software release metadata and in-app wording shall not imply official TeamSpeak affiliation. - -- Type: Legal / Product Constraint -- Stage: P0 / MVP -- Allocated to: Application Container, Flutter UI, Deployment Scripts -- Source SysDes: SysDes-005, SysDes-036, SysDes-091, SysDes-106 -- Verification method: Legal Review, Inspection -- Acceptance criteria: App metadata, UI copy, README, and store text use independent compatibility wording. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-122**: The software shall provide release-build configuration that disables development-only diagnostic capture unless explicitly enabled for test builds. - -- Type: Security / Release -- Stage: P1 / Beta -- Allocated to: Application Container, Diagnostics, Deployment Scripts -- Source SysDes: SysDes-035, SysDes-084, SysDes-090, SysDes-091, SysDes-106 -- Verification method: Inspection, Security Review -- Acceptance criteria: Production configuration does not enable protocol recording or verbose logs by default. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-123**: The software shall include or support a protocol probe tool for validating `tsclientlib` adapter behavior against compatible test servers. - -- Type: Verification Support -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Diagnostics -- Source SysDes: SysDes-017, SysDes-035, SysDes-102 -- Verification method: Demo -- Acceptance criteria: Protocol probe reports connection, snapshot, event, text, and voice compatibility evidence. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.13 Verification Support Requirements - -**SRS-124**: The software shall include reducer tests and event replay tests for state synchronization. - -- Type: Verification Support -- Stage: P0 / MVP -- Allocated to: State Sync, Diagnostics -- Source SysDes: SysDes-030, SysDes-035, SysDes-103 -- Verification method: Unit Test, Demo -- Acceptance criteria: Reducer and replay tests cover snapshot, delta, reconnect, and malformed-event behavior. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-125**: The software shall include audio loopback and audio processing tests for capture, playback, codec, jitter buffer, mixer, Echo Canceller, AGC, Noise Suppression, and High-Pass Filter. - -- Type: Verification Support -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Diagnostics -- Source SysDes: SysDes-031, SysDes-035, SysDes-104 -- Verification method: Audio Test, Demo -- Acceptance criteria: Audio verification tools execute required audio processing checks. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-126**: The software shall include security verification support for secure storage, private-key handling, password handling, input validation, and diagnostic redaction. - -- Type: Verification Support -- Stage: P0 / MVP -- Allocated to: Storage, Diagnostics, Platform Adapters -- Source SysDes: SysDes-034, SysDes-035, SysDes-089, SysDes-105 -- Verification method: Security Audit -- Acceptance criteria: Security checklist and tests cover required sensitive data behavior. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-127**: The software shall include release verification support for package creation, signing, notarization, app-store builds, and release metadata wording. - -- Type: Verification Support -- Stage: P1 / Beta -- Allocated to: Deployment Scripts, Application Container -- Source SysDes: SysDes-036, SysDes-091, SysDes-106 -- Verification method: Build Test, Release Audit -- Acceptance criteria: Release verification checklist covers each target platform and metadata review. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-128**: The software shall support MVP acceptance verification demonstrating connection, channel tree, online clients, channel join, send/receive voice, mute, deaf, push-to-talk, required audio processing, channel text, bookmarks, secure storage, and redacted diagnostics. - -- Type: Verification Support -- Stage: P0 / MVP -- Allocated to: All Software Components -- Source SysDes: SysDes-017, SysDes-035, SysDes-102 through SysDes-107 -- Verification method: System Test, Demo -- Acceptance criteria: MVP acceptance test run passes all acceptance checks. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-129**: The software shall expose clear user-facing errors when client hardware lacks a usable microphone, output device, CPU capacity, storage, or network interface required for the requested operation. - -- Type: Operating Environment Constraint -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-020, SysDes-045, SysDes-086, SysDes-089 -- Verification method: System Test -- Acceptance criteria: Missing hardware/resource conditions produce non-crashing user-safe errors. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.14 Operating Environment and External Interface Requirements - -**SRS-130**: The software shall expose clear user-facing errors when network connectivity prevents server connection or real-time voice operation. - -- Type: Operating Environment Constraint -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, Protocol Adapter -- Source SysDes: SysDes-022, SysDes-045, SysDes-064, SysDes-074, SysDes-088 -- Verification method: System Test -- Acceptance criteria: Network failures produce reconnect or safe error behavior. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-131**: The software shall handle external compatible server permissions, availability, and event behavior as external dependencies and shall not assume administrative control. - -- Type: Operating Environment Constraint -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Rust Core, Flutter UI -- Source SysDes: SysDes-023, SysDes-043, SysDes-082, SysDes-102 -- Verification method: System Test -- Acceptance criteria: Permission denied and server unavailable cases produce user-safe outcomes. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-132**: The software shall allow server details, credentials, and identity selection to be supplied by the user rather than hardcoding a server environment. - -- Type: Functional / Environment -- Stage: P0 / MVP -- Allocated to: Flutter UI, Rust Core, Protocol Adapter, Storage -- Source SysDes: SysDes-019, SysDes-023, SysDes-055, SysDes-065 -- Verification method: UI Test, System Test -- Acceptance criteria: User can provide and save server details without Chanora backend dependency. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-133**: The software shall integrate with OS-level secure storage, permission, audio, network, notification, lifecycle, and app sandboxing policies through platform adapters. - -- Type: Operating Environment Interface -- Stage: P0 / MVP -- Allocated to: Platform Adapters, Rust Core, Flutter UI -- Source SysDes: SysDes-021, SysDes-032, SysDes-050, SysDes-080, SysDes-090 -- Verification method: Platform Integration Test -- Acceptance criteria: Platform services are used through approved adapter APIs. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-134**: The software team shall analyze `tsclientlib` feasibility for all MVP protocol features and document unsupported or risky features before MVP acceptance. - -- Type: Analysis Requirement -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Software Requirements Engineering -- Source SysDes: SysDes-011, SysDes-017, SysDes-029, SysDes-043, SysDes-078, SysDes-084, SysDes-102 -- Verification method: Review, Protocol Probe -- Acceptance criteria: Protocol compatibility matrix identifies pass/fail/unknown state for MVP protocol features. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -### 5.15 Technical Feasibility and Impact Analysis Requirements - -**SRS-135**: The software team shall analyze real-time audio feasibility on each target platform for capture, playback, required audio processing, and latency. - -- Type: Analysis Requirement -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Platform Adapters -- Source SysDes: SysDes-013, SysDes-014, SysDes-020, SysDes-021, SysDes-031, SysDes-032, SysDes-075, SysDes-081, SysDes-086, SysDes-104 -- Verification method: Review, Audio Test -- Acceptance criteria: Audio feasibility report exists per platform with known limitations and mitigations. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-136**: The software team shall analyze memory growth and define limits for event queues, chat history, logs, audio buffers, and diagnostic bundles. - -- Type: Analysis Requirement -- Stage: P0 / MVP -- Allocated to: Rust Core, State Sync, Audio Subsystem, Diagnostics, Storage -- Source SysDes: SysDes-028, SysDes-030, SysDes-031, SysDes-033, SysDes-035, SysDes-087 -- Verification method: Review, Performance Test -- Acceptance criteria: Resource limit configuration and tests exist for queues, buffers, and logs. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-137**: The software team shall analyze security and privacy impacts of local secrets, logs, diagnostics, permissions, and release configuration. - -- Type: Analysis Requirement -- Stage: P0 / MVP -- Allocated to: Storage, Diagnostics, Platform Adapters, Flutter UI -- Source SysDes: SysDes-015, SysDes-021, SysDes-034, SysDes-035, SysDes-076, SysDes-089, SysDes-090, SysDes-105 -- Verification method: Security Review, Privacy Review -- Acceptance criteria: Security/privacy analysis documents risks, mitigations, and verification evidence. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-138**: The software team shall analyze operating-environment impacts of mobile lifecycle, foreground service behavior, AVAudioSession behavior, route changes, and app store policies. - -- Type: Analysis Requirement -- Stage: P1 / Beta -- Allocated to: Platform Adapters, Audio Subsystem, Deployment Scripts -- Source SysDes: SysDes-021, SysDes-032, SysDes-075, SysDes-080, SysDes-084, SysDes-091, SysDes-106 -- Verification method: Review, Platform Test -- Acceptance criteria: Mobile lifecycle analysis documents behavior and limitations. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-139**: The software requirements baseline shall account for SysDes-037: SE-19 Engineering Process and Evidence shall be a defined system element in the Chanora architecture with responsibility for: Architecture reviews, traceability records, verification evidence, compatibility matrix, open decisions, and downstream SRS/SAD/SDD/Verification artifacts. - -- Type: Traceability / Coverage -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-037 -- Verification method: Review -- Acceptance criteria: SysDes-037 is represented in SRS traceability and downstream software analysis. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-140**: The software requirements baseline shall account for SysDes-062: The permission-blocked mode shall prevent unsafe voice operations while preserving user visibility into corrective actions. - -- Type: Traceability / Coverage -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-062 -- Verification method: Review -- Acceptance criteria: SysDes-062 is represented in SRS traceability and downstream software analysis. -- Analysis: Feasible with current Flutter + Rust Core architecture; refine in SAD/SDD as needed. -- Owner: Software Team - -**SRS-141**: The SRS shall use SysDes design items as the mandatory architectural allocation source for every software requirement. - -- Type: Process / Traceability -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering -- Source SysDes: SysDes-108, SysDes-109 -- Verification method: Review, Inspection -- Acceptance criteria: Every SRS requirement has a `Source SysDes` field and no individual SRS requirement uses an upstream system-requirement ID as its direct source. -- Analysis: Feasible because SysDes v0.5 defines the downstream derivation rule and software-impacting allocation layer. -- Owner: Software Team - -**SRS-142**: If the software team identifies a required software behavior, constraint, or interface that cannot be derived from an existing SysDes design item, the SRS shall not be baselined until the SysDes is revised. - -- Type: Process / Change Control -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering, Change Control -- Source SysDes: SysDes-110 -- Verification method: Review, Inspection -- Acceptance criteria: Change-control records show SysDes-first correction for any new software requirement source gap. -- Analysis: Feasible through requirements review and change-control workflow before SRS baseline. -- Owner: Software Team - -**SRS-143**: The SRS shall maintain a SysDes-to-SRS coverage matrix for all SysDes items that require software implementation, software enablement, software-facing constraint handling, or software verification support. - -- Type: Process / Coverage -- Stage: P0 / MVP -- Allocated to: Software Requirements Engineering, Verification -- Source SysDes: SysDes-108, SysDes-109, SysDes-110 -- Verification method: Review, Inspection -- Acceptance criteria: Coverage matrix shows that each software-impacting SysDes item is covered by one or more SRS requirements, or explicitly identified as non-software-owned. -- Analysis: Feasible with the SysDes metadata register and SRS coverage matrix. -- Owner: Software Team - - -## 6. Operating Environment Impact Analysis - -| Environment element | Software impact | Related SRS | -|---|---|---| -| Client hardware | Software must detect or report missing microphone, output device, CPU/storage/network resource constraints. | SRS-130 | -| OS services | Software must integrate with permissions, secure storage, audio stack, lifecycle, notifications, and sandbox policies through platform adapters. | SRS-105 through SRS-116, SRS-134 | -| Network | Software must handle unreachable servers, recoverable failures, reconnect, and user-safe errors. | SRS-131 | -| External compatible server | Software must treat server permissions, availability, authentication, events, and protocol behavior as external dependencies. | SRS-132, SRS-133 | -| Audio devices | Software must handle input/output device selection, route changes, and degraded audio states. | SRS-107 through SRS-110 | -| Mobile lifecycle | Software must handle foreground voice sessions, audio interruption, route changes, and background policy limits. | SRS-111 through SRS-115, SRS-139 | -| Secure storage | Software must use platform secure storage through an abstraction and avoid plaintext secret persistence. | SRS-091 through SRS-095 | -| Deployment environment | Software must produce platform-specific release packages and safe release metadata. | SRS-117 through SRS-123 | - -## 7. Software Requirement Analysis Summary - -| Analysis area | Result | Follow-up artifact | -|---|---|---| -| Correctness | Requirements are derived from SysDes and structured by software component. | SAD / SDD | -| Technical feasibility | Feasibility checks are required for `tsclientlib`, audio processing, mobile lifecycle, resource limits, and security. | Analysis report, SAD, SDD | -| Testability | Each requirement contains verification method and acceptance criteria. | Verification plan | -| Operating environment impact | OS services, hardware, network, server, deployment, and mobile lifecycle impacts are captured. | Platform design, Verification plan | -| Traceability | Every SysDes design item is mapped to one or more SRS requirements; direct SRS-to-upstream-system-requirement links are intentionally not used. | Traceability matrix | -| Communication | SRS baseline shall be communicated downstream to SWE.2/SAD, SWE.3/SDD, and SWE.6/Verification. | Review evidence | - -## 8. SRS to SWE Lifecycle Handoff - -| Downstream process/artifact | SRS handoff content | -|---|---| -| SWE.2 / SAD | Software components, interfaces, static and dynamic architecture constraints, NFR allocation, security and platform boundaries | -| SWE.3 / SDD | DTOs, API contracts, state machines, reducers, storage schema, audio pipeline module design, protocol adapter interfaces, error models | -| SWE.4 | Unit verification needs for reducers, audio processors, protocol mappers, storage logic, redaction, validation, and utility functions | -| SWE.5 | Software integration verification for Flutter-Bridge-Core, protocol-state, audio-platform, storage-secure-store, diagnostics-export, and packaging flows | -| SWE.6 | Integrated software verification against this SRS including MVP acceptance and platform compatibility | - -## 9. SysDes to SRS Coverage Matrix - -Coverage summary: 110 / 110 SysDes design items are covered by one or more SRS requirements. - -Software-impacting SysDes items: 95 / 110. All software-impacting SysDes items are represented in the SRS coverage below. Non-software design items are covered as software assumptions, external-interface constraints, verification hooks, or process controls when they affect software work. - -Missing SysDes coverage: None. - -| SysDes ID | SysDes allocation | Covered by SRS | -|---|---|---| -| SysDes-001 | System Engineering | SRS-001 | -| SysDes-002 | System Engineering | SRS-001, SRS-008 | -| SysDes-003 | System Engineering | SRS-001, SRS-007 | -| SysDes-004 | System Engineering, Verification | SRS-002 | -| SysDes-005 | System Engineering | SRS-002, SRS-003, SRS-121 | -| SysDes-006 | Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations | SRS-002, SRS-003, SRS-004 | -| SysDes-007 | System Engineering | SRS-002 | -| SysDes-008 | System Engineering, Verification | SRS-002, SRS-005 | -| SysDes-009 | System Engineering, Verification | SRS-002, SRS-005 | -| SysDes-010 | Software: Flutter UI, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-003, SRS-011 | -| SysDes-011 | Software: Protocol Adapter | SRS-044, SRS-053, SRS-134 | -| SysDes-012 | Software: Flutter UI, Software: Rust Core | SRS-013 | -| SysDes-013 | Software: Audio Subsystem | SRS-062, SRS-064, SRS-065, SRS-066, SRS-067, SRS-069, SRS-135 | -| SysDes-014 | Software: Flutter UI, Software: Audio Subsystem | SRS-012, SRS-135 | -| SysDes-015 | Software: Diagnostics, Verification | SRS-093, SRS-095, SRS-137 | -| SysDes-016 | System Engineering | SRS-009 | -| SysDes-017 | Software: Protocol Adapter, Software: Audio Subsystem, Deployment / Operations | SRS-004, SRS-015, SRS-052, SRS-083, SRS-095, SRS-123, SRS-128, SRS-134 | -| SysDes-018 | External Server, Software: Audio Subsystem, Deployment / Operations | SRS-006 | -| SysDes-019 | User / Operator, Platform, Software: Diagnostics, Verification | SRS-006, SRS-027, SRS-028, SRS-096, SRS-132 | -| SysDes-020 | Hardware, Software: Audio Subsystem | SRS-006, SRS-062, SRS-106, SRS-129, SRS-135 | -| SysDes-021 | Platform, Software: Audio Subsystem, Platform Secure Storage | SRS-006, SRS-027, SRS-090, SRS-104, SRS-105, SRS-106, SRS-107, SRS-108, SRS-109, SRS-110, SRS-111, SRS-112, SRS-113, SRS-114, SRS-133, SRS-135, SRS-137, SRS-138 | -| SysDes-022 | Network | SRS-006, SRS-130 | -| SysDes-023 | External Server, Software: Audio Subsystem, Platform | SRS-006, SRS-010, SRS-131, SRS-132 | -| SysDes-024 | Software, Platform | SRS-008, SRS-016 | -| SysDes-025 | Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification | SRS-017, SRS-018, SRS-019, SRS-020, SRS-021, SRS-022, SRS-024, SRS-025, SRS-026, SRS-027, SRS-028, SRS-080, SRS-081, SRS-096, SRS-108, SRS-109 | -| SysDes-026 | Software: Flutter State, Software: Rust Core, Software: State Sync | SRS-020, SRS-021, SRS-022, SRS-030 | -| SysDes-027 | Software: Bridge, Software: Rust Core | SRS-031, SRS-032, SRS-033, SRS-034, SRS-035, SRS-103 | -| SysDes-028 | Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-036, SRS-037, SRS-038, SRS-039, SRS-136 | -| SysDes-029 | Software: Protocol Adapter, Software: Audio Subsystem | SRS-044, SRS-045, SRS-046, SRS-047, SRS-048, SRS-049, SRS-050, SRS-051, SRS-053, SRS-134 | -| SysDes-030 | Software: State Sync | SRS-020, SRS-021, SRS-022, SRS-030, SRS-036, SRS-043, SRS-054, SRS-055, SRS-056, SRS-057, SRS-058, SRS-059, SRS-060, SRS-061, SRS-124, SRS-136 | -| SysDes-031 | Software: Audio Subsystem | SRS-025, SRS-026, SRS-062, SRS-063, SRS-064, SRS-065, SRS-066, SRS-067, SRS-068, SRS-069, SRS-070, SRS-071, SRS-072, SRS-073, SRS-074, SRS-075, SRS-076, SRS-077, SRS-078, SRS-079, SRS-080, SRS-081, SRS-125, SRS-135, SRS-136 | -| SysDes-032 | Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations | SRS-006, SRS-013, SRS-014, SRS-027, SRS-070, SRS-082, SRS-090, SRS-104, SRS-105, SRS-106, SRS-107, SRS-108, SRS-109, SRS-110, SRS-111, SRS-112, SRS-113, SRS-114, SRS-133, SRS-135, SRS-138 | -| SysDes-033 | Software: Audio Subsystem, Software: Storage | SRS-026, SRS-068, SRS-075, SRS-084, SRS-085, SRS-086, SRS-087, SRS-088, SRS-089, SRS-136 | -| SysDes-034 | Platform Secure Storage | SRS-006, SRS-090, SRS-091, SRS-092, SRS-126, SRS-137 | -| SysDes-035 | Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-028, SRS-052, SRS-061, SRS-083, SRS-093, SRS-095, SRS-096, SRS-097, SRS-098, SRS-099, SRS-100, SRS-122, SRS-123, SRS-124, SRS-125, SRS-126, SRS-128, SRS-136, SRS-137 | -| SysDes-036 | Software: Storage, Deployment / Operations | SRS-006, SRS-084, SRS-085, SRS-086, SRS-087, SRS-088, SRS-089, SRS-116, SRS-117, SRS-118, SRS-119, SRS-120, SRS-121, SRS-127 | -| SysDes-037 | System Engineering, Verification | SRS-139 | -| SysDes-038 | Software: Flutter UI, Software: Flutter State, Software: Bridge, Software: Rust Core | SRS-003, SRS-011, SRS-016, SRS-031, SRS-032 | -| SysDes-039 | Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-003, SRS-011, SRS-039 | -| SysDes-040 | Software: Flutter UI, Software: Flutter State, Software: Protocol Adapter | SRS-012, SRS-029, SRS-033, SRS-044 | -| SysDes-041 | Software: Flutter UI, Software: Rust Core, Software: Audio Subsystem | SRS-011, SRS-013, SRS-016 | -| SysDes-042 | System Engineering | SRS-031, SRS-032, SRS-033, SRS-034, SRS-035, SRS-038, SRS-039, SRS-103 | -| SysDes-043 | External Server, Deployment / Operations, System Engineering, Verification | SRS-044, SRS-045, SRS-046, SRS-047, SRS-048, SRS-049, SRS-050, SRS-051, SRS-053, SRS-131, SRS-134 | -| SysDes-044 | Software: Flutter UI, Software: Rust Core | SRS-036, SRS-037, SRS-054, SRS-057 | -| SysDes-045 | Hardware, Platform, Network | SRS-031, SRS-034, SRS-048, SRS-094, SRS-103, SRS-129, SRS-130 | -| SysDes-046 | Platform, Platform Secure Storage, Software: Diagnostics, Verification, System Engineering | SRS-020, SRS-032, SRS-035 | -| SysDes-047 | System Engineering | SRS-030, SRS-032, SRS-054, SRS-055, SRS-056, SRS-057, SRS-058, SRS-059, SRS-060 | -| SysDes-048 | Software: Flutter UI, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification | SRS-090, SRS-091, SRS-092 | -| SysDes-049 | Software: Bridge, Software: Protocol Adapter | SRS-031, SRS-084, SRS-085, SRS-086, SRS-087, SRS-088, SRS-089 | -| SysDes-050 | Software: Rust Core, Software: State Sync, Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-014, SRS-027, SRS-082, SRS-090, SRS-104, SRS-105, SRS-106, SRS-107, SRS-108, SRS-109, SRS-110, SRS-111, SRS-112, SRS-113, SRS-114, SRS-115, SRS-133 | -| SysDes-051 | Software: Protocol Adapter | SRS-036, SRS-037 | -| SysDes-052 | External Server, Software: Protocol Adapter | SRS-029, SRS-033, SRS-039, SRS-047 | -| SysDes-053 | Software: Audio Subsystem | SRS-029, SRS-044 | -| SysDes-054 | Software: Audio Subsystem | SRS-029 | -| SysDes-055 | Software: Storage, Platform Secure Storage | SRS-017, SRS-018, SRS-023, SRS-024, SRS-031, SRS-038, SRS-132 | -| SysDes-056 | Software: Storage | SRS-025, SRS-026, SRS-028, SRS-031, SRS-032, SRS-068, SRS-086, SRS-095, SRS-103, SRS-106 | -| SysDes-057 | Software: Diagnostics, Verification | SRS-029, SRS-030, SRS-033, SRS-037, SRS-044, SRS-047 | -| SysDes-058 | Software: Diagnostics, Verification | SRS-051, SRS-062, SRS-063, SRS-064, SRS-065, SRS-066, SRS-067, SRS-070, SRS-071, SRS-072, SRS-073, SRS-074, SRS-075, SRS-076, SRS-104, SRS-105 | -| SysDes-059 | Software: Audio Subsystem, Platform | SRS-017, SRS-018 | -| SysDes-060 | Software: Rust Core | SRS-019, SRS-036, SRS-037, SRS-038, SRS-040 | -| SysDes-061 | Software: Protocol Adapter, Software: Audio Subsystem, Platform | SRS-019, SRS-020, SRS-021, SRS-030, SRS-032, SRS-036, SRS-046, SRS-054, SRS-055, SRS-056 | -| SysDes-062 | Software: Audio Subsystem, Platform | SRS-140 | -| SysDes-063 | Software: State Sync | SRS-025, SRS-062, SRS-077, SRS-078, SRS-079, SRS-080, SRS-081 | -| SysDes-064 | Software: Diagnostics, Verification | SRS-019, SRS-036, SRS-040, SRS-041, SRS-042, SRS-130 | -| SysDes-065 | Software: Flutter UI, Software: Bridge, Software: Rust Core | SRS-018, SRS-038, SRS-045, SRS-094, SRS-132 | -| SysDes-066 | Software: Rust Core, Software: Protocol Adapter | SRS-019, SRS-036, SRS-037, SRS-040, SRS-042, SRS-059 | -| SysDes-067 | Software: State Sync | SRS-020, SRS-021, SRS-022, SRS-030, SRS-032, SRS-036, SRS-043, SRS-046, SRS-054, SRS-055 | -| SysDes-068 | Software: State Sync | SRS-020, SRS-021, SRS-030, SRS-032, SRS-036, SRS-047, SRS-054, SRS-056, SRS-057, SRS-058, SRS-060 | -| SysDes-069 | Software: Rust Core, Software: Protocol Adapter | SRS-023, SRS-038, SRS-049 | -| SysDes-070 | Software: Rust Core, Software: Protocol Adapter | SRS-024, SRS-038, SRS-050 | -| SysDes-071 | Software: Protocol Adapter, Software: Audio Subsystem | SRS-012, SRS-025, SRS-051, SRS-062, SRS-063, SRS-064, SRS-065, SRS-066, SRS-067, SRS-071, SRS-077, SRS-079, SRS-080, SRS-104 | -| SysDes-072 | Software: Audio Subsystem | SRS-012, SRS-025, SRS-051, SRS-062, SRS-072, SRS-073, SRS-074, SRS-075, SRS-076, SRS-078, SRS-081, SRS-088, SRS-105 | -| SysDes-073 | Software | SRS-038, SRS-041 | -| SysDes-074 | Software: State Sync | SRS-038, SRS-040, SRS-041, SRS-042, SRS-043, SRS-059, SRS-100, SRS-130 | -| SysDes-075 | Software: Audio Subsystem, Platform | SRS-026, SRS-082, SRS-099, SRS-106, SRS-107, SRS-110, SRS-111, SRS-112, SRS-113, SRS-114, SRS-115, SRS-135, SRS-138 | -| SysDes-076 | Software: Storage, Platform Secure Storage, Software: Diagnostics, Verification | SRS-028, SRS-038, SRS-090, SRS-091, SRS-092, SRS-093, SRS-095, SRS-096, SRS-137 | -| SysDes-077 | Software: Rust Core, Software: Protocol Adapter, Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-039 | -| SysDes-078 | Software: Protocol Adapter | SRS-044, SRS-047, SRS-053, SRS-134 | -| SysDes-079 | Software: State Sync, System Engineering, Verification | SRS-043, SRS-058, SRS-059, SRS-061, SRS-097, SRS-098 | -| SysDes-080 | Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations | SRS-006, SRS-014, SRS-090, SRS-110, SRS-111, SRS-112, SRS-113, SRS-114, SRS-133, SRS-138 | -| SysDes-081 | Software: Audio Subsystem | SRS-026, SRS-062, SRS-063, SRS-064, SRS-065, SRS-066, SRS-067, SRS-068, SRS-069, SRS-070, SRS-086, SRS-135 | -| SysDes-082 | Platform | SRS-006, SRS-010, SRS-131 | -| SysDes-083 | Software: Audio Subsystem | SRS-009, SRS-010 | -| SysDes-084 | Software: Protocol Adapter, Software: Audio Subsystem, Platform, Software: Diagnostics, Verification, Deployment / Operations | SRS-006, SRS-115, SRS-122, SRS-134, SRS-138 | -| SysDes-085 | Software: Flutter UI, Software: Bridge, Software: Rust Core | SRS-035 | -| SysDes-086 | Hardware, Network, Software: Audio Subsystem, Platform | SRS-006, SRS-026, SRS-062, SRS-066, SRS-069, SRS-073, SRS-082, SRS-099, SRS-107, SRS-112, SRS-113, SRS-129, SRS-135 | -| SysDes-087 | Software: Rust Core, Software: Audio Subsystem, Software: Diagnostics, Verification | SRS-095, SRS-136 | -| SysDes-088 | Software: Rust Core, Software: Protocol Adapter, Software: State Sync, Software: Audio Subsystem | SRS-034, SRS-041, SRS-042, SRS-043, SRS-048, SRS-059, SRS-060, SRS-100, SRS-130 | -| SysDes-089 | Platform Secure Storage, Software: Diagnostics, Verification | SRS-034, SRS-090, SRS-091, SRS-092, SRS-093, SRS-094, SRS-103, SRS-126, SRS-129, SRS-137 | -| SysDes-090 | Platform, Software: Diagnostics, Verification | SRS-006, SRS-027, SRS-028, SRS-093, SRS-095, SRS-096, SRS-101, SRS-102, SRS-108, SRS-109, SRS-115, SRS-122, SRS-133, SRS-137 | -| SysDes-091 | Software: Storage, Deployment / Operations, System Engineering, Verification | SRS-004, SRS-006, SRS-089, SRS-116, SRS-117, SRS-118, SRS-119, SRS-120, SRS-121, SRS-122, SRS-127, SRS-138 | -| SysDes-092 | System Engineering | SRS-002, SRS-005 | -| SysDes-093 | System Engineering | SRS-002, SRS-005 | -| SysDes-094 | System Engineering | SRS-002, SRS-005 | -| SysDes-095 | System Engineering | SRS-002, SRS-005 | -| SysDes-096 | System Engineering | SRS-002, SRS-005 | -| SysDes-097 | System Engineering, Verification | SRS-002, SRS-005 | -| SysDes-098 | Software: Rust Core, Software: Audio Subsystem, Deployment / Operations, System Engineering, Verification | SRS-007, SRS-095 | -| SysDes-099 | System Engineering, Verification | SRS-007 | -| SysDes-100 | System Engineering | SRS-007 | -| SysDes-101 | Software: Protocol Adapter, Software: Audio Subsystem, Platform, Platform Secure Storage, Deployment / Operations, System Engineering, Verification | SRS-006 | -| SysDes-102 | External Server, Software: Protocol Adapter | SRS-004, SRS-015, SRS-045, SRS-046, SRS-049, SRS-050, SRS-051, SRS-052, SRS-097, SRS-100, SRS-123, SRS-128, SRS-131, SRS-134 | -| SysDes-103 | Software: State Sync | SRS-004, SRS-015, SRS-058, SRS-059, SRS-060, SRS-061, SRS-097, SRS-098, SRS-124, SRS-128 | -| SysDes-104 | Software: Audio Subsystem | SRS-004, SRS-015, SRS-051, SRS-062, SRS-063, SRS-064, SRS-065, SRS-066, SRS-067, SRS-071, SRS-072, SRS-073, SRS-076, SRS-083, SRS-099, SRS-125, SRS-128, SRS-135 | -| SysDes-105 | Platform Secure Storage, Software: Diagnostics, Verification | SRS-004, SRS-015, SRS-028, SRS-090, SRS-091, SRS-092, SRS-093, SRS-094, SRS-095, SRS-096, SRS-101, SRS-102, SRS-126, SRS-128, SRS-137 | -| SysDes-106 | Software: Storage, Deployment / Operations | SRS-004, SRS-015, SRS-116, SRS-117, SRS-118, SRS-119, SRS-120, SRS-121, SRS-122, SRS-127, SRS-128, SRS-138 | -| SysDes-107 | Verification | SRS-004, SRS-015, SRS-128 | -| SysDes-108 | System Engineering, Software Requirements Engineering, Verification | SRS-004, SRS-005, SRS-141, SRS-143 | -| SysDes-109 | System Engineering, Software Requirements Engineering | SRS-004, SRS-005, SRS-141, SRS-143 | -| SysDes-110 | System Engineering, Software Requirements Engineering, Change Control, Verification | SRS-004, SRS-005, SRS-142, SRS-143 | - -## 10. SRS Requirement Register - -| SRS ID | Type | Stage | Allocated to | Verification method | Source SysDes | -|---|---|---|---|---|---| -| SRS-001 | Process / SWE.1 | P0 / MVP | Software Requirements Engineering | Review | SysDes-001 through SysDes-003 | -| SRS-002 | Process / Requirement Attribute | P0 / MVP | Software Requirements Engineering | Inspection | SysDes-004 through SysDes-009, SysDes-092 through SysDes-097 | -| SRS-003 | Process / Structuring | P0 / MVP | Software Requirements Engineering | Review | SysDes-005, SysDes-006, SysDes-010, SysDes-038, SysDes-039 | -| SRS-004 | Process / Prioritization | P0 / MVP | Software Requirements Engineering | Inspection | SysDes-006, SysDes-017, SysDes-091, SysDes-102 through SysDes-110 | -| SRS-005 | Process / Traceability | P0 / MVP | Software Requirements Engineering | Inspection | SysDes-008, SysDes-009, SysDes-092 through SysDes-097, SysDes-108 through SysDes-110 | -| SRS-006 | Process / Operating Environment Analysis | P0 / MVP | Software Requirements Engineering | Review | SysDes-018 through SysDes-023, SysDes-032, SysDes-034, SysDes-036, SysDes-080, SysDes-082, SysDes-084, SysDes-086, SysDes-090, SysDes-091, SysDes-101 | -| SRS-007 | Process / Communication | P0 / MVP | Software Requirements Engineering | Review | SysDes-003, SysDes-098 through SysDes-100 | -| SRS-008 | Constraint | P0 / MVP | Application Container | Review | SysDes-002, SysDes-024 | -| SRS-009 | Constraint | P0 / MVP | Application Container, Rust Core | Review, System Test | SysDes-016, SysDes-083 | -| SRS-010 | Constraint | P0 / MVP | Application Container, Protocol Adapter | Inspection | SysDes-023, SysDes-082, SysDes-083 | -| SRS-011 | Architecture Constraint | P0 / MVP | All Software Components | Inspection | SysDes-010, SysDes-038, SysDes-039, SysDes-041 | -| SRS-012 | Architecture Constraint | P0 / MVP | Flutter UI, Audio Subsystem | Inspection, Performance Test | SysDes-014, SysDes-040, SysDes-071, SysDes-072 | -| SRS-013 | Platform Requirement | P0 / MVP | Flutter UI, Rust Core, Platform Adapters | Build Test | SysDes-012, SysDes-032, SysDes-041 | -| SRS-014 | Architecture Constraint | P0 / MVP | Platform Adapters | Inspection, Integration Test | SysDes-032, SysDes-050, SysDes-080 | -| SRS-015 | Verification Hook | P0 / MVP | Protocol Adapter, State Sync, Audio, Diagnostics, Platform Adapters | Inspection, Demo | SysDes-017, SysDes-102 through SysDes-107 | -| SRS-016 | Functional | P0 / MVP | Application Container | Integration Test | SysDes-024, SysDes-038, SysDes-041 | -| SRS-017 | Functional | P0 / MVP | Flutter UI | UI Test | SysDes-025, SysDes-055, SysDes-059 | -| SRS-018 | Functional | P0 / MVP | Flutter UI | UI Test | SysDes-025, SysDes-055, SysDes-059, SysDes-065 | -| SRS-019 | Functional | P0 / MVP | Flutter UI, Flutter State | UI Test, System Test | SysDes-025, SysDes-060, SysDes-061, SysDes-064, SysDes-066 | -| SRS-020 | Functional | P0 / MVP | Flutter UI, Flutter State | UI Test, System Test | SysDes-025, SysDes-026, SysDes-030, SysDes-046, SysDes-061, SysDes-067, SysDes-068 | -| SRS-021 | Functional | P0 / MVP | Flutter UI, Flutter State | UI Test, System Test | SysDes-025, SysDes-026, SysDes-030, SysDes-061, SysDes-067, SysDes-068 | -| SRS-022 | Functional | P0 / MVP | Flutter UI, Flutter State | UI Test | SysDes-025, SysDes-026, SysDes-030, SysDes-067 | -| SRS-023 | Functional | P0 / MVP | Flutter UI, Bridge, Rust Core | System Test | SysDes-055, SysDes-069 | -| SRS-024 | Functional | P0 / MVP | Flutter UI, Bridge, Rust Core | UI Test, System Test | SysDes-025, SysDes-055, SysDes-070 | -| SRS-025 | Functional | P0 / MVP | Flutter UI, Audio Subsystem | UI Test, System Test | SysDes-025, SysDes-031, SysDes-056, SysDes-063, SysDes-071, SysDes-072 | -| SRS-026 | Functional | P0 / MVP | Flutter UI, Audio Subsystem, Storage | UI Test | SysDes-025, SysDes-031, SysDes-033, SysDes-056, SysDes-075, SysDes-081, SysDes-086 | -| SRS-027 | Functional / Privacy | P0 / MVP | Flutter UI, Platform Adapters | UI Test, Privacy Review | SysDes-019, SysDes-021, SysDes-025, SysDes-032, SysDes-050, SysDes-090 | -| SRS-028 | Functional / Diagnostics | P1 / Beta | Flutter UI, Diagnostics | UI Test, Security Audit | SysDes-019, SysDes-025, SysDes-035, SysDes-056, SysDes-076, SysDes-090, SysDes-105 | -| SRS-029 | Constraint | P0 / MVP | Flutter UI, Flutter State | Inspection | SysDes-040, SysDes-052 through SysDes-054, SysDes-057 | -| SRS-030 | Functional | P0 / MVP | Flutter State | Inspection, UI Test | SysDes-026, SysDes-030, SysDes-047, SysDes-057, SysDes-061, SysDes-067, SysDes-068 | -| SRS-031 | Interface | P0 / MVP | Bridge Layer | Integration Test | SysDes-027, SysDes-038, SysDes-042, SysDes-045, SysDes-049, SysDes-055, SysDes-056 | -| SRS-032 | Interface | P0 / MVP | Bridge Layer, Rust Core | Integration Test | SysDes-027, SysDes-038, SysDes-042, SysDes-046, SysDes-047, SysDes-056, SysDes-061, SysDes-067, SysDes-068 | -| SRS-033 | Interface / Safety | P0 / MVP | Bridge Layer | Inspection, Integration Test | SysDes-027, SysDes-040, SysDes-042, SysDes-052, SysDes-057 | -| SRS-034 | Interface / Error Handling | P0 / MVP | Bridge Layer, Rust Core | Integration Test | SysDes-027, SysDes-042, SysDes-045, SysDes-088, SysDes-089 | -| SRS-035 | Non-functional | P0 / MVP | Bridge Layer, Rust Core | Performance Test | SysDes-027, SysDes-042, SysDes-046, SysDes-085 | -| SRS-036 | Functional | P0 / MVP | Rust Core | Unit Test, Integration Test | SysDes-028, SysDes-030, SysDes-044, SysDes-051, SysDes-060, SysDes-061, SysDes-064, SysDes-066 through SysDes-068 | -| SRS-037 | Functional | P0 / MVP | Rust Core | Inspection, Unit Test | SysDes-028, SysDes-044, SysDes-051, SysDes-057, SysDes-060, SysDes-066 | -| SRS-038 | Functional | P0 / MVP | Rust Core, Bridge | Integration Test | SysDes-028, SysDes-042, SysDes-055, SysDes-060, SysDes-065, SysDes-069, SysDes-070, SysDes-073, SysDes-074, SysDes-076 | -| SRS-039 | Functional / Architecture | P0 / MVP | Rust Core | Inspection | SysDes-028, SysDes-039, SysDes-042, SysDes-052, SysDes-077 | -| SRS-040 | Functional | P0 / MVP | Rust Core, State Sync | Unit Test, System Test | SysDes-060, SysDes-064, SysDes-066, SysDes-074 | -| SRS-041 | Functional | P0 / MVP | Rust Core | System Test | SysDes-064, SysDes-073, SysDes-074, SysDes-088 | -| SRS-042 | Functional / Reliability | P0 / MVP | Rust Core, Protocol Adapter, State Sync | System Test | SysDes-064, SysDes-066, SysDes-074, SysDes-088 | -| SRS-043 | Functional / Reliability | P0 / MVP | Rust Core, State Sync | System Test, Event Replay Test | SysDes-030, SysDes-067, SysDes-074, SysDes-079, SysDes-088 | -| SRS-044 | Architecture Constraint | P0 / MVP | Protocol Adapter | Inspection | SysDes-011, SysDes-029, SysDes-040, SysDes-043, SysDes-053, SysDes-057, SysDes-078 | -| SRS-045 | Functional | P0 / MVP | Protocol Adapter, Rust Core | Protocol Integration Test | SysDes-029, SysDes-043, SysDes-065, SysDes-102 | -| SRS-046 | Functional | P0 / MVP | Protocol Adapter, State Sync | Protocol Integration Test | SysDes-029, SysDes-043, SysDes-061, SysDes-067, SysDes-102 | -| SRS-047 | Functional | P0 / MVP | Protocol Adapter, State Sync | Unit Test, Integration Test | SysDes-029, SysDes-043, SysDes-052, SysDes-057, SysDes-068, SysDes-078 | -| SRS-048 | Functional / Error Handling | P0 / MVP | Protocol Adapter, Rust Core | Unit Test, Integration Test | SysDes-029, SysDes-043, SysDes-045, SysDes-088 | -| SRS-049 | Functional | P0 / MVP | Protocol Adapter | Protocol Integration Test | SysDes-029, SysDes-043, SysDes-069, SysDes-102 | -| SRS-050 | Functional | P0 / MVP | Protocol Adapter | Protocol Integration Test | SysDes-029, SysDes-043, SysDes-070, SysDes-102 | -| SRS-051 | Functional | P0 / MVP | Protocol Adapter, Audio Subsystem | Protocol Integration Test, Audio Test | SysDes-029, SysDes-043, SysDes-058, SysDes-071, SysDes-072, SysDes-102, SysDes-104 | -| SRS-052 | Verification Hook | P0 / MVP | Protocol Adapter, Diagnostics | Demo | SysDes-017, SysDes-035, SysDes-102 | -| SRS-053 | Maintainability | P1 / Beta | Protocol Adapter, Bridge | Architecture Review | SysDes-011, SysDes-029, SysDes-043, SysDes-078 | -| SRS-054 | Functional | P0 / MVP | State Sync | Unit Test | SysDes-030, SysDes-044, SysDes-047, SysDes-061, SysDes-067, SysDes-068 | -| SRS-055 | Functional | P0 / MVP | State Sync | Unit Test, Integration Test | SysDes-030, SysDes-047, SysDes-061, SysDes-067 | -| SRS-056 | Functional | P0 / MVP | State Sync | Unit Test | SysDes-030, SysDes-047, SysDes-061, SysDes-068 | -| SRS-057 | Functional | P0 / MVP | State Sync, Rust Core | Unit Test, Integration Test | SysDes-030, SysDes-044, SysDes-047, SysDes-068 | -| SRS-058 | Functional | P0 / MVP | State Sync | Unit Test | SysDes-030, SysDes-047, SysDes-068, SysDes-079, SysDes-103 | -| SRS-059 | Functional / Reliability | P0 / MVP | State Sync | Event Replay Test, System Test | SysDes-030, SysDes-047, SysDes-066, SysDes-074, SysDes-079, SysDes-088, SysDes-103 | -| SRS-060 | Reliability | P0 / MVP | State Sync, Rust Core | Unit Test, Fuzz/Negative Test | SysDes-030, SysDes-047, SysDes-068, SysDes-088, SysDes-103 | -| SRS-061 | Verification Hook | P1 / Beta | State Sync, Diagnostics | Demo | SysDes-030, SysDes-035, SysDes-079, SysDes-103 | -| SRS-062 | Functional | P0 / MVP | Audio Subsystem | Audio Integration Test | SysDes-013, SysDes-020, SysDes-031, SysDes-058, SysDes-063, SysDes-071, SysDes-072, SysDes-081, SysDes-086, SysDes-104 | -| SRS-063 | Functional | P0 / MVP | Audio Subsystem | Audio Test | SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 | -| SRS-064 | Functional / Audio Processing | P0 / MVP | Audio Subsystem | Audio Processing Test | SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 | -| SRS-065 | Functional / Audio Processing | P0 / MVP | Audio Subsystem | Audio Processing Test | SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 | -| SRS-066 | Functional / Audio Processing | P0 / MVP | Audio Subsystem, Platform Adapters | Audio Processing Test | SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-086, SysDes-104 | -| SRS-067 | Functional / Audio Processing | P0 / MVP | Audio Subsystem | Audio Processing Test | SysDes-013, SysDes-031, SysDes-058, SysDes-071, SysDes-081, SysDes-104 | -| SRS-068 | Functional / Settings | P0 / MVP | Audio Subsystem, Flutter UI, Storage | UI Test, Unit Test | SysDes-031, SysDes-033, SysDes-056, SysDes-081 | -| SRS-069 | Non-functional / Audio | P0 / MVP | Audio Subsystem, Platform Adapters | Review, Audio Test | SysDes-013, SysDes-031, SysDes-081, SysDes-086 | -| SRS-070 | Architecture / Audio | P1 / Beta | Audio Subsystem, Platform Adapters | Inspection | SysDes-031, SysDes-032, SysDes-058, SysDes-081 | -| SRS-071 | Functional / Audio Codec | P0 / MVP | Audio Subsystem | Audio Test | SysDes-031, SysDes-058, SysDes-071, SysDes-104 | -| SRS-072 | Functional / Audio Codec | P0 / MVP | Audio Subsystem | Audio Test | SysDes-031, SysDes-058, SysDes-072, SysDes-104 | -| SRS-073 | Functional / Audio Playback | P0 / MVP | Audio Subsystem | Audio Test | SysDes-031, SysDes-058, SysDes-072, SysDes-086, SysDes-104 | -| SRS-074 | Functional / Audio Playback | P0 / MVP | Audio Subsystem, Flutter UI | Audio Test, UI Test | SysDes-031, SysDes-058, SysDes-072 | -| SRS-075 | Functional / Audio Playback | P1 / Beta | Audio Subsystem, Flutter UI, Storage | Audio Test, UI Test | SysDes-031, SysDes-033, SysDes-058, SysDes-072 | -| SRS-076 | Functional / Audio Playback | P0 / MVP | Audio Subsystem | Audio Test | SysDes-031, SysDes-058, SysDes-072, SysDes-104 | -| SRS-077 | Functional / Voice Control | P0 / MVP | Audio Subsystem, Rust Core, Flutter UI | System Test | SysDes-031, SysDes-063, SysDes-071 | -| SRS-078 | Functional / Voice Control | P0 / MVP | Audio Subsystem, Rust Core, Flutter UI | System Test | SysDes-031, SysDes-063, SysDes-072 | -| SRS-079 | Functional / Voice Control | P0 / MVP | Audio Subsystem, Flutter UI | System Test | SysDes-031, SysDes-063, SysDes-071 | -| SRS-080 | Functional / Voice Metering | P0 / MVP | Audio Subsystem, Flutter UI | Audio Test, UI Test | SysDes-025, SysDes-031, SysDes-063, SysDes-071 | -| SRS-081 | Functional / Voice Metering | P0 / MVP | Audio Subsystem, State Sync, Flutter UI | Audio Test, UI Test | SysDes-025, SysDes-031, SysDes-063, SysDes-072 | -| SRS-082 | Reliability / Audio | P1 / Beta | Audio Subsystem, Platform Adapters | Platform Integration Test | SysDes-032, SysDes-050, SysDes-075, SysDes-086 | -| SRS-083 | Verification Hook | P1 / Beta | Audio Subsystem, Diagnostics | Demo | SysDes-017, SysDes-035, SysDes-104 | -| SRS-084 | Functional / Storage | P0 / MVP | Storage | Unit Test, Integration Test | SysDes-033, SysDes-036, SysDes-049 | -| SRS-085 | Functional / Storage | P1 / Beta | Storage | Unit Test, Integration Test | SysDes-033, SysDes-036, SysDes-049 | -| SRS-086 | Functional / Storage | P0 / MVP | Storage, Audio Subsystem | Unit Test, Integration Test | SysDes-033, SysDes-036, SysDes-049, SysDes-056, SysDes-081 | -| SRS-087 | Functional / Storage | P1 / Beta | Storage, Flutter UI | Unit Test, Integration Test | SysDes-033, SysDes-036, SysDes-049 | -| SRS-088 | Functional / Storage | P1 / Beta | Storage, Audio Subsystem | Unit Test | SysDes-033, SysDes-036, SysDes-049, SysDes-072 | -| SRS-089 | Architecture / Storage | P0 / MVP | Storage | Inspection | SysDes-033, SysDes-036, SysDes-049, SysDes-091 | -| SRS-090 | Interface / Security | P0 / MVP | Storage, Platform Adapters | Inspection, Security Audit | SysDes-021, SysDes-032, SysDes-034, SysDes-048, SysDes-050, SysDes-076, SysDes-080, SysDes-089, SysDes-105 | -| SRS-091 | Security | P0 / MVP | Storage, Platform Secure Storage | Security Audit | SysDes-034, SysDes-048, SysDes-076, SysDes-089, SysDes-105 | -| SRS-092 | Security | P0 / MVP | Storage, Platform Secure Storage, Diagnostics | Security Audit | SysDes-034, SysDes-048, SysDes-076, SysDes-089, SysDes-105 | -| SRS-093 | Security / Diagnostics | P0 / MVP | Diagnostics, Storage | Security Audit | SysDes-015, SysDes-035, SysDes-076, SysDes-089, SysDes-090, SysDes-105 | -| SRS-094 | Security | P0 / MVP | Flutter UI, Rust Core, Protocol Adapter, Storage | Unit Test, Security Test | SysDes-045, SysDes-065, SysDes-089, SysDes-105 | -| SRS-095 | Diagnostics | P0 / MVP | Diagnostics | Inspection, Demo | SysDes-015, SysDes-017, SysDes-035, SysDes-056, SysDes-076, SysDes-087, SysDes-090, SysDes-098, SysDes-105 | -| SRS-096 | Diagnostics | P1 / Beta | Diagnostics, Flutter UI | Demo, Security Audit | SysDes-019, SysDes-025, SysDes-035, SysDes-076, SysDes-090, SysDes-105 | -| SRS-097 | Diagnostics / Verification Hook | P1 / Beta | Diagnostics, Protocol Adapter, State Sync | Demo | SysDes-035, SysDes-079, SysDes-102, SysDes-103 | -| SRS-098 | Diagnostics / Verification Hook | P1 / Beta | Diagnostics, State Sync | Demo | SysDes-035, SysDes-079, SysDes-103 | -| SRS-099 | Diagnostics / Verification Hook | P1 / Beta | Diagnostics, Audio Subsystem, Platform Adapters | Demo | SysDes-035, SysDes-075, SysDes-086, SysDes-104 | -| SRS-100 | Diagnostics / Reliability | P1 / Beta | Diagnostics, Rust Core, Protocol Adapter | Demo | SysDes-035, SysDes-074, SysDes-088, SysDes-102 | -| SRS-101 | Privacy | P0 / MVP | All Software Components | Privacy Review | SysDes-090, SysDes-105 | -| SRS-102 | Privacy / Constraint | P0 / MVP | Diagnostics | Security Audit | SysDes-090, SysDes-105 | -| SRS-103 | Security / Error Handling | P0 / MVP | Flutter UI, Rust Core, Bridge, Diagnostics | UI Test, Security Review | SysDes-027, SysDes-042, SysDes-045, SysDes-056, SysDes-089 | -| SRS-104 | Interface / Platform | P0 / MVP | Platform Adapters, Audio Subsystem | Platform Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-058, SysDes-071 | -| SRS-105 | Interface / Platform | P0 / MVP | Platform Adapters, Audio Subsystem | Platform Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-058, SysDes-072 | -| SRS-106 | Interface / Platform | P0 / MVP | Platform Adapters, Audio Subsystem, Flutter UI | Platform Integration Test | SysDes-020, SysDes-021, SysDes-032, SysDes-050, SysDes-056, SysDes-075 | -| SRS-107 | Interface / Platform | P0 / MVP | Platform Adapters, Audio Subsystem | Platform Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-086 | -| SRS-108 | Interface / Platform | P0 / MVP | Platform Adapters, Flutter UI | Platform Integration Test | SysDes-021, SysDes-025, SysDes-032, SysDes-050, SysDes-090 | -| SRS-109 | Interface / Platform | P1 / Beta | Platform Adapters, Flutter UI | Platform Integration Test | SysDes-021, SysDes-025, SysDes-032, SysDes-050, SysDes-090 | -| SRS-110 | Platform / iOS | P0 / MVP | Platform Adapters, Audio Subsystem | iOS Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080 | -| SRS-111 | Platform / Android | P0 / MVP | Platform Adapters, Audio Subsystem | Android Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080 | -| SRS-112 | Platform / Android | P1 / Beta | Platform Adapters, Audio Subsystem | Android Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080, SysDes-086 | -| SRS-113 | Platform / Desktop | P1 / Beta | Platform Adapters, Audio Subsystem | Desktop Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080, SysDes-086 | -| SRS-114 | Interface / Platform | P1 / Beta | Platform Adapters, Rust Core, Audio Subsystem | Platform Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-075, SysDes-080 | -| SRS-115 | Platform / Diagnostics | P1 / Beta | Platform Adapters, Diagnostics, Flutter UI | Review, Demo | SysDes-050, SysDes-075, SysDes-084, SysDes-090 | -| SRS-116 | Packaging | P1 / Beta | Application Container, Deployment Scripts | Build Test | SysDes-036, SysDes-091, SysDes-106 | -| SRS-117 | Packaging | P2 / Production | Application Container, Deployment Scripts | Build/Release Audit | SysDes-036, SysDes-091, SysDes-106 | -| SRS-118 | Packaging | P1 / Beta | Application Container, Deployment Scripts | Build Test | SysDes-036, SysDes-091, SysDes-106 | -| SRS-119 | Packaging | P1 / Beta | Application Container, Deployment Scripts | Build Test | SysDes-036, SysDes-091, SysDes-106 | -| SRS-120 | Packaging | P1 / Beta | Application Container, Deployment Scripts | Build Test | SysDes-036, SysDes-091, SysDes-106 | -| SRS-121 | Legal / Product Constraint | P0 / MVP | Application Container, Flutter UI, Deployment Scripts | Legal Review, Inspection | SysDes-005, SysDes-036, SysDes-091, SysDes-106 | -| SRS-122 | Security / Release | P1 / Beta | Application Container, Diagnostics, Deployment Scripts | Inspection, Security Review | SysDes-035, SysDes-084, SysDes-090, SysDes-091, SysDes-106 | -| SRS-123 | Verification Support | P0 / MVP | Protocol Adapter, Diagnostics | Demo | SysDes-017, SysDes-035, SysDes-102 | -| SRS-124 | Verification Support | P0 / MVP | State Sync, Diagnostics | Unit Test, Demo | SysDes-030, SysDes-035, SysDes-103 | -| SRS-125 | Verification Support | P0 / MVP | Audio Subsystem, Diagnostics | Audio Test, Demo | SysDes-031, SysDes-035, SysDes-104 | -| SRS-126 | Verification Support | P0 / MVP | Storage, Diagnostics, Platform Adapters | Security Audit | SysDes-034, SysDes-035, SysDes-089, SysDes-105 | -| SRS-127 | Verification Support | P1 / Beta | Deployment Scripts, Application Container | Build Test, Release Audit | SysDes-036, SysDes-091, SysDes-106 | -| SRS-128 | Verification Support | P0 / MVP | All Software Components | System Test, Demo | SysDes-017, SysDes-035, SysDes-102 through SysDes-107 | -| SRS-129 | Operating Environment Constraint | P0 / MVP | Flutter UI, Rust Core, Audio Subsystem, Platform Adapters | System Test | SysDes-020, SysDes-045, SysDes-086, SysDes-089 | -| SRS-130 | Operating Environment Constraint | P0 / MVP | Flutter UI, Rust Core, Protocol Adapter | System Test | SysDes-022, SysDes-045, SysDes-064, SysDes-074, SysDes-088 | -| SRS-131 | Operating Environment Constraint | P0 / MVP | Protocol Adapter, Rust Core, Flutter UI | System Test | SysDes-023, SysDes-043, SysDes-082, SysDes-102 | -| SRS-132 | Functional / Environment | P0 / MVP | Flutter UI, Rust Core, Protocol Adapter, Storage | UI Test, System Test | SysDes-019, SysDes-023, SysDes-055, SysDes-065 | -| SRS-133 | Operating Environment Interface | P0 / MVP | Platform Adapters, Rust Core, Flutter UI | Platform Integration Test | SysDes-021, SysDes-032, SysDes-050, SysDes-080, SysDes-090 | -| SRS-134 | Analysis Requirement | P0 / MVP | Protocol Adapter, Software Requirements Engineering | Review, Protocol Probe | SysDes-011, SysDes-017, SysDes-029, SysDes-043, SysDes-078, SysDes-084, SysDes-102 | -| SRS-135 | Analysis Requirement | P0 / MVP | Audio Subsystem, Platform Adapters | Review, Audio Test | SysDes-013, SysDes-014, SysDes-020, SysDes-021, SysDes-031, SysDes-032, SysDes-075, SysDes-081, SysDes-086, SysDes-104 | -| SRS-136 | Analysis Requirement | P0 / MVP | Rust Core, State Sync, Audio Subsystem, Diagnostics, Storage | Review, Performance Test | SysDes-028, SysDes-030, SysDes-031, SysDes-033, SysDes-035, SysDes-087 | -| SRS-137 | Analysis Requirement | P0 / MVP | Storage, Diagnostics, Platform Adapters, Flutter UI | Security Review, Privacy Review | SysDes-015, SysDes-021, SysDes-034, SysDes-035, SysDes-076, SysDes-089, SysDes-090, SysDes-105 | -| SRS-138 | Analysis Requirement | P1 / Beta | Platform Adapters, Audio Subsystem, Deployment Scripts | Review, Platform Test | SysDes-021, SysDes-032, SysDes-075, SysDes-080, SysDes-084, SysDes-091, SysDes-106 | -| SRS-139 | Traceability / Coverage | P0 / MVP | Software Requirements Engineering | Review | SysDes-037 | -| SRS-140 | Traceability / Coverage | P0 / MVP | Software Requirements Engineering | Review | SysDes-062 | -| SRS-141 | Process / Traceability | P0 / MVP | Software Requirements Engineering | Review, Inspection | SysDes-108, SysDes-109 | -| SRS-142 | Process / Change Control | P0 / MVP | Software Requirements Engineering, Change Control | Review, Inspection | SysDes-110 | -| SRS-143 | Process / Coverage | P0 / MVP | Software Requirements Engineering, Verification | Review, Inspection | SysDes-108, SysDes-109, SysDes-110 | - -## 11. Revision History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-13 | Initial ASPICE SWE.1-style SRS derived from early SysDes baseline | -| 0.2.0 | 2026-05-13 | Added inherited upstream coverage via SysDes to show complete chained requirement traceability | -| 0.3.0 | 2026-05-13 | Removed all direct individual SRS-to-upstream-system-requirement links; SRS now traces only to SysDes as the system architectural allocation baseline | -| 0.4.0 | 2026-05-13 | Updated source baseline to SysDes v0.5 and added SRS requirements for SysDes-108 through SysDes-110 derivation and change-control rules | - - - - ---- - -## 13. UI/UX, Material 3, Platform, and Internationalization Software Requirements - -This section extends the ASPICE SWE.1 Software Requirements Specification. The source baseline for these requirements is **SysDes only**. This SRS does not link directly to system-requirement IDs. - -**SRS-144**: The software shall initialize the Flutter client theme using Material 3 as the baseline UI system. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Design System -- Source SysDes: SysDes-111, SysDes-112 -- Verification method: Review, Widget Test - -**SRS-145**: The software shall provide a Chanora Design System layer above Material 3 for product-specific semantic states. - -- Status: Baseline -- Type: Software Architecture Constraint -- Stage: P0 / MVP -- Allocated to: Design System -- Source SysDes: SysDes-111, SysDes-112, SysDes-113 -- Verification method: Inspection, Widget Test - -**SRS-146**: The software shall define semantic tokens for connection states. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Design System -- Source SysDes: SysDes-114 -- Verification method: Unit Test - -**SRS-147**: The software shall define semantic tokens for voice states including speaking, muted, deafened, and push-to-talk active states. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Design System -- Source SysDes: SysDes-114 -- Verification method: Unit Test - -**SRS-148**: The software shall define semantic tokens for latency, packet loss, diagnostics, and error states. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Design System -- Source SysDes: SysDes-114 -- Verification method: Unit Test - -**SRS-149**: The software shall expose design tokens through `ThemeData`, `ColorScheme`, `TextTheme`, component themes, `ThemeExtension`, or equivalent Flutter theming mechanisms. - -- Status: Baseline -- Type: Software Interface Requirement -- Stage: P0 / MVP -- Allocated to: Design System -- Source SysDes: SysDes-113, SysDes-114 -- Verification method: Inspection, Widget Test - -**SRS-150**: Feature screens shall not hardcode product semantic colors, spacing, shape, density, or motion values. - -- Status: Baseline -- Type: Software Constraint -- Stage: P0 / MVP -- Allocated to: Flutter Feature Screens -- Source SysDes: SysDes-112, SysDes-113, SysDes-114 -- Verification method: Review, Static Inspection - -**SRS-151**: The software shall provide an Adaptive Shell that resolves compact, medium, and expanded layout classes. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell -- Source SysDes: SysDes-115 -- Verification method: Widget Test, Integration Test - -**SRS-152**: The compact layout shall use a single-column primary content structure and mobile-appropriate primary navigation. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell -- Source SysDes: SysDes-115, SysDes-116 -- Verification method: Widget Test, Integration Test - -**SRS-153**: The medium layout shall support side navigation or equivalent navigation rail behavior where available display width permits. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P1 / Beta -- Allocated to: Flutter App Shell -- Source SysDes: SysDes-115, SysDes-116 -- Verification method: Widget Test, Integration Test - -**SRS-154**: The expanded layout shall support persistent side panes and persistent voice controls where available display width permits. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P2 / Production -- Allocated to: Flutter App Shell -- Source SysDes: SysDes-115, SysDes-116 -- Verification method: Integration Test, System Test - -**SRS-155**: The software shall keep connection status visible or directly reachable in compact, medium, and expanded layouts. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Connection UI -- Source SysDes: SysDes-116 -- Verification method: Integration Test - -**SRS-156**: The software shall keep primary voice controls visible or directly reachable in compact, medium, and expanded layouts. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Voice UI -- Source SysDes: SysDes-116 -- Verification method: Integration Test - -**SRS-157**: The software shall provide screen-reader semantics for critical connection, voice, channel, diagnostics, and settings controls. - -- Status: Baseline -- Type: Software Accessibility Requirement -- Stage: P0 / MVP -- Allocated to: Flutter UI, Design System -- Source SysDes: SysDes-117, SysDes-130 -- Verification method: Accessibility Test - -**SRS-158**: The software shall provide localized accessibility labels for icon-only controls. - -- Status: Baseline -- Type: Software Accessibility Requirement -- Stage: P0 / MVP -- Allocated to: Flutter UI, Localization Service -- Source SysDes: SysDes-117, SysDes-130 -- Verification method: Accessibility Test, Localization Test - -**SRS-159**: The software shall not express critical states by color alone; it shall also use text, iconography, shape, position, or semantic labeling. - -- Status: Baseline -- Type: Software Accessibility Requirement -- Stage: P0 / MVP -- Allocated to: Flutter UI, Design System -- Source SysDes: SysDes-117 -- Verification method: Widget Test, Accessibility Test - -**SRS-160**: The software shall support visible focus indication and logical focus traversal for desktop and tablet keyboard use. - -- Status: Baseline -- Type: Software Accessibility Requirement -- Stage: P1 / Beta -- Allocated to: Flutter UI -- Source SysDes: SysDes-117 -- Verification method: Widget Test, System Test - -**SRS-161**: The software shall keep critical actions reachable under increased text scaling. - -- Status: Baseline -- Type: Software Accessibility Requirement -- Stage: P0 / MVP -- Allocated to: Flutter UI -- Source SysDes: SysDes-117 -- Verification method: Accessibility Test - -**SRS-162**: The software shall apply platform safe area, display cutout, system bar, virtual keyboard, and desktop window inset constraints through shared shell behavior. - -- Status: Baseline -- Type: Software Platform Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Platform Adapter -- Source SysDes: SysDes-118 -- Verification method: Platform Test - -**SRS-163**: The software shall model Android back navigation as a platform back intent handled by the shell or platform service layer. - -- Status: Baseline -- Type: Software Platform Requirement -- Stage: P1 / Beta -- Allocated to: Flutter App Shell, Platform Adapter -- Source SysDes: SysDes-118 -- Verification method: Platform Test - -**SRS-164**: The software shall model iOS navigation gestures, safe areas, keyboard avoidance, and haptics through platform-aware UI services. - -- Status: Baseline -- Type: Software Platform Requirement -- Stage: P1 / Beta -- Allocated to: Flutter App Shell, Platform Adapter -- Source SysDes: SysDes-118 -- Verification method: Platform Test - -**SRS-165**: The software shall provide a Localization Service for product-owned user-visible strings. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Localization Service -- Source SysDes: SysDes-119 -- Verification method: Unit Test, Integration Test - -**SRS-166**: The software shall externalize product-owned user-visible strings into localization resources or an equivalent mechanism. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Localization Service -- Source SysDes: SysDes-119 -- Verification method: Inspection - -**SRS-167**: The software shall provide English as the baseline product locale. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Localization Service -- Source SysDes: SysDes-119, SysDes-131 -- Verification method: Localization Test - -**SRS-168**: The software shall implement deterministic fallback behavior when a translation key is missing. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Localization Service -- Source SysDes: SysDes-119, SysDes-131 -- Verification method: Unit Test - -**SRS-169**: The software shall allow additional locales to be added without changing protocol, audio, state synchronization, or storage modules. - -- Status: Baseline -- Type: Software Maintainability Requirement -- Stage: P1 / Beta -- Allocated to: Localization Service, Flutter UI -- Source SysDes: SysDes-119 -- Verification method: Review, Inspection - -**SRS-170**: The software shall display server-provided server names, channel names, client nicknames, and text messages as content rather than translating them. - -- Status: Baseline -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Flutter UI, Protocol DTOs -- Source SysDes: SysDes-120 -- Verification method: Integration Test - -**SRS-171**: The software shall preserve Unicode text received from compatible servers through protocol adapter, bridge DTO, state store, and UI rendering paths. - -- Status: Baseline -- Type: Software Data Requirement -- Stage: P0 / MVP -- Allocated to: Protocol Adapter, Bridge, Rust Core, Flutter UI -- Source SysDes: SysDes-120, SysDes-121 -- Verification method: Integration Test - -**SRS-172**: The software shall use UTF-8 internally for cross-layer text DTOs unless a boundary adapter requires conversion. - -- Status: Baseline -- Type: Software Interface Requirement -- Stage: P0 / MVP -- Allocated to: Bridge, Rust Core, Storage, Diagnostics, Protocol Adapter -- Source SysDes: SysDes-121 -- Verification method: Inspection, Integration Test - -**SRS-173**: The software shall isolate non-UTF-8 or platform-specific string conversion in boundary adapters. - -- Status: Baseline -- Type: Software Interface Requirement -- Stage: P1 / Beta -- Allocated to: Protocol Adapter, Platform Adapter, Bridge -- Source SysDes: SysDes-122 -- Verification method: Inspection, Integration Test - -**SRS-174**: The software shall not corrupt multilingual Unicode content in logs or diagnostic exports unless redaction intentionally removes sensitive content. - -- Status: Baseline -- Type: Software Data Integrity Requirement -- Stage: P0 / MVP -- Allocated to: Diagnostics, Storage -- Source SysDes: SysDes-121, SysDes-124 -- Verification method: Test, Audit - -**SRS-175**: The software shall support bidirectional text display where the Flutter platform text engine supports it. - -- Status: Baseline -- Type: Software Internationalization Requirement -- Stage: P2 / Production -- Allocated to: Flutter UI -- Source SysDes: SysDes-123 -- Verification method: Localization Test - -**SRS-176**: The software shall use locale-aware formatting for user-visible dates, times, numbers, and diagnostic timestamps. - -- Status: Baseline -- Type: Software Internationalization Requirement -- Stage: P1 / Beta -- Allocated to: Localization Service, Diagnostics UI -- Source SysDes: SysDes-123, SysDes-124 -- Verification method: Localization Test - -**SRS-177**: The software shall keep diagnostic event keys, codes, and machine-readable fields language-neutral. - -- Status: Baseline -- Type: Software Diagnostics Requirement -- Stage: P1 / Beta -- Allocated to: Diagnostics -- Source SysDes: SysDes-124 -- Verification method: Inspection, Test - -**SRS-178**: The software shall allow user-facing diagnostic descriptions to be localized independently of machine-readable diagnostic fields. - -- Status: Baseline -- Type: Software Diagnostics Requirement -- Stage: P1 / Beta -- Allocated to: Diagnostics, Localization Service -- Source SysDes: SysDes-124 -- Verification method: Inspection, Localization Test - -**SRS-179**: The software shall maintain UI/UX guideline, design token, component catalog, adaptive layout, and platform behavior documents as downstream design baselines. - -- Status: Baseline -- Type: Software Documentation Requirement -- Stage: P1 / Beta -- Allocated to: UX, Software Engineering -- Source SysDes: SysDes-125 -- Verification method: Review - -**SRS-180**: The software requirements baseline shall derive requirements only from `SysDes-XXX` sources. - -- Status: Baseline -- Type: Traceability Requirement -- Stage: P0 / MVP -- Allocated to: Software Engineering -- Source SysDes: SysDes-126, SysDes-127 -- Verification method: Inspection - -**SRS-181**: The SRS shall not use direct upstream system-requirement source fields or direct system-requirement trace links. - -- Status: Baseline -- Type: Traceability Requirement -- Stage: P0 / MVP -- Allocated to: Software Engineering -- Source SysDes: SysDes-127 -- Verification method: Inspection - -**SRS-182**: The software architecture shall derive architecture items only from `SRS-XXX` sources. - -- Status: Baseline -- Type: Traceability Requirement -- Stage: P0 / MVP -- Allocated to: Software Architecture -- Source SysDes: SysDes-128 -- Verification method: Inspection - -**SRS-183**: The software detailed design shall derive detailed design items only from `SAD-XXX` sources. - -- Status: Baseline -- Type: Traceability Requirement -- Stage: P0 / MVP -- Allocated to: Software Design -- Source SysDes: SysDes-129 -- Verification method: Inspection - -**SRS-184**: Theme, localization, and initial platform adaptation shall be initialized before feature screens render user-visible content. - -- Status: Baseline -- Type: Software Dynamic Behavior Requirement -- Stage: P0 / MVP -- Allocated to: Flutter App Shell, Design System, Localization Service, Platform Adapter -- Source SysDes: SysDes-132 -- Verification method: Integration Test - -## 14. Updated SRS to SysDes Coverage Statement - -| SysDes Range | SRS Coverage | -|---|---| -| SysDes-001 through SysDes-110 | Covered by inherited SRS baseline `SRS-001` through `SRS-143` | -| SysDes-111 through SysDes-132 | Covered by `SRS-144` through `SRS-184` | - -## 15. Change History - -| Version | Date | Description | -|---|---|---| -| 0.5.0 | 2026-05-14 | Added Material 3, design system, adaptive layout, accessibility, platform behavior, localization, Unicode, diagnostics localization, and strict downstream traceability software requirements. | - ---- - -## 16. Platform Baseline and Product Decision Software Requirements - -**SRS-185**: The software shall define iOS 13 as the minimum iOS runtime deployment baseline unless approved platform constraints raise the minimum version. - -- Status: Baseline Candidate -- Type: Software Platform Requirement -- Stage: P0 / MVP -- Allocated to: iOS Build Configuration, Platform Adapter -- Source SysDes: SysDes-133 -- Verification method: Platform Test, Release Inspection - -**SRS-186**: The iOS/iPadOS release build process shall require Xcode 26 or later and the iOS 26 / iPadOS 26 SDK or later for App Store Connect upload on or after 2026-04-28, unless Apple publishes a newer applicable upload requirement before upload. - -- Status: Baseline Candidate -- Type: Software Release Requirement -- Stage: P0 / MVP -- Allocated to: iOS Build Configuration, Release Pipeline -- Source SysDes: SysDes-134 -- Verification method: Release Inspection - -**SRS-187**: The software shall define Android API 28 (Android 9.0) as the minimum Android runtime baseline, per DEC-004 (Accepted 2026-05-14, which raised the original API 24 recommendation to API 28). The minimum may be raised further only if Flutter, plugin, audio, or platform constraints require it; it shall not be lowered without a superseding accepted decision. - -- Status: Baseline Candidate -- Type: Software Platform Requirement -- Stage: P0 / MVP -- Allocated to: Android Build Configuration, Platform Adapter -- Source SysDes: SysDes-135 -- Verification method: Platform Test, Release Inspection -- Change record: 0.9.6 (2026-05-17) updated minimum Android API from 24 to 28 to align with DEC-004 and the reconciled SysRS-288 wording. ID preserved. - -**SRS-188**: The Android release build process shall target the Android API level required by Google Play on the upload date. - -- Status: Baseline Candidate -- Type: Software Release Requirement -- Stage: P0 / MVP -- Allocated to: Android Build Configuration, Release Pipeline -- Source SysDes: SysDes-135 -- Verification method: Release Inspection - -**SRS-189**: The software shall permit only one active server connection per client instance in MVP. - -- Status: Baseline Candidate -- Type: Software Functional Requirement -- Stage: P0 / MVP -- Allocated to: Rust Core, Flutter UI, Protocol Adapter, State Sync -- Source SysDes: SysDes-136 -- Verification method: System Test - -**SRS-190**: The software shall enable AEC, AGC, Noise Suppression, and High-Pass Filter by default where supported and stable, with user or platform control to disable supported processing where applicable. - -- Status: Baseline Candidate -- Type: Software Audio Requirement -- Stage: P0 / MVP -- Allocated to: Audio Subsystem, Settings UI, Platform Audio -- Source SysDes: SysDes-137 -- Verification method: Audio Test - -**SRS-191**: The software shall use platform-native audio processing first for MVP where available and stable, and shall isolate any Rust/WebRTC-style fallback behind the audio subsystem boundary. - -- Status: Baseline Candidate -- Type: Software Architecture Constraint -- Stage: P1 / Beta -- Allocated to: Audio Subsystem, Platform Audio Adapter -- Source SysDes: SysDes-138 -- Verification method: Architecture Review, Audio Test - -**SRS-192**: The software shall use SQLite or an equivalent embedded local database for non-secret local state and platform secure storage for secrets. - -- Status: Baseline Candidate -- Type: Software Storage Requirement -- Stage: P0 / MVP -- Allocated to: Storage, Platform Secure Storage -- Source SysDes: SysDes-139 -- Verification method: Storage Test, Security Audit - -**SRS-193**: The software shall use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs. - -- Status: Baseline Candidate -- Type: Software Interface Requirement -- Stage: P0 / MVP -- Allocated to: Bridge, Flutter State, Rust Core -- Source SysDes: SysDes-140 -- Verification method: Integration Test, Architecture Review - -**SRS-194**: The software shall not perform automatic diagnostic upload, automatic telemetry upload, or automatic crash reporting in MVP unless a later approved decision updates privacy, security, legal, release, and verification baselines. - -- Status: Baseline Candidate -- Type: Software Privacy Requirement -- Stage: P0 / MVP -- Allocated to: Diagnostics, Privacy, Release Pipeline -- Source SysDes: SysDes-141 -- Verification method: Privacy Review, Security Audit - -**SRS-195**: The software shall expose a `DesktopPttBackend` trait owned by the audio subsystem, with one implementation per supported desktop platform (Windows, macOS, Linux/GNOME-Wayland) and a `FocusedPttBackend` implementation used as the universal terminal fallback. The selected backend shall be discoverable at runtime and shall report its identifier through the diagnostics sanitizer. - -- Status: Baseline Candidate -- Type: Software Interface Requirement -- Stage: P0 / MVP -- Allocated to: Audio, Platform Input -- Source SysDes: SysDes-142, SysDes-145 -- Verification method: Architecture Review, Unit Test - -**SRS-196**: The software shall publish a `PttCapabilityLevel` enum value (`L0` Focused, `L1` Global-shortcut-activation, `L2` Global-hold-to-talk, `L3` Global-with-mouse-buttons, `L4` Device-aware) from the active backend, and the value shall match the actual runtime capability rather than the platform's theoretical maximum. - -- Status: Baseline Candidate -- Type: Software Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio, Rust Core -- Source SysDes: SysDes-143 -- Verification method: Unit Test, Integration Test - -**SRS-197**: The Windows desktop backend shall attempt Raw Input first; if Raw Input is unavailable or initialisation fails, it shall attempt a low-level keyboard hook; if that also fails it shall return `PttCapabilityLevel::L0` and engage Focused PTT. The selected sub-strategy shall be recorded as the backend identifier for diagnostics and release verification. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Windows) -- Source SysDes: SysDes-145 -- Verification method: Platform Test (Windows), Unit Test - -**SRS-198**: The macOS desktop backend shall query the operating-system Input Monitoring / Accessibility permission state, return `PttCapabilityLevel::L0` while the permission is undecided or denied, and upgrade to the appropriate Global level only after the user grants the required permission. The user shall be able to dismiss the permission prompt and continue using Focused PTT without functional regression. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (macOS) -- Source SysDes: SysDes-145 -- Verification method: Platform Test (macOS), User Acceptance Test - -**SRS-199**: The Linux desktop backend shall probe the active display server and compositor at runtime. On GNOME-on-Wayland (the officially-tested target per DEC-026), the backend shall use the freedesktop GlobalShortcuts portal. On any other Linux environment the backend shall return `PttCapabilityLevel::L0` and engage Focused PTT. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Linux) -- Source SysDes: SysDes-145 -- Verification method: Platform Test (Linux, GNOME Wayland), Unit Test - -**SRS-200**: The software shall support mouse side buttons (typically labelled Mouse4 / Mouse5 or "back" / "forward") as bindable inputs for Global PTT on the Windows and macOS backends per DEC-027. The Linux GlobalShortcuts portal binding shall accept whatever input classes the portal exposes for the current session; missing mouse-button support shall not block release. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Windows/macOS/Linux) -- Source SysDes: SysDes-142, SysDes-145 -- Verification method: Platform Test, User Acceptance Test - -**SRS-201**: The audio engine shall expose `capture_active` and `transmit_active` as independent atomic states. `capture_active` shall reflect the input-stream lifecycle and the platform input-permission state; `transmit_active` shall reflect the PTT subsystem's decision and shall be the only gate on outbound Opus frame emission. - -- Status: Baseline Candidate -- Type: Software Interface Requirement -- Stage: P0 / MVP -- Allocated to: Audio -- Source SysDes: SysDes-144 -- Verification method: Unit Test, Integration Test - -**SRS-202**: The diagnostics subsystem shall reject any log record carrying a raw key code, scan code, virtual-key value, or key-press timing sequence. The diagnostic export shall include the active `PttCapabilityLevel`, the active backend identifier, and the bound input class (for example "keyboard", "mouse-side-button") but shall never include the specific key value of any user binding. - -- Status: Baseline Candidate -- Type: Software Privacy Requirement -- Stage: P0 / MVP -- Allocated to: Diagnostics, Audio -- Source SysDes: SysDes-146 -- Verification method: Privacy Review, Unit Test, Diagnostic Inspection - -**SRS-203**: The software shall implement a missed-key-up watchdog per DEC-028: if `transmit_active` has been true for longer than a configured upper bound without a corresponding release event (for example because the OS suppressed the key-up while the application was minimised), the watchdog shall force `transmit_active` to false and emit a sanitised diagnostic record naming only the capability level and backend identifier. - -- Status: Baseline Candidate -- Type: Software Safety Requirement -- Stage: P0 / MVP -- Allocated to: Audio -- Source SysDes: SysDes-142, SysDes-144 -- Verification method: Unit Test, Integration Test - -**SRS-204**: The audio engine shall open the input and output streams on the user's first voice-channel join of the session and shall close them on the last voice-channel leave. The software shall expose no `start_audio` or equivalent manual-start operation at the bridge surface and shall expose no manual-start affordance in the UI; the bridge shall instead expose `voice_join(channel_id)` and `voice_leave()` operations and the audio engine shall initialise implicitly on the first `voice_join`. Output-stream opening shall not depend on the microphone-permission grant state, so listen-only is a first-class flow. - -- Status: Baseline Candidate -- Type: Software Lifecycle Requirement -- Stage: P0 / MVP -- Allocated to: Audio, Bridge, Flutter UI -- Source SysDes: SysDes-150 -- Verification method: Integration Test, UI Review - -**SRS-205**: The software shall represent the user's voice transmit mode as a `TransmitMode` enum with variants `Ptt`, `Continuous`, and `VoiceActivity` (the last reserved with no v1 implementation per DEC-030). The setting shall be persisted per identity via the identity store. The default value for a fresh install shall be `Ptt`. The UI shall render `VoiceActivity` as a disabled "coming soon" option until an implementation is allocated in a later baseline. - -- Status: Baseline Candidate -- Type: Software Interface Requirement -- Stage: P0 / MVP -- Allocated to: Audio, Bridge, Flutter UI -- Source SysDes: SysDes-149 -- Verification method: Unit Test, UI Review - -**SRS-206**: The software shall expose a `release_tail_ms` configuration value (default 200 ms, validated range 0 through 500 ms inclusive) and shall delay the `true → false` transition of `transmit_active` by `release_tail_ms` after the PTT backend reports key-up. Where the user re-presses the bound input within the tail window, the pending close timer shall be cancelled and `transmit_active` shall remain true. The release tail shall not affect `capture_active`. - -- Status: Baseline Candidate -- Type: Software Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio -- Source SysDes: SysDes-151 -- Verification method: Unit Test, Integration Test - -**SRS-207**: The software shall expose a hard-mute toggle in the Voice Bar UI. While hard-mute is engaged, `transmit_active` shall be forced false regardless of the active transmit mode, the PTT key state, or any other internal signal. Hard-mute state shall be persisted in-session only and shall reset to off when the user joins a new voice channel. - -- Status: Baseline Candidate -- Type: Software Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio, Flutter UI -- Source SysDes: SysDes-150 -- Verification method: Functional Test, UI Review - -**SRS-208**: The Chanora Android client shall engage the Android in-call audio mode (for example via `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mechanism) no later than the moment a voice session becomes connected, so that microphone gain, output routing, echo handling, and Bluetooth SCO behaviour follow Android's voice-communication path rather than the media path. The client shall release the in-call mode (restoring the prior audio mode) when the last active voice session ends. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Android), Platform Adapter (Android) -- Source SysDes: SysDes-152 (Android in-call audio mode subsystem allocation, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Audio Test -- Acceptance criteria: On Android, audio-mode transitions to in-communication on first voice-session connect and reverts on last voice-session disconnect; behaviour is observable via platform audio diagnostics and produces voice-path routing for SCO/built-in mic. -- Analysis: Feasible via the existing Platform Adapter (Android) boundary and JNI call into `AudioManager`. Verification intent (SWE.6): demonstrate audio-mode entry/exit transitions are bound to voice session lifecycle, not to UI screen lifecycle. -- Unresolved assumptions: None at SRS layer. Upstream SysDes derivation now anchored at SysDes-152 (with SysDes-135 retained as platform-baseline context). - -**SRS-209**: The Chanora Android client shall request the runtime microphone permission (`RECORD_AUDIO`) at or before voice session activation, and shall not begin microphone capture without that permission having been granted. If the permission is denied, revoked, or not yet decided, the client shall fail safe to listen-only operation (output stream remains available consistent with SRS-204) and shall surface a user-visible path to grant the permission before retrying transmit. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement / Privacy -- Stage: P0 / MVP -- Allocated to: Platform Adapter (Android), Audio, Flutter UI -- Source SysDes: SysDes-153 (Android RECORD_AUDIO runtime permission acquisition flow, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, UI Test, Privacy Review -- Acceptance criteria: Permission prompt occurs no later than the user's first transmit attempt within a voice session; denial keeps the session alive in listen-only mode (`capture_active = false`, `transmit_active = false`, output stream open per SRS-204); UI exposes a non-blocking path to re-request or open system settings to grant the permission. -- Analysis: Feasible via existing platform permission adapter (SRS-108) and the audio engine's split `capture_active` / `transmit_active` states (SRS-201). Verification intent (SWE.6): demonstrate that listen-only is a first-class flow on denial and that no microphone capture is started prior to grant. -- Unresolved assumptions: None at SRS layer. Upstream SysDes derivation now anchored at SysDes-153 (with SysDes-135 retained as platform-baseline context); reuses the general permission obligation already captured in SRS-027 / SRS-108. - -## 17. Updated SRS to SysDes Coverage Statement - -| SysDes Range | SRS Coverage | -|---|---| -| SysDes-001 through SysDes-132 | Covered by inherited SRS baseline `SRS-001` through `SRS-184` | -| SysDes-133 through SysDes-141 | Covered by `SRS-185` through `SRS-194` | -| SysDes-142 through SysDes-148 | Covered by `SRS-195` through `SRS-203` | -| SysDes-149 through SysDes-151 | Covered by `SRS-204` through `SRS-207` | - -## 18. Android Audio Backend (P0) - -This subsection groups the Android voice-audio-backend software requirements derived to support the platform-adapter decision to host Android voice capture and playback through a dedicated low-latency native audio backend (mirroring the iOS voice-processing precedent already represented in the codebase for the iOS path). These requirements close the historical gap in which the Android voice path was carried by a generic desktop-style default backend and the hardware acoustic-echo / noise-suppression / automatic-gain effects were silently not engaged. They are sourced strictly from SysDes (per the SRS layering policy) and additionally cite the upstream SysRS items they help satisfy. - -**SRS-210**: The Chanora Android voice audio path shall achieve a round-trip mouth-to-ear ("glass-to-glass") latency of at most 150 ms on Android devices that support AAudio low-latency performance mode, and at most 250 ms on Android devices that do not support low-latency performance mode. For the purpose of this requirement, an Android device is considered to "support AAudio low-latency performance mode" if and only if (a) the client requested `AAUDIO_PERFORMANCE_MODE_LOW_LATENCY` on both the input and output streams at stream-open time, and (b) the AAudio stream returned by the platform reports `getPerformanceMode() == AAUDIO_PERFORMANCE_MODE_LOW_LATENCY` after the stream is opened. Devices that downgrade the returned performance mode to `NONE` or `POWER_SAVING` fall under the 250 ms bound. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement / Performance -- Stage: P0 / MVP -- Allocated to: Audio (Android), Platform Adapter (Android) -- Source SysDes: SysDes-154 (Android voice audio backend subsystem — AAudio low-latency performance-mode path with platform-reported observability, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Audio Test, Loopback Latency Measurement -- Acceptance criteria: On at least one reference Android device that returns `AAUDIO_PERFORMANCE_MODE_LOW_LATENCY` for the opened streams, instrumented loopback latency (mouth-to-ear, full duplex through the voice engine) does not exceed 150 ms at the 95th percentile across a 60-second measurement window; on at least one reference device that does not, the same measurement does not exceed 250 ms at the 95th percentile. -- Analysis: Feasible on API 28+ (per SRS-187 / DEC-004) using AAudio low-latency streams, which is one of the platform-recommended paths called out by SysRS-055. The latency tiering reflects the well-understood split between devices that expose the fast mixer / low-latency capture path and devices that do not. Verification intent (SWE.6): demonstrate that the chosen native-audio backend on Android opens streams in low-latency mode where the device permits it, and that the measured round-trip latency falls under the tier appropriate to the reported `getPerformanceMode()`. -- Unresolved assumptions: The exact reference-device matrix (which physical handsets define the "supports low-latency" tier vs the fallback tier) should be ratified by the verification owner. The 150 / 250 ms numeric targets are derived from SysRS-055's "production audio integration" intent and are not yet stated numerically at the SysRS layer; if SysRS owners wish to ratify a numeric mouth-to-ear bound, the values here should be considered the SRS-layer derivation and would update accordingly. - -**SRS-211**: The Chanora Android voice-capture path shall request the platform "voice communication" input preset where the operating system exposes one, so that the OS-side capture chain (gain shaping, far-end suppression, microphone selection) is the voice-optimised chain rather than the music/media chain. On Android the client shall request `AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION` as the primary preset, and shall fall back to `AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE` if the primary preset is not honoured by the device. This mirrors the precedent on iOS, where the voice-capture path is hosted on the platform voice-processing audio unit (`VoiceProcessingIO`); the Android requirement is the platform-analogous obligation, not a port of iOS code. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Android), Platform Adapter (Android) -- Source SysDes: SysDes-154 (Android voice audio backend subsystem — voice-communication input preset on the capture stream, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Audio Test -- Acceptance criteria: On stream open, the Android voice-capture stream is constructed with input preset = `VOICE_COMMUNICATION`; if the device's AAudio stack reports that the preset was not honoured (or stream open fails specifically due to the preset), the client retries with `VOICE_PERFORMANCE`; the active preset is observable via audio diagnostics. The output-stream usage / content-type obligations are covered separately by SRS-213. -- Analysis: Feasible on API 28+ AAudio (covered by SRS-187). The iOS analogue (voice-processing audio unit) is already realised in the codebase, so the platform-symmetric obligation is well-founded. Verification intent (SWE.6): demonstrate that the input preset is set at stream-construction time, not after stream start, and that the fallback path is taken only on documented preset-rejection conditions. -- Unresolved assumptions: None at SRS layer. - -**SRS-212**: Where the Android device exposes the hardware voice-audio effect APIs `AcousticEchoCanceler`, `NoiseSuppressor`, and `AutomaticGainControl`, the Chanora Android client shall engage each available effect on the active microphone capture session (via the platform `audioSession`-id attachment API or the AAudio effect-attachment equivalent) at or before the moment voice capture is started. Where one or more of these hardware effects is not available on the device, the client shall fall back to the equivalent software processing already provided by the cross-platform audio engine, and shall not silently leave that processing disabled. This requirement explicitly closes the prior no-op gap in which the Android path acknowledged the request to engage hardware effects but did not in fact engage them. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Android), Platform Adapter (Android), Audio Engine -- Source SysDes: SysDes-154 (Android voice audio backend subsystem — engagement of platform hardware voice-audio effects with documented software fallback, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Audio Test -- Acceptance criteria: For each of `AcousticEchoCanceler`, `NoiseSuppressor`, `AutomaticGainControl`: on devices where `isAvailable()` is true, the effect is constructed against the capture session id, enabled before the first capture callback delivers samples, and reports `getEnabled() == true` for the duration of the capture session; on devices where the effect is not available, the audio engine's software equivalent is engaged for the same duration. The fall-back decision is recorded in sanitised audio diagnostics. -- Analysis: Feasible via the Android `android.media.audiofx` effect APIs bound to the capture session id surfaced by the native backend. Verification intent (SWE.6): demonstrate via instrumented test that, on at least one device where hardware AEC is reported available, hardware AEC is engaged; and on at least one device where it is not, the software AEC path in the cross-platform engine is engaged. The "silent no-op" prior behaviour is explicitly excluded. -- Unresolved assumptions: None at SRS layer. SRS-208 (Android in-call audio mode) remains the routing-mode obligation; this requirement is the effects-engagement obligation and is complementary, not duplicative. - -**SRS-213**: The Chanora Android voice-output stream shall declare `AAUDIO_USAGE_VOICE_COMMUNICATION` and `AAUDIO_CONTENT_TYPE_SPEECH` at stream construction so that the Android audio policy engine routes the stream under the voice-communication routing rules that engage when `MODE_IN_COMMUNICATION` is active (per SRS-208), including correct Bluetooth SCO routing, earpiece-vs-speaker selection, and ducking behaviour against media. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Android), Platform Adapter (Android) -- Source SysDes: SysDes-154 (Android voice audio backend subsystem — voice-communication usage and content-type declarations on the output stream, primary), SysDes-152 (Android in-call audio mode subsystem — output usage is the precondition for in-call-mode routing, secondary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Audio Test -- Acceptance criteria: The opened AAudio output stream reports usage = `VOICE_COMMUNICATION` and content type = `SPEECH`; with `MODE_IN_COMMUNICATION` engaged (per SRS-208), playback routes to the in-call output device (earpiece / SCO / wired headset) and does not route to the media output device. -- Analysis: Feasible on API 28+ AAudio. The combination is the platform-documented way to opt the stream into the voice routing path and is the playback-side counterpart of SRS-211's capture-side preset selection. Verification intent (SWE.6): demonstrate routing differs from a media-usage stream under `MODE_IN_COMMUNICATION`. -- Unresolved assumptions: None at SRS layer. - -**SRS-214**: The Chanora Android voice input and output streams shall request `AAUDIO_SHARING_MODE_EXCLUSIVE` on a best-effort basis at stream construction, and shall gracefully fall back to `AAUDIO_SHARING_MODE_SHARED` when the platform denies exclusive access (for example because another application holds an exclusive stream or because shared media playback is active). The fall-back shall not be reported as a fatal error to the user and shall not prevent voice session establishment; it shall be recorded in sanitised audio diagnostics so that the achieved sharing mode is observable for SRS-210 latency analysis. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Audio (Android), Platform Adapter (Android) -- Source SysDes: SysDes-154 (Android voice audio backend subsystem — best-effort exclusive sharing-mode policy with graceful shared fallback, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Audio Test -- Acceptance criteria: On stream open the client requests `EXCLUSIVE`; on devices that grant it, `getSharingMode()` reports `EXCLUSIVE`; on devices or device states that deny it, the client opens with `SHARED` instead and the voice session proceeds; the achieved sharing mode appears in sanitised audio diagnostics for both the input and the output stream. -- Analysis: Feasible on API 28+ AAudio. Exclusive mode is the documented path to the lowest-latency tier on devices that expose a fast capture/playback path; making the request best-effort avoids regressing the user's ability to join a voice session when another exclusive stream is active. Verification intent (SWE.6): demonstrate both the granted and denied paths and that neither blocks voice session establishment. -- Unresolved assumptions: None at SRS layer. - -**SRS-215**: The Chanora Android client shall maintain active microphone capture while the application is backgrounded by hosting voice transmission inside an Android foreground service whose manifest declares `foregroundServiceType="microphone"`. This formalises at the SRS layer the platform-required hosting model under which background microphone capture is permitted on Android 9+ (API 28+) and is the software-requirement counterpart of the existing foreground-service obligation captured in SRS-111. - -- Status: Baseline Candidate -- Type: Platform Behavioural Requirement -- Stage: P0 / MVP -- Allocated to: Platform Adapter (Android), Audio (Android), Android Manifest -- Source SysDes: SysDes-154 (Android voice audio backend subsystem — lifecycle binding to the Android microphone-typed foreground service for background voice capture, primary), SysDes-135 (Android platform baseline, secondary/context) -- Verification method: Android Integration Test, Manifest Review -- Acceptance criteria: With the application backgrounded and a voice session active in transmit-capable state, microphone capture continues to deliver frames to the audio engine; the hosting Android service is observable via `dumpsys activity services` (or equivalent platform diagnostics) as a foreground service of type `microphone`; the manifest declares `foregroundServiceType="microphone"` on the hosting service component. -- Analysis: Feasible on API 28+ per SRS-187 / DEC-004; the foreground-service-type attribute is the platform's documented mechanism for declaring background microphone use. Verification intent (SWE.6): demonstrate that the foreground service is started before background microphone capture begins, and that capture stops if the foreground service is not granted. -- Unresolved assumptions: None at SRS layer. SRS-111 remains the higher-level foreground-service obligation; this requirement narrows it to the microphone-typed variant required by the voice transmission path. - -## 19. Updated SRS to SysDes Coverage Statement (Android Audio Backend) - -| SysDes Range | SRS Coverage | -|---|---| -| SysDes-152 (Android in-call audio mode subsystem) | Primary anchor for `SRS-208`; additionally cited as a secondary anchor by `SRS-213` (output-stream usage/content-type is the precondition for in-call-mode routing). | -| SysDes-153 (Android RECORD_AUDIO runtime permission acquisition flow) | Primary anchor for `SRS-209`. | -| SysDes-154 (Android voice audio backend subsystem) | Primary anchor for `SRS-210` (AAudio low-latency performance-mode latency tiering), `SRS-211` (voice-communication input preset with `VOICE_PERFORMANCE` fallback), `SRS-212` (hardware AEC/NS/AGC engagement with software fallback), `SRS-213` (voice-communication output usage/content-type), `SRS-214` (best-effort exclusive sharing mode with shared fallback), and `SRS-215` (microphone-typed foreground-service-hosted background capture). | -| SysDes-135 (Android platform baseline) | Retained as the secondary/context anchor on `SRS-208` through `SRS-215` (the eight Android voice-audio SRS items conceptually rest on the Android platform baseline as their platform context, but no longer take SysDes-135 as the primary derivation). Upstream SysRS items addressed across the eight items are SysRS-055, SysRS-217, SysRS-288, SysRS-305, and SysRS-306. | - - -## 20. Realtime Audio Benchmark Infrastructure (P0) - -This section authors the software-requirements layer of the realtime-audio benchmark infrastructure derived strictly from the SysDes-156 / SysDes-157 / SysDes-158 chain (per SRS-005 strict-layered sourcing). The SysDes anchors are themselves a refinement of SysRS-307 / SysRS-308 / SysRS-309, but the SRS layer does not source upstream of SysDes by policy. - -**SRS-216**: The `chanora_audio` software shall expose its realtime capture and playback paths to benchmark instrumentation that covers the five metrics enumerated by SysDes-156: (1) heap allocation count per realtime callback after a warmup window of approximately 100 callbacks (the steady-state expectation is zero allocations on the realtime thread); (2) per-callback wall-clock duration reported at the p50, p95, and p99 percentiles, expressed as a fraction of the active cpal stream period; (3) Opus encode latency measured on the canonical 960-sample / 20 ms voice frame shape; (4) Opus decode latency measured on the same 960-sample / 20 ms frame shape; and (5) resampler throughput measured at the canonical rate pairs 44.1 → 48 kHz, 16 → 48 kHz, and 48 → 48 kHz (the last serving as a passthrough control). The instrumentation shall be authored as Rust benchmarks located in a per-crate `benches/` directory (the choice of benchmark harness crate — `criterion` or equivalent — is a downstream SDD concern and is not authored here). The instrumentation shall consume the existing realtime-path public surface (for example `CaptureState::ingest`, already public at the chanora_audio crate boundary per the Wave 4 Tier A1 work) without introducing new public seams in production code; if any additional seam is required, that decision is delegated to SAD/SDD and is not authored at the SRS layer. - -- Status: Baseline Candidate -- Type: Verification Infrastructure Requirement -- Stage: P0 / MVP -- Allocated to: `chanora_audio` crate (realtime capture and playback modules, plus a co-located `benches/` directory) -- Source SysDes: SysDes-156 (realtime-audio benchmark surface allocated to SE-13) -- Verification method: SWE.4 — automated benchmark execution against the instrumentation surface; reviewers confirm the five metric families enumerated in SysDes-156 each have at least one benchmark target. -- Acceptance criteria: A `benches/` directory exists under the `chanora_audio` crate (or the SDD-decided per-crate equivalent); the directory contains benchmark targets that exercise the realtime capture callback, the realtime playback callback, the Opus encoder on a 960-sample / 20 ms frame, the Opus decoder on a 960-sample / 20 ms frame, and the resampler at each of the three canonical rate pairs; each benchmark target reports a numeric value in the unit appropriate to its metric family (count, fraction-of-period, ns/iter, or samples/sec); the benchmarks run to completion on a Linux x86_64 host in under the wall-clock budget allowed by SysDes-157's host scope (see SRS-218). -- Analysis: Feasible. The realtime path already exposes the entry points required for benchmark instrumentation per the chanora_audio crate boundary as of Wave 4 Tier A1; no production-code seam authoring is required at the SRS layer. Verification intent (SWE.6): demonstrate that all five metric families have at least one benchmark target and that the benchmarks execute deterministically on the Linux x86_64 host enumerated by SysDes-157. -- Unresolved assumptions: The exact benchmark harness crate (`criterion` is the conventional choice on the Rust ecosystem but is not authored here) and the exact target-naming convention are SDD concerns. If the realtime path requires a new public seam to be benchmarkable at SRS granularity, that gap will be discovered by the SAD/SDD pass and routed back to a future SRS revision; this clause does not authorise such a seam in production code. - -**SRS-217**: Baseline measurements produced by the SRS-216 benchmark instrumentation shall be stored as structured JSON committed to a deterministic location inside the repository, so that the baseline becomes a reviewable, version-controlled artefact rather than an ephemeral CI side effect. Each baseline record shall contain at minimum the following fields: `metric` (string identifier matching the metric name enumerated by SysDes-156), `value` (numeric — the measured value for that metric), `unit` (string — for example `"ns/iter"`, `"samples/sec"`, `"fraction"`, or `"count"`, matching the metric family), `host_arch` (string — the Rust target triple of the measurement host, for example `"x86_64-unknown-linux-gnu"`), `toolchain` (string — the rustc version active at measurement time), `git_sha` (string — the full Git commit SHA at measurement time), and `timestamp` (string — ISO-8601 UTC). The canonical on-disk path for the baseline JSON (for example `benches/baselines/.json` as a suggestion) is delegated to SDD and is not fixed at the SRS layer; however, the path shall be deterministic (the same crate at the same commit shall write to the same file) and shall be committed to the repository on the default branch. - -- Status: Baseline Candidate -- Type: Verification Infrastructure Requirement -- Stage: P0 / MVP -- Allocated to: `chanora_audio` crate (the bench harness publishes the baseline JSON), plus the SDD-decided on-disk path under the repository root. -- Source SysDes: SysDes-156 (baseline storage as structured JSON in a deterministic repo location capturing metric value, host architecture, toolchain version, git SHA, and timestamp). -- Verification method: Review — the JSON record format is review-checkable against this clause by inspecting a sample baseline file. -- Acceptance criteria: A baseline JSON file exists at the SDD-decided deterministic path on the default branch; the file is parseable as JSON; each record carries the seven fields enumerated above; the `metric` field values match the metric names declared by SysDes-156; the `host_arch`, `toolchain`, `git_sha`, and `timestamp` fields are populated with values that correspond to the measurement host and commit; the same crate at the same commit deterministically writes to the same file path. -- Analysis: Feasible. JSON is the conventional serialization format for benchmark-baseline metadata in Rust ecosystem tooling, and the fields enumerated are the minimum needed for the SysDes-157 advisory comparison to be reproducible. Verification intent (SWE.6): inspect a sample baseline file and confirm the seven fields are populated correctly and the file is parseable. -- Unresolved assumptions: The exact on-disk path is delegated to SDD per SysDes-156. The schema may evolve (additional optional fields) without breaking this clause provided the seven enumerated fields remain present. - -**SRS-218**: A continuous-integration workflow shall execute the SRS-216 benchmark suite under the constraints authored by SysDes-157, namely: (1) the workflow shall trigger on every pull request opened against the default branch and on every merge to the default branch, and shall not trigger on tag pushes or on pushes to non-default branches; (2) the workflow shall execute on the Linux x86_64 GitHub Actions runner (`ubuntu-latest`) and shall not execute on any other host architecture (multi-host benchmarking is out of scope for this revision per SysDes-157 point 2); (3) the workflow result shall be rendered as a markdown table on the pull-request surface that compares each metric enumerated by SysDes-156 against the baseline-at-merge-base (per SRS-219), with a per-metric visual marker drawn from the set { 🟢 within tolerance, 🟡 within tolerance but trending, 🔴 outside tolerance } evaluated against the per-metric tolerance window of SysDes-158; (4) the workflow shall report a `success` status check regardless of whether any metric is flagged 🔴, so that the advisory check never blocks merge (this enforces the SysDes-157 point 4 non-blocking semantics at the SRS layer); and (5) the baseline-update operation shall be a separate, manually-invoked workflow (GitHub Actions `workflow_dispatch` or equivalent), and the PR-triggered workflow authored by this clause shall never write to the baseline JSON file authored under SRS-217. - -- Status: Baseline Candidate -- Type: Verification Infrastructure Requirement -- Stage: P0 / MVP -- Allocated to: CI tooling under `.github/workflows/` (or the SDD-decided equivalent integration point) — specifically a new advisory benchmark workflow file; the exact filename is delegated to SAD/SDD. -- Source SysDes: SysDes-157 (advisory CI integration allocated to SE-18, with the six design constraints on trigger, host, surface, non-blocking semantics, baseline source, and baseline-update isolation). -- Verification method: Demo — a synthetic pull-request run shall demonstrate the workflow firing, the markdown comparison table rendering, the status check reporting `success` even when a 🔴 marker is present, and the absence of any write to the baseline JSON file under the PR-triggered path. Human reviewers confirm in the PR. -- Acceptance criteria: A CI workflow file exists at the SDD-decided path; the file's trigger configuration matches SysDes-157 point 1 (PR-against-default plus merge-to-default, no tags, no non-default-branch pushes); the workflow's `runs-on` clause is `ubuntu-latest`; a PR run posts a markdown table that lists each SysDes-156 metric with its measured value, the baseline value at the PR's merge-base, the percentage delta, and one of the three visual markers; the workflow's status check reports `success` on every run, including runs that contain at least one 🔴 marker; a separate `workflow_dispatch` workflow file exists for the baseline-update operation, and the PR-triggered workflow does not modify the baseline JSON. -- Analysis: Feasible on GitHub Actions. The advisory-only, never-block-on-failure semantics is the active rule per SysRS-308 (inherited via SysDes-157); escalating this workflow to a hard build-failing gate would require a future SysRS authorisation and is not within the scope of SRS-218. Verification intent (SWE.6): observe a synthetic PR run end-to-end and confirm the five constraints (trigger, host, surface, non-blocking semantics, baseline-update isolation). -- Unresolved assumptions: The exact workflow filename, the exact named status-check string, and the exact markdown table layout are SAD/SDD concerns. The triggering criterion for the 🟡 "trending" state is delegated to SDD per SysDes-157's notes (this clause only requires that the marker set { 🟢, 🟡, 🔴 } is present, not how 🟡 is computed). - -**SRS-219**: The advisory comparison performed by the SRS-218 workflow shall apply the per-metric tolerance window and the comparison methodology authored by SysDes-158. The tolerance window shall be evaluated per metric as follows: (a) heap allocation count per realtime callback after warmup — tolerance is zero, i.e. any non-zero allocation count on a PR is flagged 🔴; (b) per-callback wall-clock duration at p95 — tolerance is +20% relative to the baseline (p50 and p99 are advisory data only and do not drive the 🔴 marker); (c) Opus encode latency on a 960-sample / 20 ms frame — tolerance is +15% relative to the baseline on the mean; (d) Opus decode latency on a 960-sample / 20 ms frame — tolerance is +15% relative to the baseline on the mean; (e) resampler throughput on the canonical rate pairs — tolerance is −10% relative to the baseline on samples-per-second (i.e. a throughput drop greater than 10% is flagged 🔴). The comparator on a pull-request run shall be the baseline JSON committed at the pull request's merge-base commit, **not** the baseline at the current default-branch tip; this disambiguates the comparison when a PR is rebased onto a newer default and prevents a default-branch baseline update from retroactively re-classifying an in-flight PR's regression status. - -- Status: Baseline Candidate -- Type: Verification Infrastructure Requirement -- Stage: P0 / MVP -- Allocated to: CI tooling co-located with the SRS-218 workflow (the comparison logic resides in the same SE-18 surface). -- Source SysDes: SysDes-158 (per-metric tolerance window and merge-base-snapshot comparison methodology allocated to SE-18). -- Verification method: Review — the comparison logic and the tolerance table are review-checkable against this clause; a small synthetic data set (one baseline, one PR run for each of the five metric families with values at, just inside, and just outside the tolerance window) demonstrates each marker assignment. -- Acceptance criteria: The CI tooling reads the baseline JSON at the PR's merge-base commit (verifiable by observing the SHA the tooling resolves before reading the file); the comparison applies the per-metric thresholds enumerated above (heap = zero, p95 wall-clock = +20%, Opus encode mean = +15%, Opus decode mean = +15%, resampler samples/sec = −10%); the marker assignment for a synthetic value at the threshold, just inside the threshold, and just outside the threshold matches the expected 🟢 / 🟡 (where defined by SDD) / 🔴 result; rebasing a PR onto a newer default branch re-resolves the merge-base and re-reads the baseline at the new merge-base, rather than reading the default-branch-tip baseline. -- Analysis: Feasible. The merge-base resolution is a standard `git merge-base` operation; per-metric thresholds are simple numeric comparisons. The merge-base-snapshot semantics is the SysDes-158 active rule and is preferred over default-branch-tip comparison because it makes the comparator stable across rebases. Verification intent (SWE.6): observe each of the five metric families' threshold behaviour on synthetic data and confirm the merge-base SHA is the comparator anchor. -- Unresolved assumptions: None at the SRS layer. The exact representation of the 🟡 "trending" intermediate state (for example a sub-threshold band, or a multi-run trend) is delegated to SDD per SysDes-157's notes, but does not alter the 🔴 threshold rules authored here. - -### 20.1 SRS-216..219 to SysDes Coverage - -| SysDes anchor | SRS coverage | -|---|---| -| SysDes-156 (realtime-audio benchmark surface, SE-13; five metric families; baseline JSON in deterministic repo location with metric/value/unit/host_arch/toolchain/git_sha/timestamp fields) | Primary anchor for `SRS-216` (benchmark instrumentation covering the five metric families) and `SRS-217` (baseline JSON storage format). | -| SysDes-157 (advisory CI integration, SE-18; trigger on PR + merge-to-default; host = `ubuntu-latest`; markdown table with 🟢/🟡/🔴 markers; never-fail status check; baseline-update isolation via `workflow_dispatch`) | Primary anchor for `SRS-218` (CI advisory-reporting workflow). | -| SysDes-158 (per-metric tolerance window and merge-base-snapshot comparison methodology, SE-18; heap = 0, p95 wall-clock = +20%, Opus encode/decode mean = +15%, resampler samples/sec = −10%) | Primary anchor for `SRS-219` (tolerance window and comparison methodology binding). | - -### 20.2 Intentionally Out of Scope at This Revision - -Consistent with the SysRS-307 / SysRS-308 / SysRS-309 deferrals propagated through SysDes-156 / SysDes-157 / SysDes-158, this revision intentionally does **not** author the following SRS clauses, and they shall not be inferred from SRS-216 through SRS-219: - -- **Dimension 3 production telemetry export** — the runtime-export-of-metrics-from-shipped-clients dimension is deferred to P1 by SysRS, is not authorised by any SysDes-156/157/158 clause, and remains subject to SysRS-295's no-off-device-transmission rule. No SRS clause in this revision authorises such export. -- **Build-failing hard CI gate** — SysRS-308's advisory-only contract is the active rule, enforced at the SysDes layer by SysDes-157's non-blocking semantics. SRS-218 explicitly inherits that contract by requiring the status check to report `success` on every run. Escalation to a hard gate requires a future SysRS authorisation. -- **Multi-host benchmarking** — SysDes-157 point 2 fixes the host to Linux x86_64 (`ubuntu-latest`). ARM Android, macOS Apple Silicon, Windows x86_64, and any other host runner are explicitly deferred. SRS-218 inherits this constraint. - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate effective date and preserved SRS direct-source rule through SysDes only. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT software requirements SRS-195 through SRS-203: `DesktopPttBackend` trait + per-platform implementations, `PttCapabilityLevel` enum, Windows Raw-Input ladder, macOS permission-aware backend, Linux GNOME-Wayland GlobalShortcuts portal backend, mouse-side-button support per DEC-027, `capture_active` / `transmit_active` split, sanitised diagnostics, missed-key-up watchdog per DEC-028. Sourcing remains strict (`SRS -> SysDes` only). | - - -## Baseline Candidate 0.9.5 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added v1 audio + PTT lifecycle software requirements SRS-204 through SRS-207 sourced from SysDes-149..151: bridge surface drops `start_audio` / `stop_audio` and adds `voice_join(channel_id)` / `voice_leave()`, audio engine opens streams on first voice-channel join and closes on last leave with output independent of mic-permission state, `TransmitMode` enum (`Ptt` default, `Continuous`, reserved `VoiceActivity` per DEC-030) persisted per identity, `release_tail_ms` (default 200, range 0–500) gate on the `true → false` transition of `transmit_active` with re-press cancellation, Voice Bar hard-mute override of `transmit_active`. Strict layered sourcing preserved (`SRS -> SysDes` only). | - - -## Baseline Candidate 0.9.6 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.9 | 2026-05-18 | Added realtime-audio benchmark-infrastructure software requirements SRS-216 through SRS-219 in a new section 20, sourced strictly from SysDes-156 / SysDes-157 / SysDes-158 (the Option B benchmark-infrastructure scope decision propagated through the Wave 1.5 benchmark chain). SRS-216 allocates benchmark instrumentation covering the five SysDes-156 metric families (heap allocation count per realtime callback after ~100-callback warmup, per-callback wall-clock at p50/p95/p99 as a fraction of cpal stream period, Opus encode latency on 960-sample/20 ms frame, Opus decode latency on the same shape, and resampler throughput at 44.1→48 / 16→48 / 48→48 kHz) to the `chanora_audio` crate's `benches/` directory; no new public seam in production code is authored. SRS-217 authors the baseline-JSON storage format (`metric`, `value`, `unit`, `host_arch`, `toolchain`, `git_sha`, `timestamp` fields at minimum) committed to a deterministic SDD-decided repo path. SRS-218 authors the CI advisory-reporting workflow under SysDes-157 (trigger on PR-against-default + merge-to-default, host = `ubuntu-latest`, markdown table with 🟢/🟡/🔴 markers, never-fail status check, baseline-update isolated to a separate `workflow_dispatch` workflow). SRS-219 binds the per-metric tolerance window of SysDes-158 (heap = 0, p95 wall-clock = +20%, Opus encode/decode mean = +15%, resampler samples/sec = −10%) and the merge-base-snapshot comparison methodology. Intentionally NOT authored consistent with the SysRS deferral chain: (a) Dimension 3 production telemetry export (deferred to P1; SysRS-295 still applies); (b) build-failing hard CI gate (SysRS-308 advisory-only rule active, SysDes-157 non-blocking semantics inherited); (c) multi-host benchmarking (SysDes-157 Linux x86_64 host-scope clause active). Strict layered sourcing preserved (`SRS -> SysDes` only per SRS-005); SysRS-307/308/309 are not cited as direct SRS sources. | -| 0.9.8 | 2026-05-18 | Retargeted the `Source SysDes` field on SRS-208, SRS-209, and SRS-210 through SRS-215 from the generic SysDes-135 (Android platform baseline) to the dedicated Android voice-audio derivation items authored by the system-architecture owner: SysDes-152 (Android in-call audio mode subsystem) is now the primary anchor for SRS-208; SysDes-153 (Android RECORD_AUDIO runtime permission acquisition flow as Permission/Voice subsystem partitioning) is now the primary anchor for SRS-209; SysDes-154 (Android voice audio backend subsystem — AAudio low-latency path, voice-communication usage/preset, hardware-effects engagement with software fallback, sharing-mode policy, FGS-hosted background mic lifecycle) is now the primary anchor for SRS-210 (latency), SRS-211 (input preset), SRS-212 (hardware AEC/NS/AGC), SRS-213 (output usage/content-type), SRS-214 (sharing mode), and SRS-215 (microphone-typed foreground service). SRS-213 additionally retains SysDes-152 as a secondary anchor because the output-stream usage is the precondition for in-call-mode routing. SysDes-135 is retained on all eight items as the secondary/context anchor (platform-baseline relationship). Section 19 coverage table updated. Strict layered sourcing preserved (`SRS -> SysDes` only). No technical or behavioural content of SRS-208 through SRS-215 was modified; this is a surgical retargeting of the `Source SysDes` field only. | -| 0.9.7 | 2026-05-18 | Added Android Audio Backend (P0) section 18 hosting SRS-210 through SRS-215 to support the platform-adapter decision to host Android voice capture/playback on a dedicated low-latency native audio backend (mirroring the iOS voice-processing-audio-unit precedent). SRS-210 sets numeric mouth-to-ear latency targets (≤150 ms on devices that return `AAUDIO_PERFORMANCE_MODE_LOW_LATENCY`, ≤250 ms otherwise). SRS-211 mandates `AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION` with `VOICE_PERFORMANCE` fallback. SRS-212 mandates engagement of hardware `AcousticEchoCanceler` / `NoiseSuppressor` / `AutomaticGainControl` on the capture session id with software-AEC fallback (closes the prior silent no-op). SRS-213 mandates `AAUDIO_USAGE_VOICE_COMMUNICATION` + `AAUDIO_CONTENT_TYPE_SPEECH` on output. SRS-214 mandates best-effort `AAUDIO_SHARING_MODE_EXCLUSIVE` with `SHARED` fallback. SRS-215 mandates microphone-typed foreground-service hosting (`foregroundServiceType="microphone"`) for backgrounded voice transmission. Added section 19 coverage statement. Strict SRS→SysDes sourcing preserved: `Source SysDes` traces via SysDes-135 (Android platform baseline) pending a SysDes revision that introduces a dedicated derivation item for the Android voice audio backend; SysRS-055, SysRS-217, SysRS-288, SysRS-305 are cited as the upstream SysRS obligations addressed. | -| 0.9.6 | 2026-05-17 | Propagated SysRS reconciliation (Wave 1.5) into SRS for P0 Android. SRS-187 minimum Android API raised from 24 to 28 per DEC-004 (ID preserved, change record added). SRS-188 verified consistent with SysRS-289 (Google Play upload-date target SDK); no rewrite required. SRS-111 (Android foreground service for active voice session), SRS-119 (Android AAB release build), and SRS-163 (Android back-navigation intent) reviewed and left unchanged — text remains unambiguous and P0/P1 scope is intact. Added SRS-208 (Android in-call audio mode engaged on voice-session connect, released on last disconnect — addresses SysRS-305) and SRS-209 (explicit `RECORD_AUDIO` runtime permission acquisition at or before voice-session activation, fail-safe to listen-only on denial — addresses SysRS-306). Strict layered sourcing preserved (`SRS -> SysDes` only); `Source SysDes` for SRS-208/209 traces via SysDes-135 pending a SysDes revision that introduces dedicated derivation items for SysRS-305/306. | diff --git a/docs/requirements/sysrs.md b/docs/requirements/sysrs.md deleted file mode 100644 index 7fcd503..0000000 --- a/docs/requirements/sysrs.md +++ /dev/null @@ -1,2007 +0,0 @@ -# Chanora SysRS — System Requirements Specification - -**Product name:** Chanora -**Document type:** SysRS / System Requirements Specification -**Version:** 0.9.11 -**Status:** Baseline Candidate -**Product category:** Cross-platform voice client application -**Architecture:** Flutter + Rust Core -**Protocol library:** `tsclientlib` -**Target client platforms:** Windows, macOS, Linux, iOS, Android -**Source material:** Initial Chanora application-system requirements draft -**Supersedes:** Earlier mixed SYS/SRS draft - -**Repo path:** `docs/requirements/sysrs.md` --- - -## 1. Document Control - -### 1.1 Purpose - -This document is the **System Requirements Specification (SysRS)** for the **Chanora application system**. - -Chanora is an **application**, not an operating system. In this document, the word **system** means the complete application system and its runtime environment: - -- The Chanora client application -- The Flutter user interface -- The Rust Core -- The `tsclientlib` protocol adapter -- Platform adapters -- Local and secure storage -- Audio input/output devices used by the application -- Operating system services used by the application -- Network connectivity required by the application -- External TeamSpeak 3-compatible servers used by the application -- Deployment, diagnostics, and support processes - -The SysRS covers the whole environment required for the application to run correctly. It does not claim that Chanora is an operating system. - ---- - -### 1.2 SysRS vs Software SRS - -A software-only SRS would focus mainly on the application code. - -This SysRS includes both application requirements and runtime environment requirements, including: - -- Client device requirements -- Operating system service requirements -- Audio hardware requirements -- Network requirements -- External compatible server requirements -- Deployment requirements -- Security and privacy requirements -- Diagnostics and support requirements - ---- - -### 1.3 Requirement ID Convention - -Every normative requirement uses this format: - -```text -SysRS-XXX -``` - -Where `XXX` is a three-digit sequential number. - -Requirement keywords: - -| Keyword | Meaning | -|---|---| -| shall | Mandatory | -| should | Strongly recommended | -| may | Optional | -| shall not | Prohibited | - -Priority values: - -| Priority | Meaning | -|---|---| -| P0 | Required for MVP | -| P1 | Required for Beta | -| P2 | Required for Production | -| P3 | Future or optional | - -Verification methods: - -| Method | Meaning | -|---|---| -| Review | Verified by reviewing documentation, requirements, or design | -| Inspection | Verified by inspecting code, configuration, packaging, or environment setup | -| Test | Verified by automated or manual test | -| Demo | Verified through a working demonstration | -| Audit | Verified through security, privacy, legal, or compliance review | - ---- - -### 1.4 Input Reference Documents - -| Document | Description | -|---|---| -| Initial Chanora application-system requirements draft | Source material used to prepare this SysRS | - -### 1.5 Downstream Lifecycle Documents - -The downstream engineering documentation sequence shall be: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -> Verification -``` - -This SysRS is the system-level requirements baseline. Downstream documents shall be derived from this SysRS and shall not override it unless the SysRS is formally revised. - -| Order | Document | Purpose | -|---:|---|---| -| 1 | SysRS — System Requirements Specification | Defines whole application-system requirements, including client application behavior, runtime environment, devices, networks, external compatible servers, security, deployment, diagnostics, and operational constraints. | -| 2 | SysDes — System Design Specification | Defines system-level design and allocation of SysRS requirements to system elements such as Flutter UI, Rust Core, protocol adapter, audio subsystem, platform adapters, storage, diagnostics, external servers, and deployment environment. | -| 3 | SRS — Software Requirements Specification | Defines software-only requirements for the Chanora software components derived from the SysRS and SysDes. | -| 4 | SAD — Software Architecture Description | Defines software architecture views, major software components, interfaces, runtime flows, dependency rules, and architectural decisions. | -| 5 | SDD — Software Detailed Design | Defines detailed module design, APIs, data structures, state machines, database schemas, DTOs, bridge contracts, and implementation-level design details. | -| 6 | Verification | Defines verification plans, test cases, acceptance criteria, traceability matrices, platform compatibility tests, security checks, audio validation, and release validation. | - -Potential downstream file names: - -| Document | Suggested file | -|---|---| -| SysDes | `docs/chanora_SysDes.md` | -| SRS | `docs/chanora_SRS.md` | -| SAD | `docs/chanora_SAD.md` | -| SDD | `docs/chanora_SDD.md` | -| Verification | `docs/chanora_Verification.md` | - ---- - -## 2. System Overview - -### 2.1 Application Context - -```text -┌─────────────────────────────────────────────────────────────────────────────┐ -│ User Runtime Environment │ -│ │ -│ ┌────────────────────┐ ┌─────────────────────────────────────────┐ │ -│ │ Audio Hardware │<----->│ Chanora Client Application │ │ -│ │ Mic / Headset │ │ │ │ -│ │ Speakers / BT │ │ Flutter UI │ │ -│ └────────────────────┘ │ Flutter State Layer │ │ -│ │ Bridge Layer │ │ -│ ┌────────────────────┐ │ Rust Core │ │ -│ │ OS Services │<----->│ tsclientlib Protocol Adapter │ │ -│ │ Permissions │ │ Audio Processing Pipeline │ │ -│ │ Secure Storage │ │ Local Storage │ │ -│ │ Audio Session │ │ Diagnostics │ │ -│ │ Notifications │ └─────────────────────────────────────────┘ │ -│ └────────────────────┘ │ │ -│ │ Network │ -│ v │ -│ ┌─────────────────────────────────────────┐ │ -│ │ External TeamSpeak 3-compatible Server │ │ -│ │ Channels / Clients / Voice / Text │ │ -│ └─────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────────────┘ -``` - -### 2.2 System Boundary - -Inside the Chanora application system boundary: - -- Chanora client application -- Flutter UI -- Flutter state layer -- Rust Core -- Bridge layer -- `tsclientlib` adapter -- Audio processing pipeline -- Local database -- Secure storage adapter -- Diagnostics and export tools -- Platform service adapters - -Outside the Chanora application system boundary: - -- External TeamSpeak 3-compatible servers -- Server administration and server-side permissions -- Physical audio hardware -- Operating system vendor services -- App stores and package repositories -- User-managed routers, firewalls, VPNs, NAT devices, and ISPs - -### 2.3 Primary Runtime Flow - -```text -User action - -> Flutter UI - -> Bridge command - -> Rust Core - -> tsclientlib protocol adapter - -> External compatible voice server - -> Protocol event - -> Rust Core state reducer - -> Bridge event stream - -> Flutter UI update -``` - -### 2.4 Primary Audio Flow - -```text -Microphone - -> OS/platform capture - -> Audio preprocessing - -> High-Pass Filter - -> Noise Suppression - -> Echo Canceller - -> Automatic Gain Control - -> Push-to-talk / mute gate - -> Opus-compatible encoder - -> tsclientlib protocol adapter - -> External compatible server - -External compatible server - -> tsclientlib protocol adapter - -> Jitter buffer - -> Opus-compatible decoder - -> Per-user mute/volume - -> Mixer - -> OS/platform playback - -> Speaker/headphones -``` - - -## 3. Application System Scope Requirements - - -**SysRS-001**: The Chanora application shall be a cross-platform client application for channel-based voice communication. - -- Priority: P0 -- Verification: Review - -**SysRS-002**: The Chanora application shall support Windows, macOS, Linux, iOS, and Android as target client platforms. - -- Priority: P0 -- Verification: Review - -**SysRS-003**: The Chanora application shall use Flutter for the user-facing client interface. - -- Priority: P0 -- Verification: Inspection - -**SysRS-004**: The Chanora application shall use Rust Core for protocol handling, connection management, state synchronization, audio processing, storage coordination, diagnostics, and business logic. - -- Priority: P0 -- Verification: Inspection - -**SysRS-005**: The Chanora application shall use `tsclientlib` as the TeamSpeak-compatible protocol client library. - -- Priority: P0 -- Verification: Inspection - -**SysRS-006**: The Chanora application shall operate as an independent client and shall not present itself as an official TeamSpeak product. - -- Priority: P0 -- Verification: Audit - -**SysRS-007**: The Chanora application shall allow users to connect to TeamSpeak 3-compatible servers reachable from the client device network. - -- Priority: P0 -- Verification: Test - -**SysRS-008**: The Chanora application shall allow users to participate in channel-based voice communication when the external server and user permissions allow it. - -- Priority: P0 -- Verification: Test - -**SysRS-009**: The Chanora application shall allow users to send and receive supported text messages when the external server and user permissions allow it. - -- Priority: P0 -- Verification: Test - -**SysRS-010**: The Chanora application shall provide local bookmark, recent server, identity reference, UI setting, and audio setting management on the client device. - -- Priority: P0 -- Verification: Test - - -## 4. Stakeholder and User Environment Requirements - - -**SysRS-011**: The Chanora application shall support end users who manually connect to compatible voice servers. - -- Priority: P0 -- Verification: Demo - -**SysRS-012**: The Chanora application shall support regular users who rely on saved bookmarks, persistent identity, audio settings, and common voice controls. - -- Priority: P0 -- Verification: Demo - -**SysRS-013**: The Chanora application shall support testers and support operators who export diagnostics for troubleshooting. - -- Priority: P1 -- Verification: Demo - -**SysRS-014**: The SysRS shall provide requirements traceability suitable for engineering, QA, system administration, and release operations. - -- Priority: P1 -- Verification: Review - -**SysRS-015**: The SysRS shall document external environment dependencies that may need administrator configuration, including network reachability and OS-level audio permissions. - -- Priority: P1 -- Verification: Review - - -## 5. System Boundary and External Dependency Requirements - - -**SysRS-016**: The Chanora application shall treat external TeamSpeak 3-compatible servers as external systems outside Chanora control. - -- Priority: P0 -- Verification: Review - -**SysRS-017**: The Chanora application shall not require a Chanora-operated central server for MVP voice, channel, or text operation. - -- Priority: P0 -- Verification: Review - -**SysRS-018**: The Chanora application shall not host or operate TeamSpeak-compatible server functionality in the MVP. - -- Priority: P0 -- Verification: Review - -**SysRS-019**: The Chanora application shall rely on operating system services for microphone permission, secure storage, audio routing, notifications, and mobile lifecycle behavior. - -- Priority: P0 -- Verification: Review - -**SysRS-020**: The Chanora application shall treat app stores, package repositories, installers, and update services as deployment environment components. - -- Priority: P1 -- Verification: Review - -**SysRS-021**: The Chanora application shall treat physical microphones, speakers, wired headsets, USB audio devices, and Bluetooth audio devices as external hardware interfaces. - -- Priority: P0 -- Verification: Review - -**SysRS-022**: The Chanora application shall treat routers, firewalls, VPNs, NAT devices, and ISPs as external network environment components. - -- Priority: P1 -- Verification: Review - -**SysRS-023**: The Chanora application shall expose user-safe errors when external dependencies prevent successful operation. - -- Priority: P0 -- Verification: Test - - -## 6. Application Component Requirements - - -**SysRS-024**: The Chanora application shall include a Flutter UI component responsible for rendering screens, receiving user input, and presenting application state. - -- Priority: P0 -- Verification: Inspection - -**SysRS-025**: The Chanora application shall include a Flutter State Layer responsible for UI state derived from Rust Core events. - -- Priority: P0 -- Verification: Inspection - -**SysRS-026**: The Chanora application shall include a Bridge Layer responsible for commands, DTOs, asynchronous calls, and event streams between Flutter and Rust Core. - -- Priority: P0 -- Verification: Inspection - -**SysRS-027**: The Chanora application shall include a Rust Core component responsible for authoritative connection, protocol, state, audio, storage, settings, and diagnostics behavior. - -- Priority: P0 -- Verification: Inspection - -**SysRS-028**: The Chanora application shall include a protocol adapter component that isolates direct `tsclientlib` usage. - -- Priority: P0 -- Verification: Inspection - -**SysRS-029**: The Chanora application shall include a state synchronization component that implements snapshot + delta state handling. - -- Priority: P0 -- Verification: Inspection - -**SysRS-030**: The Chanora application shall include an audio subsystem component that coordinates capture, processing, encoding, decoding, jitter buffering, mixing, and playback. - -- Priority: P0 -- Verification: Inspection - -**SysRS-031**: The Chanora application shall include a local storage component for non-secret data such as bookmarks, recent servers, UI settings, and audio settings. - -- Priority: P0 -- Verification: Inspection - -**SysRS-032**: The Chanora application shall include a secure storage adapter for private identities, passwords, and future sensitive tokens. - -- Priority: P0 -- Verification: Inspection - -**SysRS-033**: The Chanora application shall include a diagnostics component for structured logging, redaction, event recording, event replay, audio diagnostics, network diagnostics, and user-initiated export. - -- Priority: P1 -- Verification: Inspection - -**SysRS-034**: The Chanora application shall include platform adapter components for desktop and mobile platform services. - -- Priority: P0 -- Verification: Inspection - - -## 7. Client Device and Hardware Environment Requirements - - -**SysRS-035**: The client device shall use a CPU architecture supported by Flutter, Rust, and the selected target platform. - -- Priority: P0 -- Verification: Inspection - -**SysRS-036**: The client device shall provide sufficient CPU capacity to run the Chanora application, Opus-compatible voice processing, and enabled audio processing features in real time. - -- Priority: P0 -- Verification: Test - -**SysRS-037**: The client device shall provide sufficient memory for the Chanora application to run without unbounded growth in logs, chat history, audio buffers, or event queues. - -- Priority: P0 -- Verification: Test - -**SysRS-038**: The client device shall provide persistent local storage for Chanora application data, settings, logs, and cached metadata. - -- Priority: P0 -- Verification: Inspection - -**SysRS-039**: The client device shall provide a microphone or supported audio input device for voice transmission. - -- Priority: P0 -- Verification: Test - -**SysRS-040**: The client device shall provide speakers, headphones, or a supported audio output device for voice playback. - -- Priority: P0 -- Verification: Test - -**SysRS-041**: The client device shall provide network connectivity to the selected compatible voice server. - -- Priority: P0 -- Verification: Test - -**SysRS-042**: The desktop client environment should be validated on devices with at least 4 GB RAM for MVP operation. - -- Priority: P1 -- Verification: Test - -**SysRS-043**: The desktop client environment should be validated with at least 500 MB free local storage for installation, settings, logs, and diagnostic bundle creation. - -- Priority: P1 -- Verification: Test - -**SysRS-044**: The client device should provide stable audio device identifiers where the target platform supports persistent device selection. - -- Priority: P1 -- Verification: Test - -**SysRS-045**: The client device should provide hardware or OS support for low-latency audio capture and playback. - -- Priority: P1 -- Verification: Test - -**SysRS-046**: The client device should provide Bluetooth audio support where the target operating system supports it. - -- Priority: P1 -- Verification: Test - -**SysRS-047**: The project shall document platform-specific hardware limitations discovered during compatibility testing. - -- Priority: P1 -- Verification: Review - - -## 8. Operating System Service Requirements - - -**SysRS-048**: The Windows runtime environment shall support native desktop window integration for the Chanora application. - -- Priority: P0 -- Verification: Test - -**SysRS-049**: The Windows runtime environment shall provide microphone capture, speaker/headphone playback, audio device selection, and secure credential storage to the Chanora application. - -- Priority: P0 -- Verification: Test - -**SysRS-050**: The macOS runtime environment shall support native desktop window integration for the Chanora application. - -- Priority: P0 -- Verification: Test - -**SysRS-051**: The macOS runtime environment shall provide microphone permission prompts, microphone capture, speaker/headphone playback, audio device selection, and Keychain access to the Chanora application. - -- Priority: P0 -- Verification: Test - -**SysRS-052**: The Linux runtime environment shall support the desktop environments targeted by the selected release package. - -- Priority: P1 -- Verification: Test - -**SysRS-053**: The Linux runtime environment shall provide microphone capture, speaker/headphone playback, audio device selection, and secure storage through Secret Service, libsecret, or equivalent where available. - -- Priority: P1 -- Verification: Test - -**SysRS-054**: The iOS runtime environment shall provide microphone permissions, foreground voice session capability, audio route change handling, audio interruption recovery, Keychain access, and AVAudioSession behavior to the Chanora application. - -- Priority: P0 -- Verification: Test - -**SysRS-055**: The Android runtime environment shall provide microphone permissions, foreground voice session capability, foreground service behavior, audio focus, Bluetooth route handling, Android Keystore access, and production audio integration through AAudio, Oboe, or equivalent. - -- Priority: P0 -- Verification: Test - -**SysRS-056**: The project shall define minimum supported operating system versions for each target platform before beta release. - -- Priority: P1 -- Verification: Review - -**SysRS-057**: The project shall document OS-level permissions required by each target platform before public release. - -- Priority: P1 -- Verification: Review - -**SysRS-058**: The Chanora application shall fail safely with a user-safe message when a required OS service is unavailable. - -- Priority: P0 -- Verification: Test - - -## 9. Audio Hardware and Audio Processing Requirements - - -**SysRS-059**: The Chanora application shall support microphone input for voice transmission. - -- Priority: P0 -- Verification: Test - -**SysRS-060**: The Chanora application shall support speaker or headphone output for voice playback. - -- Priority: P0 -- Verification: Test - -**SysRS-061**: The Chanora application shall support audio input and output device selection where the target platform exposes selectable devices. - -- Priority: P0 -- Verification: Test - -**SysRS-062**: The Chanora application shall handle audio route changes where the target platform reports them. - -- Priority: P0 -- Verification: Test - -**SysRS-063**: The Chanora application shall recover gracefully from audio device changes where possible. - -- Priority: P1 -- Verification: Test - -**SysRS-064**: The Chanora application shall support Echo Canceller for reducing playback audio leaking into microphone input. - -- Priority: P0 -- Verification: Test - -**SysRS-065**: The Chanora application shall support Automatic Gain Control for normalizing microphone input level. - -- Priority: P0 -- Verification: Test - -**SysRS-066**: The Chanora application shall support Noise Suppression for reducing stationary background noise. - -- Priority: P0 -- Verification: Test - -**SysRS-067**: The Chanora application shall support High-Pass Filter for reducing low-frequency rumble and handling noise. - -- Priority: P0 -- Verification: Test - -**SysRS-068**: The Chanora application shall support an audio processing backend abstraction so platform-native and Rust-based processing can be selected per platform. - -- Priority: P1 -- Verification: Review - -**SysRS-069**: The Chanora application shall allow Echo Canceller to use playback reference audio when the selected implementation requires it. - -- Priority: P0 -- Verification: Test - -**SysRS-070**: The Chanora application shall expose audio processing settings to Rust Core and persist them locally. - -- Priority: P0 -- Verification: Test - -**SysRS-071**: The Chanora application shall provide conservative default settings for Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter. - -- Priority: P0 -- Verification: Review - -**SysRS-072**: The Chanora application shall allow platform-specific disabling of audio processing features when a feature is unstable or incompatible with a device configuration. - -- Priority: P0 -- Verification: Test - -**SysRS-073**: The project shall provide an audio loopback test tool for development and compatibility testing. - -- Priority: P1 -- Verification: Demo - -**SysRS-074**: The project shall provide an audio processing test tool for development and compatibility testing. - -- Priority: P1 -- Verification: Demo - - -## 10. Network Environment Requirements - - -**SysRS-075**: The client network environment shall provide IP network connectivity from the client device to the selected compatible voice server. - -- Priority: P0 -- Verification: Test - -**SysRS-076**: The Chanora application shall allow the user to configure the server host or IP address. - -- Priority: P0 -- Verification: Test - -**SysRS-077**: The Chanora application shall allow the user to configure the server port. - -- Priority: P0 -- Verification: Test - -**SysRS-078**: The Chanora application should support a default TeamSpeak 3-compatible voice port when the user does not provide an explicit port. - -- Priority: P1 -- Verification: Test - -**SysRS-079**: The client network environment shall permit the protocol traffic required by `tsclientlib` and the selected compatible server. - -- Priority: P0 -- Verification: Test - -**SysRS-080**: The client network environment shall support latency suitable for real-time voice communication under expected operating conditions. - -- Priority: P0 -- Verification: Test - -**SysRS-081**: The client network environment should minimize packet loss for acceptable voice quality. - -- Priority: P1 -- Verification: Test - -**SysRS-082**: The Chanora application shall detect recoverable network failures where possible. - -- Priority: P0 -- Verification: Test - -**SysRS-083**: The Chanora application shall enter reconnect behavior after recoverable network failures. - -- Priority: P0 -- Verification: Test - -**SysRS-084**: The Chanora application shall rebuild server state from a fresh snapshot after reconnect. - -- Priority: P0 -- Verification: Test - -**SysRS-085**: The Chanora application shall not require VPN connectivity unless the target server or user environment requires it. - -- Priority: P1 -- Verification: Review - -**SysRS-086**: The Chanora application shall present network failures through user-safe error messages. - -- Priority: P0 -- Verification: Test - -**SysRS-087**: The Chanora application should include network diagnostics in user-initiated diagnostic exports. - -- Priority: P1 -- Verification: Inspection - - -## 11. External Compatible Server Requirements - - -**SysRS-088**: The external voice server shall be TeamSpeak 3-compatible for Chanora MVP operation. - -- Priority: P0 -- Verification: Test - -**SysRS-089**: The external voice server shall be reachable from the client device network. - -- Priority: P0 -- Verification: Test - -**SysRS-090**: The external voice server shall permit client connection using the identity, nickname, password, and permissions supplied by the user. - -- Priority: P0 -- Verification: Test - -**SysRS-091**: The external voice server shall expose server information required for initial synchronization. - -- Priority: P0 -- Verification: Test - -**SysRS-092**: The external voice server shall expose channel listing required for the channel tree. - -- Priority: P0 -- Verification: Test - -**SysRS-093**: The external voice server shall expose client listing required for the online client view. - -- Priority: P0 -- Verification: Test - -**SysRS-094**: The external voice server shall support channel join operations for accessible channels. - -- Priority: P0 -- Verification: Test - -**SysRS-095**: The external voice server shall emit channel movement events required for state synchronization. - -- Priority: P0 -- Verification: Test - -**SysRS-096**: The external voice server shall emit client join and leave events required for state synchronization. - -- Priority: P0 -- Verification: Test - -**SysRS-097**: The external voice server shall emit channel create, update, and delete events required for state synchronization where those events occur. - -- Priority: P0 -- Verification: Test - -**SysRS-098**: The external voice server shall support channel text message send and receive where user permissions allow. - -- Priority: P0 -- Verification: Test - -**SysRS-099**: The external voice server shall support voice packet send and receive where user permissions allow. - -- Priority: P0 -- Verification: Test - -**SysRS-100**: The external voice server shall expose disconnect behavior or connection failure signals that can be mapped by the protocol adapter. - -- Priority: P0 -- Verification: Test - -**SysRS-101**: The project shall document server-side permissions that can affect channel join, voice transmission, and text messaging. - -- Priority: P1 -- Verification: Review - - -## 12. Application Functional Requirements - - -**SysRS-102**: The Chanora application shall allow the user to manually connect to a compatible server. - -- Priority: P0 -- Verification: Demo - -**SysRS-103**: The Chanora application shall allow the user to provide hostname or IP address, port, nickname, and optional server password before connection. - -- Priority: P0 -- Verification: Demo - -**SysRS-104**: The Chanora application shall support persistent local identity for compatible server authentication. - -- Priority: P0 -- Verification: Demo - -**SysRS-105**: The Chanora application shall display connection status to the user. - -- Priority: P0 -- Verification: Demo - -**SysRS-106**: The Chanora application shall allow the user to disconnect from the active server connection. - -- Priority: P0 -- Verification: Demo - -**SysRS-107**: The Chanora application shall display the server channel tree after synchronization. - -- Priority: P0 -- Verification: Demo - -**SysRS-108**: The Chanora application shall display online clients after synchronization. - -- Priority: P0 -- Verification: Demo - -**SysRS-109**: The Chanora application shall allow the user to join an accessible voice channel. - -- Priority: P0 -- Verification: Demo - -**SysRS-110**: The Chanora application shall allow the user to send and receive channel text messages where permitted. - -- Priority: P0 -- Verification: Demo - -**SysRS-111**: The Chanora application shall capture and transmit voice where permitted. - -- Priority: P0 -- Verification: Demo - -**SysRS-112**: The Chanora application shall receive and play voice where permitted. - -- Priority: P0 -- Verification: Demo - -**SysRS-113**: The Chanora application shall provide microphone mute control. - -- Priority: P0 -- Verification: Demo - -**SysRS-114**: The Chanora application shall provide output deaf control. - -- Priority: P0 -- Verification: Demo - -**SysRS-115**: The Chanora application shall provide push-to-talk control. - -- Priority: P0 -- Verification: Demo - -**SysRS-116**: The Chanora application shall display microphone input level where available. - -- Priority: P0 -- Verification: Demo - -**SysRS-117**: The Chanora application shall display speaking indicators where available. - -- Priority: P0 -- Verification: Demo - -**SysRS-118**: The Chanora application shall allow users to save and reuse server bookmarks. - -- Priority: P0 -- Verification: Demo - -**SysRS-119**: The Chanora application shall allow users to configure audio processing features. - -- Priority: P0 -- Verification: Demo - -**SysRS-120**: The Chanora application shall allow users to export redacted diagnostics. - -- Priority: P1 -- Verification: Demo - - -## 13. Protocol Integration Requirements - - -**SysRS-121**: The Chanora application shall use `tsclientlib` inside the protocol subsystem. - -- Priority: P0 -- Verification: Inspection - -**SysRS-122**: The Chanora application shall isolate direct `tsclientlib` calls inside the `chanora_protocol` component. - -- Priority: P0 -- Verification: Inspection - -**SysRS-123**: The Chanora application shall prevent raw `tsclientlib` types from crossing into Flutter UI or Flutter State Layer. - -- Priority: P0 -- Verification: Inspection - -**SysRS-124**: The Chanora application shall convert `tsclientlib` errors into Chanora protocol errors. - -- Priority: P0 -- Verification: Test - -**SysRS-125**: The Chanora application shall convert `tsclientlib` events into internal protocol events. - -- Priority: P0 -- Verification: Test - -**SysRS-126**: The Chanora application shall support future patching, replacement, or forking of protocol implementation without changing Flutter UI contracts. - -- Priority: P1 -- Verification: Review - -**SysRS-127**: The project shall provide protocol compatibility test coverage for MVP features. - -- Priority: P1 -- Verification: Test - -**SysRS-128**: The project shall include a protocol probe tool for validating target server compatibility. - -- Priority: P0 -- Verification: Demo - - -## 14. State Synchronization Requirements - - -**SysRS-129**: The Chanora application shall maintain one authoritative connection state per active server connection. - -- Priority: P0 -- Verification: Test - -**SysRS-130**: The Chanora application shall synchronize state using a snapshot + delta model. - -- Priority: P0 -- Verification: Test - -**SysRS-131**: The Chanora application shall emit a full snapshot after initial synchronization. - -- Priority: P0 -- Verification: Test - -**SysRS-132**: The Chanora application shall emit delta events after live server-side changes. - -- Priority: P0 -- Verification: Test - -**SysRS-133**: The Chanora application shall apply protocol events through deterministic reducers. - -- Priority: P0 -- Verification: Test - -**SysRS-134**: The Chanora application shall preserve event ordering per connection. - -- Priority: P0 -- Verification: Test - -**SysRS-135**: The Chanora application shall rebuild state from a fresh snapshot after reconnect. - -- Priority: P0 -- Verification: Test - -**SysRS-136**: The Chanora application shall prevent Flutter from directly mutating server state. - -- Priority: P0 -- Verification: Inspection - -**SysRS-137**: The Chanora application shall implement the defined connection state machine from Disconnected through Connecting, Synchronizing, Connected, and Reconnecting. - -- Priority: P0 -- Verification: Test - -**SysRS-138**: The Chanora application shall not automatically reconnect after user-triggered disconnect. - -- Priority: P0 -- Verification: Test - -**SysRS-139**: The project shall include an event replay tool for development and debugging of state synchronization. - -- Priority: P1 -- Verification: Demo - - -## 15. Data and Storage Requirements - - -**SysRS-140**: The Chanora application shall store server bookmarks locally. - -- Priority: P0 -- Verification: Test - -**SysRS-141**: The Chanora application shall store recent servers locally. - -- Priority: P1 -- Verification: Test - -**SysRS-142**: The Chanora application shall store audio settings locally. - -- Priority: P0 -- Verification: Test - -**SysRS-143**: The Chanora application shall store UI settings locally. - -- Priority: P1 -- Verification: Test - -**SysRS-144**: The Chanora application shall store per-user volume preferences locally where applicable. - -- Priority: P1 -- Verification: Test - -**SysRS-145**: The Chanora application shall store muted user preferences locally where applicable. - -- Priority: P1 -- Verification: Test - -**SysRS-146**: The Chanora application shall use SQLite or an equivalent embedded database for non-secret local data. - -- Priority: P0 -- Verification: Inspection - -**SysRS-147**: The Chanora application shall use platform secure storage for sensitive data. - -- Priority: P0 -- Verification: Audit - -**SysRS-148**: The Chanora application shall store identity private keys using platform secure storage. - -- Priority: P0 -- Verification: Audit - -**SysRS-149**: The Chanora application shall store server passwords using platform secure storage. - -- Priority: P0 -- Verification: Audit - -**SysRS-150**: The Chanora application shall not store private keys in plaintext files. - -- Priority: P0 -- Verification: Audit - -**SysRS-151**: The Chanora application shall not write passwords to logs. - -- Priority: P0 -- Verification: Audit - -**SysRS-152**: The Chanora application shall redact secrets from diagnostic exports. - -- Priority: P0 -- Verification: Audit - - -## 16. Security and Privacy Requirements - - -**SysRS-153**: The Chanora application shall store sensitive data using platform secure storage. - -- Priority: P0 -- Verification: Audit - -**SysRS-154**: The Chanora application shall redact secrets from logs. - -- Priority: P0 -- Verification: Audit - -**SysRS-155**: The Chanora application shall redact secrets from diagnostic bundles. - -- Priority: P0 -- Verification: Audit - -**SysRS-156**: The Chanora application shall avoid exposing internal stack traces to normal users. - -- Priority: P0 -- Verification: Test - -**SysRS-157**: The Chanora application shall validate user input before passing it to protocol operations. - -- Priority: P0 -- Verification: Test - -**SysRS-158**: The Windows runtime environment shall support Windows Credential Manager, DPAPI, or equivalent secure credential storage for the Chanora application. - -- Priority: P1 -- Verification: Inspection - -**SysRS-159**: The macOS runtime environment shall support Keychain-based secure credential storage for the Chanora application. - -- Priority: P1 -- Verification: Inspection - -**SysRS-160**: The iOS runtime environment shall support Keychain-based secure credential storage for the Chanora application. - -- Priority: P0 -- Verification: Inspection - -**SysRS-161**: The Android runtime environment shall support Android Keystore or equivalent secure credential storage for the Chanora application. - -- Priority: P0 -- Verification: Inspection - -**SysRS-162**: The Linux runtime environment shall support Secret Service, libsecret, or equivalent secure storage where available. - -- Priority: P2 -- Verification: Inspection - -**SysRS-163**: The Chanora application shall minimize collection of personal data. - -- Priority: P0 -- Verification: Audit - -**SysRS-164**: The Chanora application shall require user action before exporting diagnostics. - -- Priority: P0 -- Verification: Test - -**SysRS-165**: The Chanora application shall explain microphone permission usage before requesting permission where platform guidelines allow. - -- Priority: P0 -- Verification: Test - -**SysRS-166**: The Chanora application shall explain notification permission usage before requesting permission where platform guidelines allow. - -- Priority: P1 -- Verification: Test - -**SysRS-167**: The Chanora application shall not automatically upload diagnostics in MVP. - -- Priority: P0 -- Verification: Audit - - -## 17. Diagnostics and Operations Requirements - - -**SysRS-168**: The Chanora application shall produce structured diagnostic logs. - -- Priority: P0 -- Verification: Inspection - -**SysRS-169**: The Chanora application shall support log redaction. - -- Priority: P0 -- Verification: Audit - -**SysRS-170**: The Chanora application shall support protocol event recording in development or diagnostics mode. - -- Priority: P1 -- Verification: Demo - -**SysRS-171**: The Chanora application shall support event replay for debugging state synchronization. - -- Priority: P1 -- Verification: Demo - -**SysRS-172**: The Chanora application shall support audio diagnostics. - -- Priority: P1 -- Verification: Demo - -**SysRS-173**: The Chanora application shall support network diagnostics. - -- Priority: P1 -- Verification: Demo - -**SysRS-174**: The Chanora application shall support user-initiated diagnostic export. - -- Priority: P1 -- Verification: Demo - -**SysRS-175**: Diagnostic export shall exclude or redact sensitive data. - -- Priority: P0 -- Verification: Audit - -**SysRS-176**: The project shall document the expected support workflow for diagnostic bundle collection. - -- Priority: P2 -- Verification: Review - -**SysRS-177**: The project shall include compatibility test tracking for supported platforms. - -- Priority: P1 -- Verification: Inspection - - -## 18. Non-Functional Requirements - - -**SysRS-178**: The Chanora application shall keep the UI responsive during connection, synchronization, and reconnect. - -- Priority: P0 -- Verification: Test - -**SysRS-179**: The Chanora application shall avoid visible UI freezes longer than 100 ms during normal operation. - -- Priority: P0 -- Verification: Test - -**SysRS-180**: The Chanora application shall minimize local audio pipeline latency. - -- Priority: P0 -- Verification: Test - -**SysRS-181**: The Chanora application should target local audio pipeline latency under 100 ms where platform conditions permit. - -- Priority: P1 -- Verification: Test - -**SysRS-182**: The Chanora application shall avoid unbounded memory growth in chat history. - -- Priority: P0 -- Verification: Test - -**SysRS-183**: The Chanora application shall avoid unbounded memory growth in logs. - -- Priority: P0 -- Verification: Test - -**SysRS-184**: The Chanora application shall avoid unbounded memory growth in audio buffers. - -- Priority: P0 -- Verification: Test - -**SysRS-185**: The Chanora application shall avoid unbounded memory growth in event queues. - -- Priority: P0 -- Verification: Test - -**SysRS-186**: The Chanora application shall perform required audio processing without sustained underruns on supported devices. - -- Priority: P0 -- Verification: Test - -**SysRS-187**: The Chanora application shall keep reconnect processing non-blocking for UI interaction. - -- Priority: P0 -- Verification: Test - -**SysRS-188**: The Chanora application shall recover from transient network loss where possible. - -- Priority: P0 -- Verification: Test - -**SysRS-189**: The Chanora application shall recover gracefully from audio device changes where possible. - -- Priority: P1 -- Verification: Test - -**SysRS-190**: The Chanora application shall isolate connection failures to the affected connection. - -- Priority: P1 -- Verification: Test - -**SysRS-191**: The Chanora application shall avoid crashing on malformed or unexpected protocol events. - -- Priority: P0 -- Verification: Test - - -## 19. Deployment and Release Environment Requirements - - -**SysRS-192**: The project shall support Windows installer packaging for the Chanora application. - -- Priority: P1 -- Verification: Demo - -**SysRS-193**: The project shall support macOS signed and notarized builds for the Chanora application. - -- Priority: P1 -- Verification: Demo - -**SysRS-194**: The project shall support Linux packaging through AppImage, Flatpak, deb, rpm, or a selected subset. - -- Priority: P1 -- Verification: Demo - -**SysRS-195**: The project shall support Android AAB release builds for the Chanora application. - -- Priority: P1 -- Verification: Demo - -**SysRS-196**: The project shall support iOS TestFlight and App Store release builds for the Chanora application. - -- Priority: P1 -- Verification: Demo - -**SysRS-197**: The project shall document platform signing, packaging, and release requirements before public release. - -- Priority: P1 -- Verification: Review - -**SysRS-198**: The project shall ensure release metadata does not imply official TeamSpeak affiliation. - -- Priority: P0 -- Verification: Audit - -**SysRS-199**: The project shall define release channels for internal, beta, and production builds before external testing. - -- Priority: P1 -- Verification: Review - - -## 20. Interface Requirements - - -**SysRS-200**: The Chanora application shall provide a user interface for manual server connection. - -- Priority: P0 -- Verification: Demo - -**SysRS-201**: The Chanora application shall provide a user interface for bookmark management. - -- Priority: P0 -- Verification: Demo - -**SysRS-202**: The Chanora application shall provide a user interface for channel tree navigation. - -- Priority: P0 -- Verification: Demo - -**SysRS-203**: The Chanora application shall provide a user interface for chat. - -- Priority: P0 -- Verification: Demo - -**SysRS-204**: The Chanora application shall provide a user interface for voice controls. - -- Priority: P0 -- Verification: Demo - -**SysRS-205**: The Chanora application shall provide a user interface for audio processing settings. - -- Priority: P0 -- Verification: Demo - -**SysRS-206**: The Chanora application shall provide a bridge interface between Flutter and Rust Core. - -- Priority: P0 -- Verification: Inspection - -**SysRS-207**: The Chanora application shall provide a protocol interface between Rust Core and `tsclientlib`. - -- Priority: P0 -- Verification: Inspection - -**SysRS-208**: The Chanora application shall provide an audio hardware interface through platform capture and playback adapters. - -- Priority: P0 -- Verification: Test - -**SysRS-209**: The Chanora application shall provide secure storage interfaces through platform-specific secure storage mechanisms. - -- Priority: P0 -- Verification: Audit - -**SysRS-210**: The Chanora application shall provide a network interface to external TeamSpeak 3-compatible servers through `tsclientlib`. - -- Priority: P0 -- Verification: Test - - -## 21. System Constraints - - -**SysRS-211**: The Chanora application shall not directly expose raw `tsclientlib` types to Flutter. - -- Priority: P0 -- Verification: Inspection - -**SysRS-212**: The Chanora application shall not store private keys in plaintext files. - -- Priority: P0 -- Verification: Audit - -**SysRS-213**: The Chanora application shall not write passwords to logs. - -- Priority: P0 -- Verification: Audit - -**SysRS-214**: The Chanora application shall not imply official TeamSpeak affiliation in UI, documentation, or release metadata. - -- Priority: P0 -- Verification: Audit - -**SysRS-215**: The Chanora application shall not automatically upload diagnostic information in MVP. - -- Priority: P0 -- Verification: Audit - -**SysRS-216**: The Chanora application shall comply with iOS background execution policies. - -- Priority: P0 -- Verification: Audit - -**SysRS-217**: The Chanora application shall comply with Android foreground service requirements for active voice sessions. - -- Priority: P0 -- Verification: Audit - -**SysRS-218**: The MVP shall not require Chanora-operated backend infrastructure for voice, channels, or text. - -- Priority: P0 -- Verification: Review - - -## 22. Assumptions - - -**SysRS-219**: The selected `tsclientlib` version can support or be extended to support required MVP protocol features. - -- Priority: P0 -- Verification: Review - -**SysRS-220**: Required audio processing features can be implemented through a combination of platform-native APIs, Rust DSP, and external audio processing libraries. - -- Priority: P0 -- Verification: Review - -**SysRS-221**: Mobile foreground voice behavior is sufficient for MVP. - -- Priority: P0 -- Verification: Review - -**SysRS-222**: Background voice behavior will remain constrained by iOS and Android platform policies. - -- Priority: P0 -- Verification: Review - -**SysRS-223**: External compatible server administrators are responsible for server availability, permissions, and configuration. - -- Priority: P0 -- Verification: Review - -**SysRS-224**: End users are responsible for providing valid server connection details and network access. - -- Priority: P0 -- Verification: Review - - -## 23. Out of Scope for MVP - - -**SysRS-225**: The MVP shall not include TeamSpeak-compatible server hosting functionality. - -- Priority: P0 -- Verification: Review - -**SysRS-226**: The MVP shall not include full server administration functionality. - -- Priority: P0 -- Verification: Review - -**SysRS-227**: The MVP shall not include a complete permission editor. - -- Priority: P0 -- Verification: Review - -**SysRS-228**: The MVP shall not include a plugin system. - -- Priority: P0 -- Verification: Review - -**SysRS-229**: The MVP shall not include 3D positional audio unless explicitly reprioritized. - -- Priority: P1 -- Verification: Review - -**SysRS-230**: The MVP shall not include advanced whisper list management unless explicitly reprioritized. - -- Priority: P1 -- Verification: Review - -**SysRS-231**: The MVP shall not include Server Query administration tools. - -- Priority: P0 -- Verification: Review - -**SysRS-232**: The MVP shall not include automatic cloud sync of bookmarks, identities, settings, or diagnostics. - -- Priority: P1 -- Verification: Review - - -## 24. Verification and Validation Requirements - - -**SysRS-233**: The project shall maintain a requirements traceability matrix from SysRS requirements through SysDes, SRS, SAD, SDD, and Verification evidence. - -- Priority: P1 -- Verification: Review - -**SysRS-234**: The project shall verify protocol compatibility through a protocol probe tool. - -- Priority: P0 -- Verification: Demo - -**SysRS-235**: The project shall verify state synchronization through reducer tests and event replay tests. - -- Priority: P1 -- Verification: Test - -**SysRS-236**: The project shall verify audio capture, processing, encode/decode, and playback through audio loopback and processing tests. - -- Priority: P1 -- Verification: Test - -**SysRS-237**: The project shall verify secure storage behavior on every target platform before public release. - -- Priority: P1 -- Verification: Audit - -**SysRS-238**: The project shall verify diagnostic redaction before enabling diagnostic export for external testers. - -- Priority: P1 -- Verification: Audit - -**SysRS-239**: The project shall verify release packaging on every target platform before production release. - -- Priority: P1 -- Verification: Demo - -**SysRS-240**: The project shall verify that public wording does not imply official TeamSpeak affiliation. - -- Priority: P0 -- Verification: Audit - - -## 25. MVP Acceptance Requirements - - -**SysRS-241**: The MVP shall connect to a TeamSpeak 3-compatible server using `tsclientlib`. - -- Priority: P0 -- Verification: Demo - -**SysRS-242**: The MVP shall display the server channel tree. - -- Priority: P0 -- Verification: Demo - -**SysRS-243**: The MVP shall display online clients. - -- Priority: P0 -- Verification: Demo - -**SysRS-244**: The MVP shall allow the user to join a voice channel. - -- Priority: P0 -- Verification: Demo - -**SysRS-245**: The MVP shall send voice. - -- Priority: P0 -- Verification: Demo - -**SysRS-246**: The MVP shall receive voice. - -- Priority: P0 -- Verification: Demo - -**SysRS-247**: The MVP shall support microphone mute. - -- Priority: P0 -- Verification: Demo - -**SysRS-248**: The MVP shall support output deaf. - -- Priority: P0 -- Verification: Demo - -**SysRS-249**: The MVP shall support push-to-talk. - -- Priority: P0 -- Verification: Demo - -**SysRS-250**: The MVP shall support Echo Canceller. - -- Priority: P0 -- Verification: Demo - -**SysRS-251**: The MVP shall support Automatic Gain Control. - -- Priority: P0 -- Verification: Demo - -**SysRS-252**: The MVP shall support Noise Suppression. - -- Priority: P0 -- Verification: Demo - -**SysRS-253**: The MVP shall support High-Pass Filter. - -- Priority: P0 -- Verification: Demo - -**SysRS-254**: The MVP shall send and receive channel text messages. - -- Priority: P0 -- Verification: Demo - -**SysRS-255**: The MVP shall save and reuse server bookmarks. - -- Priority: P0 -- Verification: Demo - -**SysRS-256**: The MVP shall use secure storage for sensitive data. - -- Priority: P0 -- Verification: Audit - -**SysRS-257**: The MVP shall export redacted diagnostic logs. - -- Priority: P1 -- Verification: Demo - - ---- - -## 30. UI/UX, Material 3, Platform, and Internationalization Requirements - -This section extends the system requirement baseline for the Chanora application system. These requirements are system-level because they define externally observable application behavior, accessibility behavior, platform behavior, multilingual behavior, deployment-region behavior, and interoperability constraints. - -**SysRS-258**: The Chanora application system shall use Material 3 as the baseline design system for the Flutter client user interface. - -- Priority: P0 -- Verification: Review, Inspection - -**SysRS-259**: The Chanora application system shall define a Chanora-specific design system above Material 3 for voice, connection, channel, latency, diagnostics, accessibility, and platform-adaptive states. - -- Priority: P0 -- Verification: Review, Inspection - -**SysRS-260**: The Chanora application system shall support compact, medium, and expanded window classes for responsive client layout. - -- Priority: P0 -- Verification: Test, Demo - -**SysRS-261**: The Chanora application system shall preserve visibility of connection status and primary voice controls across compact, medium, and expanded layouts. - -- Priority: P0 -- Verification: Test, Demo - -**SysRS-262**: The Chanora application system shall provide screen-reader semantics for critical interactive controls and critical status indicators. - -- Priority: P0 -- Verification: Test, Audit - -**SysRS-263**: The Chanora application system shall not communicate critical connection, voice, latency, permission, or error states by color alone. - -- Priority: P0 -- Verification: Test, Audit - -**SysRS-264**: The Chanora application system shall support keyboard focus traversal and visible focus indication on desktop-class and tablet keyboard environments. - -- Priority: P1 -- Verification: Test - -**SysRS-265**: The Chanora application system shall keep critical controls reachable when the user increases text size using platform accessibility settings. - -- Priority: P0 -- Verification: Test - -**SysRS-266**: The Chanora application system shall respect platform safe areas, display cutouts, system bars, virtual keyboards, and desktop window insets. - -- Priority: P0 -- Verification: Test - -**SysRS-267**: The Chanora application system shall provide platform-appropriate handling for Android system back navigation, including predictive-back-compatible behavior where supported by the platform. - -- Priority: P1 -- Verification: Test - -**SysRS-268**: The Chanora application system shall provide platform-appropriate handling for iOS navigation gestures, safe areas, keyboard avoidance, haptics, and system permission presentation. - -- Priority: P1 -- Verification: Test - -**SysRS-269**: The Chanora application system shall support localization of user-visible client application strings. - -- Priority: P0 -- Verification: Inspection, Test - -**SysRS-270**: The Chanora application system shall externalize user-visible strings from source code into localization resources or an equivalent localization mechanism. - -- Priority: P0 -- Verification: Inspection - -**SysRS-271**: The Chanora application system shall support English as the baseline product language. - -- Priority: P0 -- Verification: Review, Test - -**SysRS-272**: The Chanora application system shall support adding additional product languages without changing protocol, audio, state synchronization, or storage architecture. - -- Priority: P1 -- Verification: Review, Inspection - -**SysRS-273**: The Chanora application system shall preserve and display Unicode server names, channel names, client nicknames, and text messages received from compatible servers. - -- Priority: P0 -- Verification: Test - -**SysRS-274**: The Chanora application system shall use UTF-8 internally for text exchanged between Flutter, Rust Core, local storage, diagnostics, and protocol-facing adapters unless a platform API requires conversion at the boundary. - -- Priority: P0 -- Verification: Inspection, Test - -**SysRS-275**: The Chanora application system shall perform encoding conversion at explicit boundary adapters when external server, operating system, or platform APIs use a different text representation. - -- Priority: P1 -- Verification: Inspection, Test - -**SysRS-276**: The Chanora application system shall not corrupt or drop multilingual Unicode content in logs or diagnostic exports, except where redaction intentionally removes sensitive content. - -- Priority: P0 -- Verification: Test, Audit - -**SysRS-277**: The Chanora application system shall support bidirectional text display for user-visible localized strings and server-provided text where the platform text engine supports it. - -- Priority: P2 -- Verification: Test - -**SysRS-278**: The Chanora application system shall support locale-aware formatting for dates, times, numbers, and diagnostic timestamps where those values are user-visible. - -- Priority: P1 -- Verification: Test - -**SysRS-279**: The Chanora application system shall support fallback behavior when a translation key is missing. - -- Priority: P0 -- Verification: Test - -**SysRS-280**: The Chanora application system shall keep machine-readable diagnostic fields stable and language-neutral while allowing user-facing diagnostic descriptions to be localized. - -- Priority: P1 -- Verification: Inspection, Test - -**SysRS-281**: The Chanora application system shall separate product localization from server-provided content; server-provided names and messages shall be displayed as content, not translated by the client. - -- Priority: P0 -- Verification: Review, Test - -**SysRS-282**: The Chanora application system shall support accessibility labels and localization for icon-only controls. - -- Priority: P0 -- Verification: Test, Audit - -**SysRS-283**: The Chanora application system shall define a UI/UX guideline document as a downstream non-normative design baseline derived from this SysRS and SysDes. - -- Priority: P1 -- Verification: Review - -**SysRS-284**: The Chanora application system shall define design tokens for color, typography, spacing, shape, elevation, motion, density, connection state, voice state, latency state, and diagnostics state. - -- Priority: P1 -- Verification: Review, Inspection - -**SysRS-285**: The Chanora application system shall maintain traceability across the hierarchy `SysRS -> SysDes -> SRS -> SAD -> SDD` without allowing SRS, SAD, or SDD to bypass the immediately preceding lifecycle layer. - -- Priority: P0 -- Verification: Review, Inspection - - -## 26. Glossary - -| Term | Definition | -|---|---| -| Chanora | Cross-platform voice client application | -| Application system | The Chanora application plus runtime environment elements required for operation | -| Client device | User device running the Chanora application | -| Runtime environment | OS services, hardware, network, and external dependencies used by the application | -| External compatible server | TeamSpeak 3-compatible voice server not operated by Chanora | -| `tsclientlib` | Rust protocol library used for TeamSpeak-compatible protocol integration | -| Rust Core | Shared Rust layer for protocol, state, audio, storage, diagnostics, and business logic | -| Flutter UI | Cross-platform UI layer | -| Platform adapter | OS-specific integration layer for audio, permissions, secure storage, lifecycle, and packaging | -| Echo Canceller | Audio processing feature that reduces playback audio leaking into microphone input | -| Automatic Gain Control | Audio processing feature that normalizes microphone input gain | -| Noise Suppression | Audio processing feature that reduces background noise | -| High-Pass Filter | Audio processing feature that reduces low-frequency noise | - ---- - -## 27. SysRS Coverage Matrix - -| SysRS Area | Requirement Coverage | -|---|---| -| Product and application-system scope | SysRS-001 through SysRS-010 | -| Stakeholder and user environment | SysRS-011 through SysRS-015 | -| System boundary and external dependencies | SysRS-016 through SysRS-023 | -| Application components | SysRS-024 through SysRS-034 | -| Client device and hardware environment | SysRS-035 through SysRS-047 | -| Operating system services | SysRS-048 through SysRS-058 | -| Audio hardware and audio processing | SysRS-059 through SysRS-074 | -| Network environment | SysRS-075 through SysRS-087 | -| External compatible servers | SysRS-088 through SysRS-101 | -| Application functional behavior | SysRS-102 through SysRS-120 | -| Protocol integration | SysRS-121 through SysRS-128 | -| State synchronization | SysRS-129 through SysRS-139 | -| Data and storage | SysRS-140 through SysRS-152 | -| Security and privacy | SysRS-153 through SysRS-167 | -| Diagnostics and operations | SysRS-168 through SysRS-177 | -| Non-functional requirements | SysRS-178 through SysRS-191 | -| Deployment and release environment | SysRS-192 through SysRS-199 | -| Interfaces | SysRS-200 through SysRS-210 | -| Constraints | SysRS-211 through SysRS-218 | -| Assumptions | SysRS-219 through SysRS-224 | -| Out of scope for MVP | SysRS-225 through SysRS-232 | -| Verification and validation | SysRS-233 through SysRS-240 | -| MVP acceptance requirements | SysRS-241 through SysRS-257 | -| UI/UX, Material 3, platform, i18n, and strict traceability | SysRS-258 through SysRS-285 | - - ---- - -## 28. Open Decisions - -| Decision ID | Area | Question | Default Recommendation | -|---|---|---|---| -| SysRS-DEC-001 | Mobile | Minimum supported iOS version | Decide before iOS implementation | -| SysRS-DEC-002 | Mobile | Minimum supported Android version | Decide before Android implementation | -| SysRS-DEC-003 | Connection | Multiple simultaneous server connections in MVP | Defer unless required | -| SysRS-DEC-004 | Audio | Default Echo Canceller state per platform | Enable only after validation | -| SysRS-DEC-005 | Audio | Default AGC state per platform | Enable with conservative settings | -| SysRS-DEC-006 | Audio | Default Noise Suppression state per platform | Enable if quality is acceptable | -| SysRS-DEC-007 | Audio | Default High-Pass Filter cutoff frequency | 80 Hz initial default | -| SysRS-DEC-008 | Audio | Platform-native vs Rust audio processing per platform | Prefer best quality and lowest latency | -| SysRS-DEC-009 | Legal | Official SDK licensing review before public distribution | Recommended | -| SysRS-DEC-010 | Storage | Embedded database choice | SQLite or equivalent | -| SysRS-DEC-011 | Bridge | Rust/Flutter bridge choice | `flutter_rust_bridge` initially | - ---- - -## 29. Revision History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-13 | Initial application-system requirements draft | -| 0.2.0 | 2026-05-13 | Converted software-only direction into application-system SysRS | -| 0.3.0 | 2026-05-13 | Corrected terminology: Chanora is an application; SysRS covers the application system and runtime environment | -| 0.4.0 | 2026-05-13 | Removed old SYS requirement references and standardized requirement IDs as SysRS-XXX | -| 0.5.0 | 2026-05-13 | Moved implementation and design documents out of input references into downstream non-normative documents | -| 0.6.0 | 2026-05-13 | Corrected downstream documentation lifecycle to SysRS -> SysDes -> SRS -> SAD -> SDD -> Verification | -| 0.7.0 | 2026-05-14 | Added Material 3, adaptive UI, accessibility, platform behavior, internationalization, Unicode, and strict lifecycle traceability requirements | - ---- - -## 31. Platform Baseline, Release Policy, and Architecture Decision Requirements - -This section converts the baseline product decisions into auditable system-level requirements. - -**SysRS-286**: The Chanora application system shall support iOS runtime deployment on iOS 13 or later unless Flutter, plugin, audio, or platform constraints require raising the minimum version. - -- Priority: P0 -- Verification: Review, Platform Test - -**SysRS-287**: For Apple App Store Connect upload on or after 2026-04-28, the Chanora iOS/iPadOS build shall be produced with Xcode 26 or later using the iOS 26 / iPadOS 26 SDK or later, unless Apple publishes a newer applicable upload requirement before upload. - -- Priority: P0 -- Verification: Release Inspection - -**SysRS-288**: The Chanora Android application shall support Android API 28 (Android 9.0) or later as the minimum runtime baseline, per DEC-004 (Accepted 2026-05-14, which raised the original API 24 recommendation to API 28). The minimum may be raised further only if Flutter, plugin, audio, or platform constraints require it; it shall not be lowered without a superseding accepted decision. - -- Priority: P0 -- Verification: Review, Platform Test - -**SysRS-289**: For Google Play submission, the Chanora Android build shall target the Android API level required by Google Play on the upload date. - -- Priority: P0 -- Verification: Release Inspection - -**SysRS-290**: The Chanora MVP shall support one active server connection per client instance; multiple simultaneous active server connections shall be deferred outside MVP scope. - -- Priority: P0 -- Verification: Review, System Test - -**SysRS-291**: The Chanora MVP shall enable Echo Canceller, Automatic Gain Control, Noise Suppression, and High-Pass Filter by default where supported and stable, while allowing user or platform policy to disable supported processing where applicable. - -- Priority: P0 -- Verification: Audio Test, Review - -**SysRS-292**: The Chanora application system shall prefer platform-native audio processing for MVP where available and stable, with Rust/WebRTC-style audio processing retained as a controlled fallback or later architecture option. - -- Priority: P1 -- Verification: Architecture Review, Audio Test - -**SysRS-293**: The Chanora application system shall use SQLite or an equivalent embedded local database for non-secret local state, while storing secrets only through platform secure storage. - -- Priority: P0 -- Verification: Storage Test, Security Audit - -**SysRS-294**: The Chanora application system shall use a stable typed Flutter/Rust bridge with generated or schema-controlled DTOs; `flutter_rust_bridge` is the default candidate unless prototype evidence selects a better option. - -- Priority: P0 -- Verification: Architecture Review, Integration Test - -**SysRS-295**: The Chanora MVP shall not perform automatic diagnostic upload, automatic telemetry upload, or automatic crash reporting unless a later approved decision updates privacy, security, legal, release, and verification documents. - -- Priority: P0 -- Verification: Privacy Review, Security Audit - -**SysRS-296**: The Chanora desktop application shall support **Focused Push-to-Talk** on Windows, macOS, and Linux. Focused PTT is the minimum required behaviour: the user shall be able to hold a bound input (keyboard key, mouse button) inside the focused Chanora window to enable voice transmission, and release of that input shall disable voice transmission. - -- Priority: P0 -- Verification: Platform Test, User Acceptance Test - -**SysRS-297**: The Chanora desktop application shall additionally support **Global Push-to-Talk** where the operating system, the user-granted permission set, the display server, and the available input backend together permit it. Where global PTT is not available, the application shall fall back to Focused PTT without claiming Global PTT support. - -- Priority: P0 -- Verification: Platform Test, Architecture Review - -**SysRS-298**: The detected desktop PTT capability level shall be exposed to the user interface and to the release verification record. The exposed value shall match the actual runtime capability — the application shall not advertise a Global PTT level when the active backend is the Focused fallback. - -- Priority: P0 -- Verification: Integration Test, Release Inspection - -**SysRS-299**: The Chanora Windows desktop application shall prefer the Raw Input backend for Global PTT, with a low-level keyboard hook used only as a fallback when Raw Input is unavailable, and Focused PTT used as the final fallback when no Global PTT backend can be initialised. - -- Priority: P0 -- Verification: Platform Test (Windows), Architecture Review - -**SysRS-300**: The Chanora macOS desktop application shall request the operating-system permission required for Global PTT (Input Monitoring / Accessibility), use the permission-aware Global PTT backend when the permission is granted, and fall back to Focused PTT when the permission is denied, revoked, or not yet decided. The application shall not block voice functionality while the user decides on the permission prompt. - -- Priority: P0 -- Verification: Platform Test (macOS), User Acceptance Test - -**SysRS-301**: The Chanora Linux desktop application shall use a capability-dependent Global PTT backend selected from the available display server (X11 or Wayland) and compositor support (GNOME on Wayland is the officially-tested target for the first public release per DEC-026; other compositors fall back to Focused PTT). The application shall not claim Global PTT support on an untested Linux environment. - -- Priority: P0 -- Verification: Platform Test (Linux, GNOME Wayland), Architecture Review - -**SysRS-302**: The Chanora application system shall not log, store, persist, or include in the user-initiated diagnostic export any raw desktop key-event history, key code stream, or key-press timing sequence. Diagnostic export may include the detected PTT capability level, the active backend identifier, and the bound input class (for example "keyboard", "mouse-side-button"), but shall not include the specific key code, scan code, or virtual-key value of any user binding. - -- Priority: P0 -- Verification: Privacy Review, Security Audit, Diagnostic Inspection - -**SysRS-303**: The Chanora application system shall define the v1 voice transmit mode set as `Ptt` and `Continuous`, with `VoiceActivity` reserved on the enum surface but unimplemented in this baseline (deferred per DEC-030). The default mode on a fresh install shall be `Ptt`; the user-selected mode shall be persisted per identity. The audio engine lifecycle shall be bound to voice-channel membership: input and output streams shall open on the user's first voice-channel join of the session and shall close on the last voice-channel leave, with no manual start affordance exposed at any system interface. The output stream shall open regardless of microphone-permission state so listen-only is a first-class flow. A user-facing hard-mute toggle shall force the transmit gate closed and shall override the active transmit mode, the PTT key state, and every other internal signal. - -- Priority: P0 -- Verification: Functional Test, UX Review - -**SysRS-304**: The Chanora application system shall apply a configurable PTT release-tail interval between the moment the bound PTT input reports key-up and the moment the transmit gate closes, so that the trailing syllable of a spoken word is not clipped at word boundaries. The default release-tail value shall be 200 ms (matching the TeamSpeak / Mumble default); the user-configurable range shall be 0 ms through 500 ms inclusive. The release tail shall not affect the input-stream capture lifecycle; it shall affect only the transmit gate. - -- Priority: P0 -- Verification: Functional Test, UX Review - -**SysRS-305**: When the Chanora Android application has an active voice session connected, the system shall engage the Android in-call audio mode (for example via `AudioManager.setMode(MODE_IN_COMMUNICATION)` or an equivalent platform routing-assist mechanism) so that microphone gain, output routing, echo handling, and Bluetooth SCO behaviour follow Android's voice-communication path rather than the media path. The in-call mode shall be entered no later than the moment the voice session becomes connected and shall be released when the last active voice session ends. Back-fills the v0.9.8 product-decision-register entry that recorded `AudioManager.setMode(MODE_IN_COMMUNICATION)` engagement via JNI without prior SysRS coverage. - -- Priority: P0 -- Verification: Platform Test (Android), Audio Test - -**SysRS-306**: The Chanora Android application shall acquire the Android runtime microphone permission (`RECORD_AUDIO`) at or before the point of voice session activation, and shall not begin microphone capture without that permission having been granted by the user. If the permission is denied, revoked, or not yet decided, the application shall remain functional in listen-only mode (consistent with SysRS-303) and shall surface a user-facing path to grant the permission before retrying transmit. This requirement is additive to the general permission obligation in SysRS-055 and makes the runtime-acquisition timing explicit. - -- Priority: P0 -- Verification: Platform Test (Android), Functional Test - -**SysRS-307**: The Chanora project shall maintain measured numeric performance baselines for the realtime audio capture and playback paths. The baseline set shall include, at minimum: (i) heap allocation count per realtime audio callback measured after warmup, (ii) per-callback wall-clock time expressed as a fraction of (or absolute bound relative to) the audio frame period, (iii) Opus encode latency and Opus decode latency per frame, and (iv) resampler throughput at the common rate-pair conversions exercised by the audio pipeline. Each baseline shall be expressed as a numeric threshold (or numeric range), not as free-form prose, so that regression against the baseline is deterministically detectable by automated comparison. This requirement extends the prescriptive intent of SysRS-180 ("shall minimize local audio pipeline latency") and the directional target of SysRS-181 ("should target local audio pipeline latency under 100 ms") into a measurable, contract-grade obligation, and it is consistent with the underrun-avoidance obligation in SysRS-186. The specific baseline values, the warmup definition, the rate-pair set, and the storage format for the baselines are SysDes/SAD/SDD concerns and are not authored here. This clause does not authorize automatic upload, transmission, or off-device export of any measured baseline data and is therefore consistent with SysRS-295 (no automatic telemetry / diagnostic upload in MVP). - -- Priority: P0 -- Verification: Test (SWE.4 benchmark assertions, delegated to verification layer; cross-references SysRS-236) - -**SysRS-308**: The Chanora project's continuous-integration workflow shall execute the realtime-audio benchmark suite on every pull request against the default branch and on every merge to the default branch, on at least one host architecture (Linux x86_64 on the existing GitHub Actions runner is sufficient to satisfy this clause), and shall report the comparison of the executed run against the maintained baselines (SysRS-307) in the pull request's status-check surface such that human reviewers can see, before approving the change, whether any baseline has regressed beyond the declared tolerance window (SysRS-309). The CI regression check authorized by this clause is **advisory only**: it shall NOT fail the CI build, shall NOT block merge, and shall NOT be treated as a hard quality gate at the P0-MVP stage. Its purpose is to surface evidence for human reviewer judgement and to avoid the failure mode in which a strict build-failing gate is bypassed under release-crunch pressure (e.g., "skip CI"). Escalation of this advisory tier to a build-failing hard gate is explicitly out of scope of SysRS-308 and shall be authorized only by a separate, later SysRS clause after a period of baseline maturity sufficient to establish that the advisory signal is stable and low-noise (indicative target: 4–6 weeks of clean baseline data on the default branch, but the actual escalation criteria are to be set by the future clause). This requirement is consistent with the CI-as-quality-evidence pattern established by the SysRS-234..239 verification family and does not displace any obligation in that family. This clause does not authorize off-device transmission of baseline measurements beyond the project's existing CI provider surface (i.e., GitHub Actions logs and PR status checks visible to repository collaborators); it is therefore consistent with SysRS-295. - -- Priority: P0 -- Verification: Demo (CI workflow exercised on a representative PR; advisory status check appears and does not block merge on regression) - -**SysRS-309**: The advisory CI regression comparison authorized by SysRS-308 shall use an explicitly declared tolerance window — a numeric percentage (or a numeric per-metric percentage set) above the maintained baseline (SysRS-307) — beyond which the advisory check shall mark the run as a regression. The tolerance shall be a single declared value (or one declared value per metric), not an ad-hoc reviewer judgement, so that the advisory signal is reproducible. The specific numeric value(s) of the tolerance window and the comparison methodology (for example, "comparison against the most recent baseline snapshot on the default branch") shall be authored at the SysDes layer and may be refined at SAD/SDD; a suggested starting value of +20% over baseline is recorded here for downstream traceability but is not binding at the SysRS layer. Cross-references: SysRS-307 (the baselines being compared against), SysRS-308 (the advisory CI surface in which the comparison runs), SysRS-180/SysRS-181 (latency intent the tolerance must not silently erode), SysRS-295 (the tolerance window value is a project-local configuration and does not authorize off-device telemetry). - -- Priority: P0 -- Verification: Review (SysDes/SAD declaration of tolerance value is present and is referenced by the CI workflow definition) - -**SysRS-310**: The Chanora application system shall support macOS runtime deployment on macOS 10.15 (Catalina) or later as the minimum supported runtime, unless Flutter, plugin, audio, or platform constraints require raising the minimum version. This clause ratifies at the SysRS layer the existing macOS baseline already encoded in `apps/chanora_flutter/macos/chanora_bridge.podspec` (`MACOSX_DEPLOYMENT_TARGET = 10.15`) and provides explicit cross-platform-baseline coverage parallel to SysRS-286 (iOS) and SysRS-288 (Android). Rationale: macOS 10.15 is the floor that supports the modern CoreAudio / AVAudioEngine voice-processing-IO surfaces relied on by the realtime audio path, native arm64 Apple Silicon builds (no Rosetta dependence), and the SDK version used by the existing podspec lipo step that produces the universal binary; a lower minimum would require backporting audio code paths or shipping a non-universal build, neither of which is in P0-MVP scope. The minimum may be raised further (for example, to macOS 11.0 / Big Sur for native Apple Silicon performance gains) only via a superseding accepted decision recorded as a DEC entry; it shall not be lowered without a superseding accepted decision. Cross-references: SAD-087 (architectural macOS runtime allocation), SDD-119 (macOS bridge build pipeline consuming this baseline), SysRS-286 (iOS minimum runtime parallel), SysRS-288 (Android minimum runtime parallel). ID-allocation note: this clause uses SysRS-310 rather than the structurally parallel SysRS-290 because SysRS-290 is already allocated (MVP single-active-server-connection scope); monotonic numbering convention is preserved. - -- Priority: P0 -- Verification: Review (the SysRS baseline matches the podspec `MACOSX_DEPLOYMENT_TARGET` setting), Platform Test (the produced macOS binary runs on a macOS 10.15 system) - - -## 32. Change History Addendum - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Added platform runtime baselines, Apple SDK submission gate, Android Play target gate, MVP connection scope, audio defaults, audio implementation path, local database, bridge, and diagnostics/crash reporting policy requirements. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate effective date to 2026-04-28 and propagated distinction between runtime deployment target and build-SDK upload gate. | - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop Push-to-Talk requirements SysRS-296 through SysRS-302: mandatory Focused PTT on Windows/macOS/Linux, capability-dependent Global PTT, capability-level exposure to UI and release record, Windows Raw Input + low-level-hook + Focused fallback ladder, macOS permission-aware Global PTT, Linux capability-dependent Global PTT (GNOME on Wayland officially-tested per DEC-026), and the privacy rule prohibiting raw key-event history in logs and diagnostic exports. Owner-resolved gen2 review questions PTT-OPEN-001..006 land as DEC-023..028 in the product decision register. | - - -## Baseline Candidate 0.9.5 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.5 | 2026-05-15 | Added v1 audio + PTT lifecycle requirements SysRS-303 and SysRS-304 capturing the no-manual-start audio engine bound to voice-channel membership, the v1 transmit-mode set (`Ptt` default + `Continuous`, with `VoiceActivity` reserved per DEC-030), the listen-only flow (output independent of mic permission), the hard-mute override, and the 200 ms (0–500 ms) PTT release tail for word-boundary anti-clipping. | - - -## Baseline Candidate 0.9.9 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.9 | 2026-05-17 | Reconciled SysRS-288 with DEC-004 (Accepted 2026-05-14): Android minimum runtime baseline raised from API 24 to API 28 (Android 9.0); rationale and decision citation added in-line. Verified SysRS-055, SysRS-161, SysRS-195, SysRS-217, and SysRS-289 remain consistent with DEC-004 (no API-level text in any of these; no rewrite required). Added SysRS-305 (Android in-call audio mode engagement during active voice session — back-fills the v0.9.8 product-decision-register `AudioManager.setMode(MODE_IN_COMMUNICATION)` entry) and SysRS-306 (explicit Android runtime microphone permission acquisition at or before voice session activation, additive to SysRS-055). | - - -## Baseline Candidate 0.9.10 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.11 | 2026-05-18 | Closed the Wave 1.5 traceability-audit deferred-but-optional follow-up by adding SysRS-310 (macOS minimum runtime baseline at macOS 10.15 / Catalina), ratifying at SysRS layer the existing `apps/chanora_flutter/macos/chanora_bridge.podspec` `MACOSX_DEPLOYMENT_TARGET = 10.15` setting and providing explicit cross-platform-baseline coverage parallel to SysRS-286 (iOS) and SysRS-288 (Android). Allocated SysRS-310 rather than SysRS-290 because SysRS-290 is already taken (MVP single-active-server-connection scope); monotonic numbering convention preserved. No change to the numeric baseline value; any future raise (e.g., to macOS 11.0 / Big Sur for native Apple Silicon performance gains) is flagged as a DEC-level change, not authored here. | -| 0.9.10 | 2026-05-18 | Authorized Option B of the benchmark-infrastructure decision for the realtime audio path. Added SysRS-307 (maintained numeric performance baselines for the realtime audio capture and playback paths — heap allocation count per callback after warmup, per-callback wall-clock budget relative to the audio frame period, Opus encode/decode latency, and resampler throughput at common rate-pair conversions; extends SysRS-180/SysRS-181 from prescriptive intent into a measurable contract; consistent with SysRS-186 and SysRS-236). Added SysRS-308 (advisory CI regression reporting executing the benchmark suite on every PR and every merge to the default branch on at least one host architecture, surfacing results in the PR status-check view; explicitly **advisory only** — does not fail the build, does not block merge; escalation to a build-failing hard gate is out of scope and deferred to a future SysRS clause after baseline maturity; consistent with the SysRS-234..239 verification-family pattern). Added SysRS-309 (explicitly declared numeric tolerance window for the advisory comparison; numeric value(s) and comparison methodology delegated to SysDes/SAD; suggested starting value +20% recorded as non-binding downstream guidance). All three new clauses are consistent with SysRS-295 (no automatic telemetry / diagnostic upload in MVP) — they neither authorize nor require off-device transmission of measurement data beyond the existing CI provider surface visible to repository collaborators. Explicitly **NOT** authored in this update: (a) Dimension 3 production telemetry export of timing histograms (deferred to P1; any future opt-in performance-evidence export through the user-initiated diagnostic-export path requires a separate P1 SysRS clause and must be reconciled with SysRS-295 at that time); (b) build-failing hard CI gate (deferred to a future SysRS clause). | diff --git a/docs/security/dependency-and-supply-chain-report.md b/docs/security/dependency-and-supply-chain-report.md deleted file mode 100644 index c7ef25e..0000000 --- a/docs/security/dependency-and-supply-chain-report.md +++ /dev/null @@ -1,126 +0,0 @@ -# Sec Dependency And Supply Chain Report V0.9.2.2.1 - -**Document type:** Security / Dependency and Supply Chain Report -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/security/dependency-and-supply-chain-report.md` --- - -## 1. Purpose - -This report records Chanora dependency inventory, license review, vulnerability review, SBOM status, and supply-chain release readiness. - -## 2. Dependency Scope - -| Ecosystem | In scope | -|---|---| -| Flutter / Dart | `pubspec.yaml`, transitive packages, Flutter SDK version | -| Rust | `Cargo.toml`, `Cargo.lock`, crates, features | -| Protocol library | `tsclientlib` and related crates/dependencies | -| Native audio | Platform audio libraries, native build dependencies, bindings | -| Build tooling | CI actions, build scripts, code generators | -| Packaging | Platform packaging tools and signing tools | - -## 3. Required Outputs - -| Output | Required before external release | -|---|---| -| Dependency inventory | Yes | -| License report | Yes | -| Vulnerability scan report | Yes | -| SBOM | Yes | -| Critical/high vulnerability disposition | Yes | -| Unknown license disposition | Yes | -| Build provenance record | Yes | -| Artifact hash record | Yes | - -## 4. Dependency Inventory - -| Component | Ecosystem | Version | License | Source | Risk | Notes | -|---|---|---|---|---|---|---| -| Flutter SDK | Flutter | TBD | TBD | TBD | TBD | TBD | -| Dart packages | Dart | TBD | TBD | TBD | TBD | TBD | -| Rust toolchain | Rust | TBD | TBD | TBD | TBD | TBD | -| Rust crates | Rust | TBD | TBD | TBD | TBD | TBD | -| `tsclientlib` | Rust/protocol | TBD | TBD | TBD | TBD | TBD | -| Native audio dependencies | Native | TBD | TBD | TBD | TBD | TBD | -| CI actions/tools | Build | TBD | TBD | TBD | TBD | TBD | - -## 5. License Review - -| License category | Policy | -|---|---| -| Permissive licenses | Generally acceptable after review | -| Copyleft licenses | Requires legal review before release | -| Unknown licenses | Release blocker until resolved | -| Proprietary dependencies | Requires explicit approval | -| Incompatible licenses | Release blocker unless removed or legal waiver approved | - -## 6. Vulnerability Review - -| Finding ID | Dependency | Severity | CVE / advisory | Status | Disposition | -|---|---|---|---|---|---| -| TBD | TBD | TBD | TBD | TBD | TBD | - -## 7. SBOM - -| Field | Value | -|---|---| -| SBOM format | TBD: SPDX / CycloneDX / other | -| SBOM tool | TBD | -| SBOM file | TBD | -| SBOM generation date | TBD | -| SBOM reviewer | TBD | - -## 8. Build Provenance - -| Field | Value | -|---|---| -| Git commit SHA | TBD | -| Git tag | TBD | -| CI pipeline ID | TBD | -| Build environment | TBD | -| Artifact hashes | TBD | -| Signing identity | TBD | -| Reproducibility status | TBD | - -## 9. Release Gate - -| Gate | Required result | -|---|---| -| Critical vulnerabilities | None open without approved waiver | -| High vulnerabilities | None open without approved waiver | -| Unknown licenses | None open without approved waiver | -| SBOM | Generated and archived | -| License report | Reviewed | -| Dependency report | Approved | - -## 10. Approval - -| Role | Name | Decision | Date | -|---|---|---|---| -| Security Reviewer | TBD | Pending | TBD | -| Legal Reviewer | TBD | Pending | TBD | -| Engineering Owner | TBD | Pending | TBD | -| Release Manager | TBD | Pending | TBD | - -## 11. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial dependency and supply-chain report template. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/security/diagnostic-redaction-audit-report.md b/docs/security/diagnostic-redaction-audit-report.md deleted file mode 100644 index 76316bd..0000000 --- a/docs/security/diagnostic-redaction-audit-report.md +++ /dev/null @@ -1,134 +0,0 @@ -# Sec Diagnostic Redaction Audit Report V0.9.3.0.0 - -**Document type:** Security / Diagnostic Redaction Audit Report -**Version:** 0.9.3 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/security/diagnostic-redaction-audit-report.md` --- - -## 1. Purpose - -This report records evidence that Chanora logs and diagnostic exports do not leak sensitive information. - -## 2. Sensitive Data Redaction Policy - -| Data category | Default diagnostic behavior | -|---|---| -| Server password | Must redact | -| Identity private key / identity secret | Must redact | -| Authentication tokens if later added | Must redact | -| Secure-storage keys | Must redact | -| Server address | Redact or minimize according to release policy | -| Channel names | Redact or include only with explicit user consent | -| Client nicknames | Redact or include only with explicit user consent | -| Chat messages | Exclude by default unless a future explicit opt-in policy is approved | -| Local file paths | Minimize or redact user-identifying segments | -| Device IDs | Redact or hash if collected | -| IP addresses | Redact or minimize according to release policy | - -## 3. Diagnostic Surfaces - -| Surface | Risk | Required control | -|---|---|---| -| Application log | Secret leakage | Redaction filter and structured logging discipline | -| Protocol log | Hostile or sensitive server content | Redaction and length limits | -| Audio diagnostics | Device privacy | Device name minimization if needed | -| Export bundle | Aggregated sensitive data | Redaction audit before release | -| Error report | Stack trace or secret context | User-safe error mapping | -| User support copy/paste | Over-sharing | Explicit review and confirmation | - -## 4. Redaction Test Matrix - -| Test ID | Input | Expected output | Status | Evidence | -|---|---|---|---|---| -| REDACT-TC-001 | Server password in connection data | Password replaced by `[REDACTED]` | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_001_server_password_in_connection_data` | -| REDACT-TC-002 | Identity secret in storage error | Secret absent | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_002_identity_secret_in_storage_error` (via `KnownSecretRegistry`) | -| REDACT-TC-003 | Server URL with password-like field | Secret part redacted | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_003_server_url_with_password_field` — only the password value is redacted, the host and other query params keep flowing | -| REDACT-TC-004 | Chat text in diagnostic export | Excluded by default | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_004_chat_text_excluded_by_default` — default policy sets `include_chat = false` | -| REDACT-TC-005 | Channel name with Unicode | Preserved only if permitted; otherwise redacted safely | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_005_channel_name_with_unicode_excluded_by_default` — default policy excludes; UTF-8 preservation verified in TC-010 | -| REDACT-TC-006 | Nickname with Unicode | Preserved only if permitted; otherwise redacted safely | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_006_nickname_with_unicode_preserved_in_safe_field` | -| REDACT-TC-007 | Local file path | User-identifying segments redacted or minimized | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_007_local_file_paths_user_segment_minimized` — Linux `/home//`, Windows `C:\Users\\`, macOS `/Users//` all minimized | -| REDACT-TC-008 | Diagnostic bundle with mixed sensitive fields | All sensitive fields redacted | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_008_diagnostic_bundle_with_mixed_sensitive_fields` — whole-bundle JSON scan finds no plaintext | -| REDACT-TC-009 | Long hostile protocol string | Truncated or safely escaped | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_009_long_hostile_protocol_string_truncated` — `MAX_PROTOCOL_STRING_LEN = 256` cap with `…[truncated]` marker | -| REDACT-TC-010 | Multilingual safe diagnostic text | Unicode preserved | PoC Pass | `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_010_multilingual_safe_text_preserved` — Chinese, Japanese, Korean, and Latin-diacritic text preserved verbatim | - -## 5. Export Bundle Contents - -| Bundle item | Included? | Redaction rule | Status | -|---|---|---|---| -| App version | Yes | None | PoC Pass (`DiagnosticBundle.app_version` preserved verbatim) | -| Build number | Yes | None | PoC Pass (`DiagnosticBundle.build_number` preserved verbatim) | -| Platform info | Yes | Minimize device details | PoC Pass — flows through `Redactor::redact_text`, so embedded paths/usernames are minimized | -| Connection state | Yes | No secrets | PoC Pass — flows through `Redactor::redact_text` | -| Server address | Yes (redacted) | Redact/minimize | PoC Pass — passwords inside `ts3server://` URLs redacted | -| Channel tree | No by default | Redact/minimize | PoC Pass — default `include_channel_tree = false` | -| Chat history | No by default | Exclude unless explicit policy changes | PoC Pass — default `include_chat = false` | -| Logs | Yes | Redacted | PoC Pass — each log line flows through `Redactor::redact_text` | -| Audio diagnostics | Yes | No audio content | PoC Pass — only device names are exported; no PCM | -| Secure storage data | No | Never include | PoC Pass by construction — the redactor has no path that reads from `SecretStorageRepository`; the host application must never put secret material into the bundle in the first place | - -## 6. Findings - -| Finding ID | Severity | Description | Status | Owner | -|---|---|---|---|---| -| REDACT-FIND-001 | Informational | The PoC regex catalogue covers the documented audit matrix but is not exhaustive. Production `chanora_diagnostics` should add fuzz testing and adversarial inputs (e.g. base64 lookalikes, unicode confusables, regex evasion). | Open | Security Reviewer + `chanora_diagnostics` owner | -| REDACT-FIND-002 | Informational | The PoC redactor is a post-processor over strings. Production code should wire the redactor as a `tracing-subscriber` layer so redaction happens at write-time, not by re-walking text afterward. | Open — to be addressed when `chanora_diagnostics` is scaffolded | `chanora_diagnostics` owner | -| REDACT-FIND-003 | Informational | The `KnownSecretRegistry` defence-in-depth requires the secure-storage layer to register secrets when they materialise. The cross-spike contract is documented but not yet enforced by any product code. | Open — to be enforced by `chanora_storage` calling into `chanora_diagnostics`. | `chanora_storage` + `chanora_diagnostics` owners | - -## 7. Approval - -| Role | Name | Decision | Date | -|---|---|---|---| -| Security Reviewer | TBD | Pending | TBD | -| Privacy Reviewer | TBD | Pending | TBD | -| QA / Verification Owner | TBD | Pending | TBD | - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial diagnostic redaction audit report template. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-14 | Recorded PoC empirical evidence: REDACT-TC-001..010 status set to PoC Pass with evidence pointers to `poc/diagnostics-redaction-spike/tests/redaction.rs`. Export bundle policy §5 populated for every row. Findings REDACT-FIND-001..003 added (regex coverage limits, tracing-layer integration gap, KnownSecretRegistry cross-spike contract). | - - -## Desktop Push-to-Talk Redaction Addendum (Baseline Candidate 0.9.3) - -Per SysRS-302 / SRS-202 / SAD-077 / SDD-090, the redaction policy adds the following rules for desktop PTT diagnostics: - -| Rule | Banned field name | Disposition | -|---|---|---| -| REDACT-PTT-001 | `key_code` | Drop record. | -| REDACT-PTT-002 | `scan_code` | Drop record. | -| REDACT-PTT-003 | `virtual_key`, `vk` | Drop record. | -| REDACT-PTT-004 | `keysym`, `keysym_string` | Drop record. | -| REDACT-PTT-005 | `key_sequence`, `key_press_history`, `key_timing` | Drop record. | -| REDACT-PTT-006 | Free-form `message` strings shall not embed key values; offending records shall be reformatted by the originating backend before emission. | Drop record. | - -The `PttSanitizer` `tracing_subscriber::Layer` decorates `RedactingLogLayer` and is the enforcement point. Fields whose names match the banned list cause the entire record to be dropped — Chanora does not attempt to redact-in-place because partial-redaction false negatives are riskier than a missing line. - -Permitted fields for PTT diagnostics: `capability_level`, `backend_id`, `bound_input_class`, `fallback_exercised`. - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT redaction rules REDACT-PTT-001..006: ban raw key codes, scan codes, virtual-key values, keysyms, and key timing sequences from logs and exports. | diff --git a/docs/security/flutter-license-inventory.md b/docs/security/flutter-license-inventory.md deleted file mode 100644 index 0eaf2a9..0000000 --- a/docs/security/flutter-license-inventory.md +++ /dev/null @@ -1,4280 +0,0 @@ -# Chanora — Flutter / Dart license inventory - -Generated by `tools/dump_flutter_licenses.sh` from -`apps/chanora_flutter/pubspec.lock`. The script walks -every resolved dependency in the lockfile, pulls each -package's LICENSE file out of the local pub cache, -and writes the result here. CI checks that the -committed copy matches the regenerated output. - -Chanora itself is dual-licensed under -[Apache License 2.0](../../LICENSE-APACHE) or the -[MIT License](../../LICENSE-MIT) at the recipient's -option (DEC-020). The packages listed below carry -their own licenses and are redistributed under those -terms. - -| Package | Version | Source | License found | -|---------|---------|--------|---------------| -| `_fe_analyzer_shared` | 93.0.0 | hosted | yes | -| `analyzer` | 10.0.1 | hosted | yes | -| `args` | 2.7.0 | hosted | yes | -| `async` | 2.13.1 | hosted | yes | -| `boolean_selector` | 2.1.2 | hosted | yes | -| `build` | 4.0.6 | hosted | yes | -| `build_cli_annotations` | 2.1.1 | hosted | yes | -| `build_config` | 1.3.0 | hosted | yes | -| `build_daemon` | 4.1.1 | hosted | yes | -| `build_runner` | 2.15.0 | hosted | yes | -| `built_collection` | 5.1.1 | hosted | yes | -| `built_value` | 8.12.6 | hosted | yes | -| `characters` | 1.4.1 | hosted | yes | -| `checked_yaml` | 2.0.4 | hosted | yes | -| `clock` | 1.1.2 | hosted | yes | -| `code_assets` | 1.0.0 | hosted | yes | -| `collection` | 1.19.1 | hosted | yes | -| `connectivity_plus` | 6.1.5 | hosted | yes | -| `connectivity_plus_platform_interface` | 2.1.0 | hosted | yes | -| `convert` | 3.1.2 | hosted | yes | -| `crypto` | 3.0.7 | hosted | yes | -| `cupertino_icons` | 1.0.9 | hosted | yes | -| `dart_style` | 3.1.7 | hosted | yes | -| `dbus` | 0.7.12 | hosted | yes | -| `fake_async` | 1.3.3 | hosted | yes | -| `ffi` | 2.2.0 | hosted | yes | -| `file` | 7.0.1 | hosted | yes | -| `fixnum` | 1.1.1 | hosted | yes | -| `flutter` | 0.0.0 | sdk | yes | -| `flutter_lints` | 6.0.0 | hosted | yes | -| `flutter_localizations` | 0.0.0 | sdk | yes | -| `flutter_rust_bridge` | 2.12.0 | hosted | yes | -| `flutter_test` | 0.0.0 | sdk | yes | -| `flutter_web_plugins` | 0.0.0 | sdk | yes | -| `freezed` | 3.2.5 | hosted | yes | -| `freezed_annotation` | 3.1.0 | hosted | yes | -| `glob` | 2.1.3 | hosted | yes | -| `graphs` | 2.3.2 | hosted | yes | -| `hooks` | 1.0.3 | hosted | yes | -| `http_multi_server` | 3.2.2 | hosted | yes | -| `http_parser` | 4.1.2 | hosted | yes | -| `intl` | 0.20.2 | hosted | yes | -| `io` | 1.0.5 | hosted | yes | -| `jni` | 1.0.0 | hosted | yes | -| `jni_flutter` | 1.0.1 | hosted | yes | -| `json_annotation` | 4.11.0 | hosted | yes | -| `leak_tracker` | 11.0.2 | hosted | yes | -| `leak_tracker_flutter_testing` | 3.0.10 | hosted | yes | -| `leak_tracker_testing` | 3.0.2 | hosted | yes | -| `lints` | 6.1.0 | hosted | yes | -| `logging` | 1.3.0 | hosted | yes | -| `matcher` | 0.12.19 | hosted | yes | -| `material_color_utilities` | 0.13.0 | hosted | yes | -| `meta` | 1.17.0 | hosted | yes | -| `mime` | 2.0.0 | hosted | yes | -| `native_toolchain_c` | 0.17.6 | hosted | yes | -| `nm` | 0.5.0 | hosted | yes | -| `objective_c` | 9.3.0 | hosted | yes | -| `package_config` | 2.2.0 | hosted | yes | -| `path` | 1.9.1 | hosted | yes | -| `path_provider` | 2.1.5 | hosted | yes | -| `path_provider_android` | 2.3.1 | hosted | yes | -| `path_provider_foundation` | 2.6.0 | hosted | yes | -| `path_provider_linux` | 2.2.1 | hosted | yes | -| `path_provider_platform_interface` | 2.1.2 | hosted | yes | -| `path_provider_windows` | 2.3.0 | hosted | yes | -| `petitparser` | 7.0.2 | hosted | yes | -| `platform` | 3.1.6 | hosted | yes | -| `plugin_platform_interface` | 2.1.8 | hosted | yes | -| `pool` | 1.5.2 | hosted | yes | -| `pub_semver` | 2.2.0 | hosted | yes | -| `pubspec_parse` | 1.5.0 | hosted | yes | -| `record_use` | 0.6.0 | hosted | yes | -| `shelf` | 1.4.2 | hosted | yes | -| `shelf_web_socket` | 3.0.0 | hosted | yes | -| `sky_engine` | 0.0.0 | sdk | yes | -| `source_gen` | 4.2.3 | hosted | yes | -| `source_span` | 1.10.2 | hosted | yes | -| `stack_trace` | 1.12.1 | hosted | yes | -| `stream_channel` | 2.1.4 | hosted | yes | -| `stream_transform` | 2.1.1 | hosted | yes | -| `string_scanner` | 1.4.1 | hosted | yes | -| `term_glyph` | 1.2.2 | hosted | yes | -| `test_api` | 0.7.10 | hosted | yes | -| `typed_data` | 1.4.0 | hosted | yes | -| `vector_math` | 2.2.0 | hosted | yes | -| `vm_service` | 15.2.0 | hosted | yes | -| `watcher` | 1.2.1 | hosted | yes | -| `web` | 1.1.1 | hosted | yes | -| `web_socket` | 1.0.1 | hosted | yes | -| `web_socket_channel` | 3.0.3 | hosted | yes | -| `xdg_directories` | 1.1.0 | hosted | yes | -| `xml` | 6.6.1 | hosted | yes | -| `yaml` | 3.1.3 | hosted | yes | - -## Full license texts - -### _fe_analyzer_shared 93.0.0 - -``` -Copyright 2019, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### analyzer 10.0.1 - -``` -Copyright 2013, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### args 2.7.0 - -``` -Copyright 2013, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### async 2.13.1 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### boolean_selector 2.1.2 - -``` -Copyright 2016, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### build 4.0.6 - -``` -Copyright 2016, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### build_cli_annotations 2.1.1 - -``` -MIT License - -Copyright (c) 2018 Kevin Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -### build_config 1.3.0 - -``` -Copyright 2017, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### build_daemon 4.1.1 - -``` -Copyright 2019, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### build_runner 2.15.0 - -``` -Copyright 2016, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### built_collection 5.1.1 - -``` -Copyright 2015, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### built_value 8.12.6 - -``` -Copyright 2015, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### characters 1.4.1 - -``` -Copyright 2019, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### checked_yaml 2.0.4 - -``` -Copyright 2019, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### clock 1.1.2 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` - -### code_assets 1.0.0 - -``` -Copyright 2025, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### collection 1.19.1 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### connectivity_plus 6.1.5 - -``` -Copyright 2017 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### connectivity_plus_platform_interface 2.1.0 - -``` -Copyright 2020 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### convert 3.1.2 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### crypto 3.0.7 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### cupertino_icons 1.0.9 - -``` -The MIT License (MIT) - -Copyright (c) 2016 Vladimir Kharlampidi - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -``` - -### dart_style 3.1.7 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### dbus 0.7.12 - -``` -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. -``` - -### fake_async 1.3.3 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` - -### ffi 2.2.0 - -``` -Copyright 2019, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### file 7.0.1 - -``` -Copyright 2017, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### fixnum 1.1.1 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### flutter 0.0.0 - -``` -Copyright 2014 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### flutter_lints 6.0.0 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### flutter_localizations 0.0.0 - -``` -Copyright 2014 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### flutter_rust_bridge 2.12.0 - -``` -MIT License - -Copyright (c) 2021 fzyzcjy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -### flutter_test 0.0.0 - -``` -Copyright 2014 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### flutter_web_plugins 0.0.0 - -``` -Copyright 2014 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### freezed 3.2.5 - -``` -MIT License - -Copyright (c) 2020 Remi Rousselet - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -### freezed_annotation 3.1.0 - -``` -MIT License - -Copyright (c) 2020 Remi Rousselet - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -### glob 2.1.3 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### graphs 2.3.2 - -``` -Copyright 2017, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### hooks 1.0.3 - -``` -Copyright 2025, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### http_multi_server 3.2.2 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### http_parser 4.1.2 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### intl 0.20.2 - -``` -Copyright 2013, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### io 1.0.5 - -``` -Copyright 2017, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### jni 1.0.0 - -``` -Copyright 2022, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### jni_flutter 1.0.1 - -``` -Copyright 2026, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### json_annotation 4.11.0 - -``` -Copyright 2017, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### leak_tracker 11.0.2 - -``` -Copyright 2022, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### leak_tracker_flutter_testing 3.0.10 - -``` -Copyright 2022, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### leak_tracker_testing 3.0.2 - -``` -Copyright 2022, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### lints 6.1.0 - -``` -Copyright 2021, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### logging 1.3.0 - -``` -Copyright 2013, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### matcher 0.12.19 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### material_color_utilities 0.13.0 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2021 Google LLC - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` - -### meta 1.17.0 - -``` -Copyright 2016, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### mime 2.0.0 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### native_toolchain_c 0.17.6 - -``` -Copyright 2023, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### nm 0.5.0 - -``` -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. -``` - -### objective_c 9.3.0 - -``` -Copyright 2024, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### package_config 2.2.0 - -``` -Copyright 2019, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path 1.9.1 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path_provider 2.1.5 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path_provider_android 2.3.1 - -``` -Copyright 2013 The Flutter Authors - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path_provider_foundation 2.6.0 - -``` -Copyright 2013 The Flutter Authors - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path_provider_linux 2.2.1 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path_provider_platform_interface 2.1.2 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### path_provider_windows 2.3.0 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### petitparser 7.0.2 - -``` -The MIT License - -Copyright (c) 2006-2024 Lukas Renggli. -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -``` - -### platform 3.1.6 - -``` -Copyright 2017, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### plugin_platform_interface 2.1.8 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### pool 1.5.2 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### pub_semver 2.2.0 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### pubspec_parse 1.5.0 - -``` -Copyright 2018, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### record_use 0.6.0 - -``` -Copyright 2024, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### shelf 1.4.2 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### shelf_web_socket 3.0.0 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### sky_engine 0.0.0 - -``` -Copyright 2014 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### source_gen 4.2.3 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### source_span 1.10.2 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### stack_trace 1.12.1 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### stream_channel 2.1.4 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### stream_transform 2.1.1 - -``` -Copyright 2017, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### string_scanner 1.4.1 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### term_glyph 1.2.2 - -``` -Copyright 2017, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### test_api 0.7.10 - -``` -Copyright 2018, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### typed_data 1.4.0 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### vector_math 2.2.0 - -``` -Copyright 2015, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Copyright (C) 2013 Andrew Magill - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -``` - -### vm_service 15.2.0 - -``` -Copyright 2015, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### watcher 1.2.1 - -``` -Copyright 2014, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### web 1.1.1 - -``` -Copyright 2023, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### web_socket 1.0.1 - -``` -Copyright 2024, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### web_socket_channel 3.0.3 - -``` -Copyright 2016, the Dart project authors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### xdg_directories 1.1.0 - -``` -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -### xml 6.6.1 - -``` -The MIT License - -Copyright (c) 2006-2025 Lukas Renggli. -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -``` - -### yaml 3.1.3 - -``` -Copyright (c) 2014, the Dart project authors. -Copyright (c) 2006, Kirill Simonov. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - diff --git a/docs/security/license-inventory.html b/docs/security/license-inventory.html deleted file mode 100644 index 3c845bb..0000000 --- a/docs/security/license-inventory.html +++ /dev/null @@ -1,11101 +0,0 @@ - - - - -Chanora — Third-party license inventory - - - -

Chanora — Third-party license inventory

- -

-This page enumerates every third-party crate that ships in a release -build of Chanora and the license under which Chanora redistributes -it. Generated by cargo about generate from -about.toml at the repository root; regenerate via the -just license-inventory recipe. -

- -

-Chanora itself is dual-licensed under -Apache License 2.0 or the -MIT License at the recipient's option -(see DEC-020 in -docs/governance/product-decision-register.md). -The crates listed below carry their own licenses and are -redistributed under those terms. -

- -

Licenses in use

-
    -
  • Apache License 2.0 — used by 293 crate(s).
  • -
  • MIT License — used by 64 crate(s).
  • -
  • Unicode License v3 — used by 19 crate(s).
  • -
  • BSD 3-Clause "New" or "Revised" License — used by 7 crate(s).
  • -
  • ISC License — used by 7 crate(s).
  • -
- -

Crates

-
-

powerfmt 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/jhpratt/powerfmt

-
-
-

deranged 0.5.8

-

License: Apache License 2.0

-

Source: https://github.com/jhpratt/deranged

-
-
-

encoding_rs 0.8.35

-

License: Apache License 2.0

-

Source: https://github.com/hsivonen/encoding_rs

-
-
-

tinyvec 1.11.0

-

License: Apache License 2.0

-

Source: https://github.com/Lokathor/tinyvec

-
-
-

utf8_iter 1.0.4

-

License: Apache License 2.0

-

Source: https://github.com/hsivonen/utf8_iter

-
-
-

zeroize 1.8.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

zeroize_derive 1.4.3

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils/tree/master/zeroize/derive

-
-
-

windows-core 0.54.0

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-link 0.2.1

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-registry 0.6.1

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-result 0.1.2

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-result 0.4.1

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-strings 0.5.1

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-sys 0.45.0

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-sys 0.60.2

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-sys 0.61.2

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-targets 0.42.2

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-targets 0.52.6

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows-targets 0.53.5

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows 0.54.0

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows_x86_64_gnu 0.52.6

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows_x86_64_gnu 0.53.1

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows_x86_64_msvc 0.42.2

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows_x86_64_msvc 0.52.6

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

windows_x86_64_msvc 0.53.1

-

License: Apache License 2.0

-

Source: https://github.com/microsoft/windows-rs

-
-
-

moka 0.12.15

-

License: Apache License 2.0

-

Source: https://github.com/moka-rs/moka

-
-
-

tinyvec_macros 0.1.1

-

License: Apache License 2.0

-

Source: https://github.com/Soveu/tinyvec_macros

-
-
-

zerocopy 0.8.48

-

License: Apache License 2.0

-

Source: https://github.com/google/zerocopy

-
-
-

allo-isolate 0.1.27

-

License: Apache License 2.0

-

Source: https://github.com/sunshine-protocol/allo-isolate

-
-
-

cpal 0.16.0

-

License: Apache License 2.0

-

Source: https://github.com/rustaudio/cpal

-
-
-

rustls-platform-verifier 0.7.0

-

License: Apache License 2.0

-

Source: https://github.com/rustls/rustls-platform-verifier

-
-
-

self_cell 1.2.2

-

License: Apache License 2.0

-

Source: https://github.com/Voultapher/self_cell

-
-
-

tracing-android 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/Actyx/tracing-android

-
-
-

ipnet 2.12.0

-

License: Apache License 2.0

-

Source: https://github.com/krisprice/ipnet

-
-
-

prefix-trie 0.8.4

-

License: Apache License 2.0

-

Source: https://github.com/tiborschneider/prefix-trie

-
-
-

env_filter 0.1.4

-

License: Apache License 2.0

-

Source: https://github.com/rust-cli/env_logger

-
-
-

fallible-iterator 0.3.0

-

License: Apache License 2.0

-

Source: https://github.com/sfackler/rust-fallible-iterator

-
-
-

fallible-streaming-iterator 0.1.9

-

License: Apache License 2.0

-

Source: https://github.com/sfackler/fallible-streaming-iterator

-
-
-

hex 0.4.3

-

License: Apache License 2.0

-

Source: https://github.com/KokaKiwi/rust-hex

-
-
-

jni-sys 0.3.1

-

License: Apache License 2.0

-

Source: https://github.com/jni-rs/jni-sys

-
-
-

jni-sys 0.4.1

-

License: Apache License 2.0

-

Source: https://github.com/jni-rs/jni-sys

-
-
-

resolv-conf 0.7.6

-

License: Apache License 2.0

-

Source: https://github.com/hickory-dns/resolv-conf

-
-
-

serde_spanned 1.1.1

-

License: Apache License 2.0

-

Source: https://github.com/toml-rs/toml

-
-
-

toml 1.1.2+spec-1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/toml-rs/toml

-
-
-

toml_datetime 1.1.1+spec-1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/toml-rs/toml

-
-
-

toml_edit 0.25.11+spec-1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/toml-rs/toml

-
-
-

toml_parser 1.1.2+spec-1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/toml-rs/toml

-
-
-

toml_writer 1.1.1+spec-1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/toml-rs/toml

-
-
-

omnom 3.0.0

-

License: Apache License 2.0

-

Source: https://github.com/yoshuawuyts/omnom

-
-
-

async-broadcast 0.7.2

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/async-broadcast

-
-
-

hickory-net 0.26.1

-

License: Apache License 2.0

-

Source: https://github.com/hickory-dns/hickory-dns

-
-
-

hickory-proto 0.26.1

-

License: Apache License 2.0

-

Source: https://github.com/hickory-dns/hickory-dns

-
-
-

hickory-resolver 0.26.1

-

License: Apache License 2.0

-

Source: https://github.com/hickory-dns/hickory-dns

-
-
-

futures-channel 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-core 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-executor 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-io 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-macro 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-sink 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-task 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures-util 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

futures 0.3.32

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/futures-rs

-
-
-

typenum 1.20.0

-

License: Apache License 2.0

-

Source: https://github.com/paholg/typenum

-
-
-

reqwest 0.13.3

-

License: Apache License 2.0

-

Source: https://github.com/seanmonstar/reqwest

-
-
-

http 1.4.0

-

License: Apache License 2.0

-

Source: https://github.com/hyperium/http

-
-
-

tokio-rustls 0.26.4

-

License: Apache License 2.0

-

Source: https://github.com/rustls/tokio-rustls

-
-
-

pin-utils 0.1.0

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang-nursery/pin-utils

-
-
-

ecdsa 0.16.9

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/signatures/tree/master/ecdsa

-
-
-

rfc6979 0.4.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/signatures/tree/master/rfc6979

-
-
-

ppv-lite86 0.2.21

-

License: Apache License 2.0

-

Source: https://github.com/cryptocorrosion/cryptocorrosion

-
-
-

rustls-pki-types 1.14.1

-

License: Apache License 2.0

-

Source: https://github.com/rustls/pki-types

-
-
-

keyring 3.6.3

-

License: Apache License 2.0

-

Source: https://github.com/hwchen/keyring-rs.git

-
-
-

async-recursion 1.1.1

-

License: Apache License 2.0

-

Source: https://github.com/dcchut/async-recursion

-
-
-

t4rust-derive 0.3.1

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/t4rust

-
-
-

tsproto-structs 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/tsclientlib/tree/master/utils/tsproto-structs

-
-
-

addr2line 0.25.1

-

License: Apache License 2.0

-

Source: https://github.com/gimli-rs/addr2line

-
-
-

ahash 0.8.12

-

License: Apache License 2.0

-

Source: https://github.com/tkaitchuck/ahash

-
-
-

atomic-waker 1.1.2

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/atomic-waker

-
-
-

atomic 0.5.3

-

License: Apache License 2.0

-

Source: https://github.com/Amanieu/atomic-rs

-
-
-

autocfg 1.5.0

-

License: Apache License 2.0

-

Source: https://github.com/cuviper/autocfg

-
-
-

backtrace 0.3.76

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/backtrace-rs

-
-
-

base64 0.22.1

-

License: Apache License 2.0

-

Source: https://github.com/marshallpierce/rust-base64

-
-
-

bitflags 1.3.2

-

License: Apache License 2.0

-

Source: https://github.com/bitflags/bitflags

-
-
-

bitflags 2.11.1

-

License: Apache License 2.0

-

Source: https://github.com/bitflags/bitflags

-
-
-

cc 1.2.62

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/cc-rs

-
-
-

cfg-if 1.0.4

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/cfg-if

-
-
-

cmake 0.1.58

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/cmake-rs

-
-
-

concurrent-queue 2.5.0

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/concurrent-queue

-
-
-

core-foundation-sys 0.8.7

-

License: Apache License 2.0

-

Source: https://github.com/servo/core-foundation-rs

-
-
-

core-foundation 0.10.1

-

License: Apache License 2.0

-

Source: https://github.com/servo/core-foundation-rs

-
-
-

core-foundation 0.9.4

-

License: Apache License 2.0

-

Source: https://github.com/servo/core-foundation-rs

-
-
-

coreaudio-rs 0.13.0

-

License: Apache License 2.0

-

Source: https://github.com/RustAudio/coreaudio-rs.git

-
-
-

critical-section 1.2.0

-

License: Apache License 2.0

-

Source: https://github.com/rust-embedded/critical-section

-
-
-

crossbeam-channel 0.5.15

-

License: Apache License 2.0

-

Source: https://github.com/crossbeam-rs/crossbeam

-
-
-

crossbeam-epoch 0.9.18

-

License: Apache License 2.0

-

Source: https://github.com/crossbeam-rs/crossbeam

-
-
-

crossbeam-utils 0.8.21

-

License: Apache License 2.0

-

Source: https://github.com/crossbeam-rs/crossbeam

-
-
-

dbus-secret-service 4.1.0

-

License: Apache License 2.0

-

Source: https://github.com/brotskydotcom/dbus-secret-service.git

-
-
-

displaydoc 0.2.5

-

License: Apache License 2.0

-

Source: https://github.com/yaahc/displaydoc

-
-
-

either 1.15.0

-

License: Apache License 2.0

-

Source: https://github.com/rayon-rs/either

-
-
-

equivalent 1.0.2

-

License: Apache License 2.0

-

Source: https://github.com/indexmap-rs/equivalent

-
-
-

errno 0.3.14

-

License: Apache License 2.0

-

Source: https://github.com/lambda-fairy/rust-errno

-
-
-

event-listener-strategy 0.5.4

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/event-listener-strategy

-
-
-

event-listener 5.4.1

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/event-listener

-
-
-

fastrand 2.4.1

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/fastrand

-
-
-

find-msvc-tools 0.1.9

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/cc-rs

-
-
-

fnv 1.0.7

-

License: Apache License 2.0

-

Source: https://github.com/servo/rust-fnv

-
-
-

form_urlencoded 1.2.2

-

License: Apache License 2.0

-

Source: https://github.com/servo/rust-url

-
-
-

futures-lite 2.6.1

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/futures-lite

-
-
-

gimli 0.32.3

-

License: Apache License 2.0

-

Source: https://github.com/gimli-rs/gimli

-
-
-

group 0.13.0

-

License: Apache License 2.0

-

Source: https://github.com/zkcrypto/group

-
-
-

hashbrown 0.14.5

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/hashbrown

-
-
-

hashbrown 0.17.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/hashbrown

-
-
-

heck 0.5.0

-

License: Apache License 2.0

-

Source: https://github.com/withoutboats/heck

-
-
-

httparse 1.10.1

-

License: Apache License 2.0

-

Source: https://github.com/seanmonstar/httparse

-
-
-

hyper-rustls 0.27.9

-

License: Apache License 2.0

-

Source: https://github.com/rustls/hyper-rustls

-
-
-

idna 1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/servo/rust-url/

-
-
-

idna_adapter 1.2.2

-

License: Apache License 2.0

-

Source: https://github.com/hsivonen/idna_adapter

-
-
-

indexmap 2.14.0

-

License: Apache License 2.0

-

Source: https://github.com/indexmap-rs/indexmap

-
-
-

ipconfig 0.3.4

-

License: Apache License 2.0

-

Source: https://github.com/liranringel/ipconfig

-
-
-

itertools 0.14.0

-

License: Apache License 2.0

-

Source: https://github.com/rust-itertools/itertools

-
-
-

jni 0.21.1

-

License: Apache License 2.0

-

Source: https://github.com/jni-rs/jni-rs

-
-
-

jobserver 0.1.34

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/jobserver-rs

-
-
-

lazy_static 1.5.0

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang-nursery/lazy-static.rs

-
-
-

linux-raw-sys 0.12.1

-

License: Apache License 2.0

-

Source: https://github.com/sunfishcode/linux-raw-sys

-
-
-

lock_api 0.4.14

-

License: Apache License 2.0

-

Source: https://github.com/Amanieu/parking_lot

-
-
-

log 0.4.29

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/log

-
-
-

mime 0.3.17

-

License: Apache License 2.0

-

Source: https://github.com/hyperium/mime

-
-
-

num-bigint 0.4.6

-

License: Apache License 2.0

-

Source: https://github.com/rust-num/num-bigint

-
-
-

num-derive 0.4.2

-

License: Apache License 2.0

-

Source: https://github.com/rust-num/num-derive

-
-
-

num-integer 0.1.46

-

License: Apache License 2.0

-

Source: https://github.com/rust-num/num-integer

-
-
-

num-traits 0.2.19

-

License: Apache License 2.0

-

Source: https://github.com/rust-num/num-traits

-
-
-

num_cpus 1.17.0

-

License: Apache License 2.0

-

Source: https://github.com/seanmonstar/num_cpus

-
-
-

object 0.37.3

-

License: Apache License 2.0

-

Source: https://github.com/gimli-rs/object

-
-
-

once_cell 1.21.4

-

License: Apache License 2.0

-

Source: https://github.com/matklad/once_cell

-
-
-

openssl-probe 0.2.1

-

License: Apache License 2.0

-

Source: https://github.com/rustls/openssl-probe

-
-
-

ordered-stream 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/danieldg/ordered-stream

-
-
-

parking 2.2.1

-

License: Apache License 2.0

-

Source: https://github.com/smol-rs/parking

-
-
-

parking_lot 0.12.5

-

License: Apache License 2.0

-

Source: https://github.com/Amanieu/parking_lot

-
-
-

parking_lot_core 0.9.12

-

License: Apache License 2.0

-

Source: https://github.com/Amanieu/parking_lot

-
-
-

percent-encoding 2.3.2

-

License: Apache License 2.0

-

Source: https://github.com/servo/rust-url/

-
-
-

pkg-config 0.3.33

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/pkg-config-rs

-
-
-

regex-automata 0.4.14

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/regex

-
-
-

regex-syntax 0.8.10

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/regex

-
-
-

regex 1.12.3

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/regex

-
-
-

rustc-demangle 0.1.27

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/rustc-demangle

-
-
-

rustc_version 0.4.1

-

License: Apache License 2.0

-

Source: https://github.com/djc/rustc-version-rs

-
-
-

rustix 1.1.4

-

License: Apache License 2.0

-

Source: https://github.com/bytecodealliance/rustix

-
-
-

rustls-native-certs 0.8.3

-

License: Apache License 2.0

-

Source: https://github.com/rustls/rustls-native-certs

-
-
-

rustls 0.23.40

-

License: Apache License 2.0

-

Source: https://github.com/rustls/rustls

-
-
-

scopeguard 1.2.0

-

License: Apache License 2.0

-

Source: https://github.com/bluss/scopeguard

-
-
-

security-framework-sys 2.17.0

-

License: Apache License 2.0

-

Source: https://github.com/kornelski/rust-security-framework

-
-
-

security-framework 2.11.1

-

License: Apache License 2.0

-

Source: https://github.com/kornelski/rust-security-framework

-
-
-

security-framework 3.7.0

-

License: Apache License 2.0

-

Source: https://github.com/kornelski/rust-security-framework

-
-
-

signal-hook-registry 1.4.8

-

License: Apache License 2.0

-

Source: https://github.com/vorner/signal-hook

-
-
-

simd_cesu8 1.1.1

-

License: Apache License 2.0

-

Source: https://github.com/seancroach/simd_cesu8

-
-
-

smallvec 1.15.1

-

License: Apache License 2.0

-

Source: https://github.com/servo/rust-smallvec

-
-
-

socket2 0.6.3

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/socket2

-
-
-

stable_deref_trait 1.2.1

-

License: Apache License 2.0

-

Source: https://github.com/storyyeller/stable_deref_trait

-
-
-

system-configuration-sys 0.6.0

-

License: Apache License 2.0

-

Source: https://github.com/mullvad/system-configuration-rs

-
-
-

system-configuration 0.7.0

-

License: Apache License 2.0

-

Source: https://github.com/mullvad/system-configuration-rs

-
-
-

tempfile 3.27.0

-

License: Apache License 2.0

-

Source: https://github.com/Stebalien/tempfile

-
-
-

thread_local 1.1.9

-

License: Apache License 2.0

-

Source: https://github.com/Amanieu/thread_local-rs

-
-
-

threadpool 1.8.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-threadpool/rust-threadpool

-
-
-

url 2.5.8

-

License: Apache License 2.0

-

Source: https://github.com/servo/rust-url

-
-
-

uuid 1.23.1

-

License: Apache License 2.0

-

Source: https://github.com/uuid-rs/uuid

-
-
-

version_check 0.9.5

-

License: Apache License 2.0

-

Source: https://github.com/SergioBenitez/version_check

-
-
-

ff 0.13.1

-

License: Apache License 2.0

-

Source: https://github.com/zkcrypto/ff

-
-
-

hashlink 0.9.1

-

License: Apache License 2.0

-

Source: https://github.com/kyren/hashlink

-
-
-

bit-vec 0.6.3

-

License: Apache License 2.0

-

Source: https://github.com/contain-rs/bit-vec

-
-
-

minimal-lexical 0.2.1

-

License: Apache License 2.0

-

Source: https://github.com/Alexhuszagh/minimal-lexical

-
-
-

hkdf 0.12.4

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/KDFs/

-
-
-

aes 0.8.4

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/block-ciphers

-
-
-

base16ct 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/base16ct

-
-
-

base64ct 1.8.3

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats

-
-
-

block-buffer 0.10.4

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

chacha20 0.10.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/stream-ciphers

-
-
-

chacha20 0.9.1

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/stream-ciphers

-
-
-

chacha20poly1305 0.10.1

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/AEADs/tree/master/chacha20poly1305

-
-
-

cipher 0.4.4

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits

-
-
-

cmac 0.7.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/MACs

-
-
-

const-oid 0.9.6

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/const-oid

-
-
-

cpufeatures 0.2.17

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

cpufeatures 0.3.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

crypto-bigint 0.5.5

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/crypto-bigint

-
-
-

crypto-common 0.1.7

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits

-
-
-

ctr 0.9.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/block-modes

-
-
-

dbl 0.3.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

der 0.7.10

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/der

-
-
-

digest 0.10.7

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits

-
-
-

digest 0.9.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits

-
-
-

eax 0.5.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/AEADs

-
-
-

elliptic-curve 0.13.8

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits/tree/master/elliptic-curve

-
-
-

hmac 0.12.1

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/MACs

-
-
-

inout 0.1.4

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

md-5 0.10.6

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/hashes

-
-
-

opaque-debug 0.3.1

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/utils

-
-
-

p256 0.13.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/elliptic-curves/tree/master/p256

-
-
-

pem-rfc7468 0.7.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/pem-rfc7468

-
-
-

pkcs8 0.10.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/pkcs8

-
-
-

poly1305 0.8.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/universal-hashes

-
-
-

primeorder 0.13.6

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/elliptic-curves/tree/master/primeorder

-
-
-

sec1 0.7.3

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/sec1

-
-
-

sha-1 0.10.1

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/hashes

-
-
-

sha2 0.10.9

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/hashes

-
-
-

signature 2.2.0

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits/tree/master/signature

-
-
-

spki 0.7.3

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/formats/tree/master/spki

-
-
-

universal-hash 0.5.1

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits

-
-
-

aead 0.5.2

-

License: Apache License 2.0

-

Source: https://github.com/RustCrypto/traits

-
-
-

rand_core 0.10.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/rand_core

-
-
-

rand_core 0.6.4

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/rand

-
-
-

getrandom 0.2.17

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/getrandom

-
-
-

getrandom 0.3.4

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/getrandom

-
-
-

getrandom 0.4.2

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/getrandom

-
-
-

rand_chacha 0.3.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/rand

-
-
-

adler2 2.0.1

-

License: Apache License 2.0

-

Source: https://github.com/oyvindln/adler2

-
-
-

proc-macro-crate 3.5.0

-

License: Apache License 2.0

-

Source: https://github.com/bkchr/proc-macro-crate

-
-
-

vcpkg 0.2.15

-

License: Apache License 2.0

-

Source: https://github.com/mcgoo/vcpkg-rs

-
-
-

enumflags2 0.7.12

-

License: Apache License 2.0

-

Source: https://github.com/meithecatte/enumflags2

-
-
-

enumflags2_derive 0.7.12

-

License: Apache License 2.0

-

Source: https://github.com/meithecatte/enumflags2

-
-
-

dbus 0.9.11

-

License: Apache License 2.0

-

Source: https://github.com/diwic/dbus-rs

-
-
-

libdbus-sys 0.2.7

-

License: Apache License 2.0

-

Source: https://github.com/diwic/dbus-rs

-
-
-

android_log-sys 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/nercury/android_log-sys-rs

-
-
-

android_log-sys 0.3.2

-

License: Apache License 2.0

-

Source: https://github.com/rust-mobile/android_log-sys-rs

-
-
-

android_logger 0.15.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-mobile/android_logger-rs

-
-
-

ts-bookkeeping 0.1.0

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/tsclientlib/tree/master/utils/ts-bookkeeping

-
-
-

tsclientlib 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/tsclientlib

-
-
-

tsproto-packets 0.1.0

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/tsclientlib/tree/master/utils/tsproto-packets

-
-
-

tsproto-types 0.1.0

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/tsclientlib/tree/master/utils/tsproto-types

-
-
-

tsproto 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/tsclientlib

-
-
-

chanora_core 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

chanora_audio 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

chanora_bridge 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

chanora_diagnostics 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

chanora_protocol 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

chanora_state 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

chanora_storage 0.0.1-pre

-

License: Apache License 2.0

-

Source: https://github.com/anomalyco/opencode

-
-
-

alsa 0.9.1

-

License: Apache License 2.0

-

Source: https://github.com/diwic/alsa-rs

-
-
-

anyhow 1.0.102

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/anyhow

-
-
-

async-trait 0.1.89

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/async-trait

-
-
-

aws-lc-sys 0.41.0

-

License: Apache License 2.0

-

Source: https://github.com/aws/aws-lc-rs

-
-
-

cesu8 1.1.0

-

License: Apache License 2.0

-

Source: https://github.com/emk/cesu8-rs

-
-
-

dart-sys 4.1.5

-

License: Apache License 2.0

-

Source: https://github.com/dart-sys/dart-sys

-
-
-

dasp_sample 0.11.0

-

License: Apache License 2.0

-

Source: https://github.com/rustaudio/sample.git

-
-
-

dunce 1.0.5

-

License: Apache License 2.0

-

Source: https://gitlab.com/kornelski/dunce

-
-
-

itoa 1.0.18

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/itoa

-
-
-

jni-macros 0.22.4

-

License: Apache License 2.0

-

Source: https://github.com/jni-rs/jni-rs

-
-
-

jni-sys-macros 0.4.1

-

License: Apache License 2.0

-

Source: https://github.com/jni-rs/jni-sys

-
-
-

jni 0.22.4

-

License: Apache License 2.0

-

Source: https://github.com/jni-rs/jni-rs

-
-
-

libc 0.2.186

-

License: Apache License 2.0

-

Source: https://github.com/rust-lang/libc

-
-
-

linux-keyutils 0.2.5

-

License: Apache License 2.0

-

Source: https://github.com/landhb/linux-keyutils

-
-
-

mach2 0.4.3

-

License: Apache License 2.0

-

Source: https://github.com/JohnTitor/mach2

-
-
-

miniz_oxide 0.8.9

-

License: Apache License 2.0

-

Source: https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide

-
-
-

ndk-context 0.1.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-windowing/android-ndk-rs

-
-
-

ndk-sys 0.6.0+11769913

-

License: Apache License 2.0

-

Source: https://github.com/rust-mobile/ndk

-
-
-

ndk 0.9.0

-

License: Apache License 2.0

-

Source: https://github.com/rust-mobile/ndk

-
-
-

num-conv 0.2.1

-

License: Apache License 2.0

-

Source: https://github.com/jhpratt/num-conv

-
-
-

num_enum 0.7.6

-

License: Apache License 2.0

-

Source: https://github.com/illicitonion/num_enum

-
-
-

num_enum_derive 0.7.6

-

License: Apache License 2.0

-

Source: https://github.com/illicitonion/num_enum

-
-
-

objc2-audio-toolbox 0.3.2

-

License: Apache License 2.0

-

Source: https://github.com/madsmtm/objc2

-
-
-

objc2-core-audio-types 0.3.2

-

License: Apache License 2.0

-

Source: https://github.com/madsmtm/objc2

-
-
-

objc2-core-audio 0.3.2

-

License: Apache License 2.0

-

Source: https://github.com/madsmtm/objc2

-
-
-

objc2-core-foundation 0.3.2

-

License: Apache License 2.0

-

Source: https://github.com/madsmtm/objc2

-
-
-

pin-project-lite 0.2.17

-

License: Apache License 2.0

-

Source: https://github.com/taiki-e/pin-project-lite

-
-
-

portable-atomic 1.13.1

-

License: Apache License 2.0

-

Source: https://github.com/taiki-e/portable-atomic

-
-
-

proc-macro2 1.0.106

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/proc-macro2

-
-
-

quicklz 0.3.1

-

License: Apache License 2.0

-

Source: https://github.com/ReSpeak/quicklz

-
-
-

quote 1.0.45

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/quote

-
-
-

rand 0.10.1

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/rand

-
-
-

rand 0.8.6

-

License: Apache License 2.0

-

Source: https://github.com/rust-random/rand

-
-
-

ref-cast-impl 1.0.25

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/ref-cast

-
-
-

ref-cast 1.0.25

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/ref-cast

-
-
-

rustls-platform-verifier-android 0.1.1

-

License: Apache License 2.0

-

Source: https://github.com/rustls/rustls-platform-verifier

-
-
-

rustversion 1.0.22

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/rustversion

-
-
-

ryu 1.0.23

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/ryu

-
-
-

semver 1.0.28

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/semver

-
-
-

serde 1.0.228

-

License: Apache License 2.0

-

Source: https://github.com/serde-rs/serde

-
-
-

serde_core 1.0.228

-

License: Apache License 2.0

-

Source: https://github.com/serde-rs/serde

-
-
-

serde_derive 1.0.228

-

License: Apache License 2.0

-

Source: https://github.com/serde-rs/serde

-
-
-

serde_repr 0.1.20

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/serde-repr

-
-
-

shlex 1.3.0

-

License: Apache License 2.0

-

Source: https://github.com/comex/rust-shlex

-
-
-

simdutf8 0.1.5

-

License: Apache License 2.0

-

Source: https://github.com/rusticstuff/simdutf8

-
-
-

syn 2.0.117

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/syn

-
-
-

sync_wrapper 1.0.2

-

License: Apache License 2.0

-

Source: https://github.com/Actyx/sync_wrapper

-
-
-

tagptr 0.2.0

-

License: Apache License 2.0

-

Source: https://github.com/oliver-giersch/tagptr.git

-
-
-

thiserror-impl 1.0.69

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/thiserror

-
-
-

thiserror-impl 2.0.18

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/thiserror

-
-
-

thiserror 1.0.69

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/thiserror

-
-
-

thiserror 2.0.18

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/thiserror

-
-
-

time-core 0.1.8

-

License: Apache License 2.0

-

Source: https://github.com/time-rs/time

-
-
-

time-macros 0.2.27

-

License: Apache License 2.0

-

Source: https://github.com/time-rs/time

-
-
-

time 0.3.47

-

License: Apache License 2.0

-

Source: https://github.com/time-rs/time

-
-
-

unicode-ident 1.0.24

-

License: Apache License 2.0

-

Source: https://github.com/dtolnay/unicode-ident

-
-
-

widestring 1.2.1

-

License: Apache License 2.0

-

Source: https://github.com/VoidStarKat/widestring-rs

-
-
-

subtle-ng 2.5.0

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/dalek-cryptography/subtle

-
-
-

subtle 2.6.1

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/dalek-cryptography/subtle

-
-
-

aws-lc-sys 0.41.0

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/aws/aws-lc-rs

-
-
-

curve25519-dalek-ng 4.1.1

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/zkcrypto/curve25519-dalek-ng

-
-
-

git-testament-derive 0.2.1

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/kinnison/git-testament/

-
-
-

git-testament 0.2.6

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/kinnison/git-testament/

-
-
-

encoding_rs 0.8.35

-

License: BSD 3-Clause "New" or "Revised" License

-

Source: https://github.com/hsivonen/encoding_rs

-
-
-

untrusted 0.9.0

-

License: ISC License

-

Source: https://github.com/briansmith/untrusted

-
-
-

simple_asn1 0.6.4

-

License: ISC License

-

Source: https://github.com/acw/simple_asn1

-
-
-

rustls-webpki 0.103.13

-

License: ISC License

-

Source: https://github.com/rustls/webpki

-
-
-

audiopus_sys 0.2.2

-

License: ISC License

-

Source: https://github.com/lakelezz/audiopus_sys.git

-
-
-

audiopus 0.3.0-rc.0

-

License: ISC License

-

Source: https://github.com/lakelezz/audiopus.git

-
-
-

aws-lc-rs 1.17.0

-

License: ISC License

-

Source: https://github.com/aws/aws-lc-rs

-
-
-

aws-lc-sys 0.41.0

-

License: ISC License

-

Source: https://github.com/aws/aws-lc-rs

-
-
-

uds_windows 1.2.1

-

License: MIT License

-

Source: https://github.com/haraldh/rust_uds_windows

-
-
-

mio 1.2.0

-

License: MIT License

-

Source: https://github.com/tokio-rs/mio

-
-
-

nom 7.1.3

-

License: MIT License

-

Source: https://github.com/Geal/nom

-
-
-

libsqlite3-sys 0.30.1

-

License: MIT License

-

Source: https://github.com/rusqlite/rusqlite

-
-
-

rusqlite 0.32.1

-

License: MIT License

-

Source: https://github.com/rusqlite/rusqlite

-
-
-

hyper 1.9.0

-

License: MIT License

-

Source: https://github.com/hyperium/hyper

-
-
-

schannel 0.1.29

-

License: MIT License

-

Source: https://github.com/steffengy/schannel-rs

-
-
-

memoffset 0.9.1

-

License: MIT License

-

Source: https://github.com/Gilnaa/memoffset

-
-
-

h2 0.4.14

-

License: MIT License

-

Source: https://github.com/hyperium/h2

-
-
-

bytes 1.11.1

-

License: MIT License

-

Source: https://github.com/tokio-rs/bytes

-
-
-

want 0.3.1

-

License: MIT License

-

Source: https://github.com/seanmonstar/want

-
-
-

try-lock 0.2.5

-

License: MIT License

-

Source: https://github.com/seanmonstar/try-lock

-
-
-

slab 0.4.12

-

License: MIT License

-

Source: https://github.com/tokio-rs/slab

-
-
-

sharded-slab 0.1.7

-

License: MIT License

-

Source: https://github.com/hawkw/sharded-slab

-
-
-

matchers 0.2.0

-

License: MIT License

-

Source: https://github.com/hawkw/matchers

-
-
-

tracing-attributes 0.1.31

-

License: MIT License

-

Source: https://github.com/tokio-rs/tracing

-
-
-

tracing-core 0.1.36

-

License: MIT License

-

Source: https://github.com/tokio-rs/tracing

-
-
-

tracing-log 0.2.0

-

License: MIT License

-

Source: https://github.com/tokio-rs/tracing

-
-
-

tracing-subscriber 0.3.23

-

License: MIT License

-

Source: https://github.com/tokio-rs/tracing

-
-
-

tracing 0.1.44

-

License: MIT License

-

Source: https://github.com/tokio-rs/tracing

-
-
-

tower-layer 0.3.3

-

License: MIT License

-

Source: https://github.com/tower-rs/tower

-
-
-

tower-service 0.3.3

-

License: MIT License

-

Source: https://github.com/tower-rs/tower

-
-
-

tower 0.5.3

-

License: MIT License

-

Source: https://github.com/tower-rs/tower

-
-
-

tower-http 0.6.10

-

License: MIT License

-

Source: https://github.com/tower-rs/tower-http

-
-
-

http-body 1.0.1

-

License: MIT License

-

Source: https://github.com/hyperium/http-body

-
-
-

http-body-util 0.1.3

-

License: MIT License

-

Source: https://github.com/hyperium/http-body

-
-
-

delegate-attr 0.3.0

-

License: MIT License

-

Source: https://github.com/upsuper/delegate-attr

-
-
-

hyper-util 0.1.20

-

License: MIT License

-

Source: https://github.com/hyperium/hyper-util

-
-
-

zbus 5.15.0

-

License: MIT License

-

Source: https://github.com/z-galaxy/zbus/

-
-
-

zbus_macros 5.15.0

-

License: MIT License

-

Source: https://github.com/z-galaxy/zbus/

-
-
-

zbus_names 4.3.2

-

License: MIT License

-

Source: https://github.com/z-galaxy/zbus/

-
-
-

zvariant 5.11.0

-

License: MIT License

-

Source: https://github.com/z-galaxy/zbus/

-
-
-

zvariant_derive 5.11.0

-

License: MIT License

-

Source: https://github.com/z-galaxy/zbus/

-
-
-

synstructure 0.13.2

-

License: MIT License

-

Source: https://github.com/mystor/synstructure

-
-
-

fs_extra 1.3.0

-

License: MIT License

-

Source: https://github.com/webdesus/fs_extra

-
-
-

alsa-sys 0.3.1

-

License: MIT License

-

Source: https://github.com/diwic/alsa-sys

-
-
-

dashmap 5.5.3

-

License: MIT License

-

Source: https://github.com/xacrimon/dashmap

-
-
-

tokio-macros 2.7.0

-

License: MIT License

-

Source: https://github.com/tokio-rs/tokio

-
-
-

oslog 0.2.0

-

License: MIT License

-

Source: https://github.com/steven-joruk/oslog

-
-
-

flutter_rust_bridge 2.12.0

-

License: MIT License

-

Source: https://github.com/fzyzcjy/flutter_rust_bridge

-
-
-

flutter_rust_bridge_macros 2.12.0

-

License: MIT License

-

Source: https://github.com/fzyzcjy/flutter_rust_bridge

-
-
-

objc2-encode 4.1.0

-

License: MIT License

-

Source: https://github.com/madsmtm/objc2

-
-
-

objc2-foundation 0.3.2

-

License: MIT License

-

Source: https://github.com/madsmtm/objc2

-
-
-

objc2 0.6.4

-

License: MIT License

-

Source: https://github.com/madsmtm/objc2

-
-
-

build-target 0.4.0

-

License: MIT License

-

Source: https://github.com/OpenByteDev/build-target

-
-
-

tokio-stream 0.1.18

-

License: MIT License

-

Source: https://github.com/tokio-rs/tokio

-
-
-

tokio-util 0.7.18

-

License: MIT License

-

Source: https://github.com/tokio-rs/tokio

-
-
-

tokio 1.52.3

-

License: MIT License

-

Source: https://github.com/tokio-rs/tokio

-
-
-

endi 1.1.1

-

License: MIT License

-

Source: https://github.com/zeenix/endi

-
-
-

zvariant_utils 3.3.1

-

License: MIT License

-

Source: https://github.com/z-galaxy/zbus/

-
-
-

winnow 1.0.2

-

License: MIT License

-

Source: https://github.com/winnow-rs/winnow

-
-
-

aho-corasick 1.1.4

-

License: MIT License

-

Source: https://github.com/BurntSushi/aho-corasick

-
-
-

byteorder 1.5.0

-

License: MIT License

-

Source: https://github.com/BurntSushi/byteorder

-
-
-

csv-core 0.1.13

-

License: MIT License

-

Source: https://github.com/BurntSushi/rust-csv

-
-
-

csv 1.4.0

-

License: MIT License

-

Source: https://github.com/BurntSushi/rust-csv

-
-
-

memchr 2.8.0

-

License: MIT License

-

Source: https://github.com/BurntSushi/memchr

-
-
-

walkdir 2.5.0

-

License: MIT License

-

Source: https://github.com/BurntSushi/walkdir

-
-
-

combine 4.6.7

-

License: MIT License

-

Source: https://github.com/Marwes/combine

-
-
-

data-encoding 2.11.0

-

License: MIT License

-

Source: https://github.com/ia0/data-encoding

-
-
-

aws-lc-sys 0.41.0

-

License: MIT License

-

Source: https://github.com/aws/aws-lc-rs

-
-
-

same-file 1.0.6

-

License: MIT License

-

Source: https://github.com/BurntSushi/same-file

-
-
-

winapi-util 0.1.11

-

License: MIT License

-

Source: https://github.com/BurntSushi/winapi-util

-
-
-

nu-ansi-term 0.50.3

-

License: MIT License

-

Source: https://github.com/nushell/nu-ansi-term

-
-
-

generic-array 0.14.7

-

License: MIT License

-

Source: https://github.com/fizyk20/generic-array.git

-
-
-

unicode-ident 1.0.24

-

License: Unicode License v3

-

Source: https://github.com/dtolnay/unicode-ident

-
-
-

icu_collections 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

icu_locale_core 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

icu_normalizer 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

icu_normalizer_data 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

icu_properties 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

icu_properties_data 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

icu_provider 2.2.0

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

litemap 0.8.2

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

potential_utf 0.1.5

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

tinystr 0.8.3

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

writeable 0.6.3

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

yoke-derive 0.8.2

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

yoke 0.8.2

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

zerofrom-derive 0.1.7

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

zerofrom 0.1.8

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

zerotrie 0.2.4

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

zerovec-derive 0.11.3

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
-
-

zerovec 0.11.6

-

License: Unicode License v3

-

Source: https://github.com/unicode-org/icu4x

-
- -

Full license texts

-

Apache License 2.0

-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2023 Jacob Pratt et al.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2024 Jacob Pratt et al.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright (c) Microsoft Corporation.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2020 - 2026 Tatsuya Kawano
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2020 Tomasz "Soveu" Marx
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2023 The Fuchsia Authors
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2017 Juniper Networks, Inc.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   Copyright 2019 Yoshua Wuyts
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   Copyright 2020 Yoshua Wuyts
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-

Apache License 2.0

-
                                 Apache License
-                           Version 2.0, January 2004
-                        https://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       https://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright (c) 2016 Alex Crichton
-Copyright (c) 2017 The Tokio Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2014 Paho Lurie-Gregg
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2016 Sean McArthur
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2017 http-rs authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2017 quininer kel
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2018 The pin-utils authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2018-2022 RustCrypto Developers
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2019 The CryptoCorrosion Contributors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright 2023 Dirkjan Ochtman
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [2017] [keyring developers]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     https://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     https://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     https://www.apache.org/licenses/LICENSE-2.0
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-

Apache License 2.0

-
Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. 
-
-You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-
-Copyright 2017-2023 Maik Klein, Maja Kądziołka
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. 
-
-You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-
-Copyright [2017] [Maik Klein]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2014-2018 David Henningsson <diwic@ubuntu.com> and other contributors
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-

Apache License 2.0

-
Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction,
-and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by
-the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all
-other entities that control, are controlled by, or are under common
-control with that entity. For the purposes of this definition,
-"control" means (i) the power, direct or indirect, to cause the
-direction or management of such entity, whether by contract or
-otherwise, or (ii) ownership of fifty percent (50%) or more of the
-outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity
-exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications,
-including but not limited to software source code, documentation
-source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical
-transformation or translation of a Source form, including but
-not limited to compiled object code, generated documentation,
-and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or
-Object form, made available under the License, as indicated by a
-copyright notice that is included in or attached to the work
-(an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object
-form, that is based on (or derived from) the Work and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship. For the purposes
-of this License, Derivative Works shall not include works that remain
-separable from, or merely link (or bind by name) to the interfaces of,
-the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including
-the original version of the Work and any modifications or additions
-to that Work or Derivative Works thereof, that is intentionally
-submitted to Licensor for inclusion in the Work by the copyright owner
-or by an individual or Legal Entity authorized to submit on behalf of
-the copyright owner. For the purposes of this definition, "submitted"
-means any form of electronic, verbal, or written communication sent
-to the Licensor or its representatives, including but not limited to
-communication on electronic mailing lists, source code control systems,
-and issue tracking systems that are managed by, or on behalf of, the
-Licensor for the purpose of discussing and improving the Work, but
-excluding communication that is conspicuously marked or otherwise
-designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity
-on behalf of whom a Contribution has been received by Licensor and
-subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-copyright license to reproduce, prepare Derivative Works of,
-publicly display, publicly perform, sublicense, and distribute the
-Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-(except as stated in this section) patent license to make, have made,
-use, offer to sell, sell, import, and otherwise transfer the Work,
-where such license applies only to those patent claims licensable
-by such Contributor that are necessarily infringed by their
-Contribution(s) alone or by combination of their Contribution(s)
-with the Work to which such Contribution(s) was submitted. If You
-institute patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Work
-or a Contribution incorporated within the Work constitutes direct
-or contributory patent infringement, then any patent licenses
-granted to You under this License for that Work shall terminate
-as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-Work or Derivative Works thereof in any medium, with or without
-modifications, and in Source or Object form, provided that You
-meet the following conditions:
-
-(a) You must give any other recipients of the Work or
-Derivative Works a copy of this License; and
-
-(b) You must cause any modified files to carry prominent notices
-stating that You changed the files; and
-
-(c) You must retain, in the Source form of any Derivative Works
-that You distribute, all copyright, patent, trademark, and
-attribution notices from the Source form of the Work,
-excluding those notices that do not pertain to any part of
-the Derivative Works; and
-
-(d) If the Work includes a "NOTICE" text file as part of its
-distribution, then any Derivative Works that You distribute must
-include a readable copy of the attribution notices contained
-within such NOTICE file, excluding those notices that do not
-pertain to any part of the Derivative Works, in at least one
-of the following places: within a NOTICE text file distributed
-as part of the Derivative Works; within the Source form or
-documentation, if provided along with the Derivative Works; or,
-within a display generated by the Derivative Works, if and
-wherever such third-party notices normally appear. The contents
-of the NOTICE file are for informational purposes only and
-do not modify the License. You may add Your own attribution
-notices within Derivative Works that You distribute, alongside
-or as an addendum to the NOTICE text from the Work, provided
-that such additional attribution notices cannot be construed
-as modifying the License.
-
-You may add Your own copyright statement to Your modifications and
-may provide additional or different license terms and conditions
-for use, reproduction, or distribution of Your modifications, or
-for any such Derivative Works as a whole, provided Your use,
-reproduction, and distribution of the Work otherwise complies with
-the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-any Contribution intentionally submitted for inclusion in the Work
-by You to the Licensor shall be under the terms and conditions of
-this License, without any additional terms or conditions.
-Notwithstanding the above, nothing herein shall supersede or modify
-the terms of any separate license agreement you may have executed
-with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-names, trademarks, service marks, or product names of the Licensor,
-except as required for reasonable and customary use in describing the
-origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-agreed to in writing, Licensor provides the Work (and each
-Contributor provides its Contributions) on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-implied, including, without limitation, any warranties or conditions
-of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-PARTICULAR PURPOSE. You are solely responsible for determining the
-appropriateness of using or redistributing the Work and assume any
-risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-whether in tort (including negligence), contract, or otherwise,
-unless required by applicable law (such as deliberate and grossly
-negligent acts) or agreed to in writing, shall any Contributor be
-liable to You for damages, including any direct, indirect, special,
-incidental, or consequential damages of any character arising as a
-result of this License or out of the use or inability to use the
-Work (including but not limited to damages for loss of goodwill,
-work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses), even if such Contributor
-has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-the Work or Derivative Works thereof, You may choose to offer,
-and charge a fee for, acceptance of support, warranty, indemnity,
-or other liability obligations and/or rights consistent with this
-License. However, in accepting such obligations, You may act only
-on Your own behalf and on Your sole responsibility, not on behalf
-of any other Contributor, and only if You agree to indemnify,
-defend, and hold each Contributor harmless for any liability
-incurred by, or claims asserted against, such Contributor by reason
-of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-To apply the Apache License to your work, attach the following
-boilerplate notice, with the fields enclosed by brackets "{}"
-replaced with your own identifying information. (Don't include
-the brackets!)  The text should be enclosed in the appropriate
-comment syntax for the file format. We also recommend that a
-file or class name and description of purpose be included on the
-same "printed page" as the copyright notice for easier
-identification within third-party archives.
-
-Copyright 2016 The android_log_sys Developers
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction,
-and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by
-the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all
-other entities that control, are controlled by, or are under common
-control with that entity. For the purposes of this definition,
-"control" means (i) the power, direct or indirect, to cause the
-direction or management of such entity, whether by contract or
-otherwise, or (ii) ownership of fifty percent (50%) or more of the
-outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity
-exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications,
-including but not limited to software source code, documentation
-source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical
-transformation or translation of a Source form, including but
-not limited to compiled object code, generated documentation,
-and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or
-Object form, made available under the License, as indicated by a
-copyright notice that is included in or attached to the work
-(an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object
-form, that is based on (or derived from) the Work and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship. For the purposes
-of this License, Derivative Works shall not include works that remain
-separable from, or merely link (or bind by name) to the interfaces of,
-the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including
-the original version of the Work and any modifications or additions
-to that Work or Derivative Works thereof, that is intentionally
-submitted to Licensor for inclusion in the Work by the copyright owner
-or by an individual or Legal Entity authorized to submit on behalf of
-the copyright owner. For the purposes of this definition, "submitted"
-means any form of electronic, verbal, or written communication sent
-to the Licensor or its representatives, including but not limited to
-communication on electronic mailing lists, source code control systems,
-and issue tracking systems that are managed by, or on behalf of, the
-Licensor for the purpose of discussing and improving the Work, but
-excluding communication that is conspicuously marked or otherwise
-designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity
-on behalf of whom a Contribution has been received by Licensor and
-subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-copyright license to reproduce, prepare Derivative Works of,
-publicly display, publicly perform, sublicense, and distribute the
-Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-(except as stated in this section) patent license to make, have made,
-use, offer to sell, sell, import, and otherwise transfer the Work,
-where such license applies only to those patent claims licensable
-by such Contributor that are necessarily infringed by their
-Contribution(s) alone or by combination of their Contribution(s)
-with the Work to which such Contribution(s) was submitted. If You
-institute patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Work
-or a Contribution incorporated within the Work constitutes direct
-or contributory patent infringement, then any patent licenses
-granted to You under this License for that Work shall terminate
-as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-Work or Derivative Works thereof in any medium, with or without
-modifications, and in Source or Object form, provided that You
-meet the following conditions:
-
-(a) You must give any other recipients of the Work or
-Derivative Works a copy of this License; and
-
-(b) You must cause any modified files to carry prominent notices
-stating that You changed the files; and
-
-(c) You must retain, in the Source form of any Derivative Works
-that You distribute, all copyright, patent, trademark, and
-attribution notices from the Source form of the Work,
-excluding those notices that do not pertain to any part of
-the Derivative Works; and
-
-(d) If the Work includes a "NOTICE" text file as part of its
-distribution, then any Derivative Works that You distribute must
-include a readable copy of the attribution notices contained
-within such NOTICE file, excluding those notices that do not
-pertain to any part of the Derivative Works, in at least one
-of the following places: within a NOTICE text file distributed
-as part of the Derivative Works; within the Source form or
-documentation, if provided along with the Derivative Works; or,
-within a display generated by the Derivative Works, if and
-wherever such third-party notices normally appear. The contents
-of the NOTICE file are for informational purposes only and
-do not modify the License. You may add Your own attribution
-notices within Derivative Works that You distribute, alongside
-or as an addendum to the NOTICE text from the Work, provided
-that such additional attribution notices cannot be construed
-as modifying the License.
-
-You may add Your own copyright statement to Your modifications and
-may provide additional or different license terms and conditions
-for use, reproduction, or distribution of Your modifications, or
-for any such Derivative Works as a whole, provided Your use,
-reproduction, and distribution of the Work otherwise complies with
-the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-any Contribution intentionally submitted for inclusion in the Work
-by You to the Licensor shall be under the terms and conditions of
-this License, without any additional terms or conditions.
-Notwithstanding the above, nothing herein shall supersede or modify
-the terms of any separate license agreement you may have executed
-with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-names, trademarks, service marks, or product names of the Licensor,
-except as required for reasonable and customary use in describing the
-origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-agreed to in writing, Licensor provides the Work (and each
-Contributor provides its Contributions) on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-implied, including, without limitation, any warranties or conditions
-of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-PARTICULAR PURPOSE. You are solely responsible for determining the
-appropriateness of using or redistributing the Work and assume any
-risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-whether in tort (including negligence), contract, or otherwise,
-unless required by applicable law (such as deliberate and grossly
-negligent acts) or agreed to in writing, shall any Contributor be
-liable to You for damages, including any direct, indirect, special,
-incidental, or consequential damages of any character arising as a
-result of this License or out of the use or inability to use the
-Work (including but not limited to damages for loss of goodwill,
-work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses), even if such Contributor
-has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-the Work or Derivative Works thereof, You may choose to offer,
-and charge a fee for, acceptance of support, warranty, indemnity,
-or other liability obligations and/or rights consistent with this
-License. However, in accepting such obligations, You may act only
-on Your own behalf and on Your sole responsibility, not on behalf
-of any other Contributor, and only if You agree to indemnify,
-defend, and hold each Contributor harmless for any liability
-incurred by, or claims asserted against, such Contributor by reason
-of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-To apply the Apache License to your work, attach the following
-boilerplate notice, with the fields enclosed by brackets "{}"
-replaced with your own identifying information. (Don't include
-the brackets!)  The text should be enclosed in the appropriate
-comment syntax for the file format. We also recommend that a
-file or class name and description of purpose be included on the
-same "printed page" as the copyright notice for easier
-identification within third-party archives.
-
-Copyright 2016 The android_logger Developers
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

Apache License 2.0

-
Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-     (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-     (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
-
-     (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-     (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
-
-     You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!)  The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-

BSD 3-Clause "New" or "Revised" License

-
Copyright (c) 2016-2017 Isis Agora Lovecruft, Henry de Valence. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-
-

BSD 3-Clause "New" or "Revised" License

-
Copyright (c) 2016-2017 Isis Agora Lovecruft, Henry de Valence. All rights reserved.
-Copyright (c) 2016-2024 Isis Agora Lovecruft. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-
-

BSD 3-Clause "New" or "Revised" License

-
Copyright (c) <year> <owner>. 
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-

BSD 3-Clause "New" or "Revised" License

-
Copyright © WHATWG (Apple, Google, Mozilla, Microsoft).
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-

ISC License

-
// Copyright 2015-2016 Brian Smith.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
-// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-

ISC License

-
Copyright (c) 2017 Adam Wick
-
-Permission to use, copy, modify, and/or distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright notice
-and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-

ISC License

-
Except as otherwise noted, this project is licensed under the following
-(ISC-style) terms:
-
-Copyright 2015 Brian Smith.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-The files under third-party/chromium are licensed as described in
-third-party/chromium/LICENSE.
-
-

ISC License

-
ISC License
-
-Copyright (c) 2019, Lakelezz
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-

ISC License

-
ISC License
-
-Copyright (c) 2019, Lakelezz
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-

ISC License

-
ISC License:
-
-Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC")
-Copyright (c) 1995-2003 by Internet Software Consortium
-
-Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-

MIT License

-
    MIT License
-
-    Copyright (c) Microsoft Corporation. All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in all
-    copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-    SOFTWARE
-
-

MIT License

-
Copyright (c) 2014 Carl Lerche and other MIO contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2014-2019 Geoffroy Couprie
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2014-2021 The rusqlite developers
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2014-2026 Sean McArthur
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2015 steffengy
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2017 Gilad Naaman
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-

MIT License

-
Copyright (c) 2017 h2 authors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2018 Carl Lerche
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2018-2019 Sean McArthur
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-

MIT License

-
Copyright (c) 2018-2023 Sean McArthur
-Copyright (c) 2016 Alex Crichton
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-

MIT License

-
Copyright (c) 2019 Carl Lerche
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019 Eliza Weisman
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019 Eliza Weisman
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019 Tokio Contributors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019 Tower Contributors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019-2021 Tower Contributors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019-2024 Sean McArthur & Hyper Contributors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2019-2025 Sean McArthur & Hyper Contributors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2020 Xidorn Quan
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2023-2025 Sean McArthur
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Copyright 2016 Nika Layzell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) 2017 Denis Kurilenko
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) 2018 diwic
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) 2019 Acrimon
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) 2019 Yoshua Wuyts
-Copyright (c) Tokio Contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) 2020 Steven Joruk
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) <year> <copyright holders>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
-EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) OpenByte <development.openbyte@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
MIT License
-
-Copyright (c) Tokio Contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2015 Andrew Gallant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2015 Markus Westerlind
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2015-2020 Julien Cretin
-Copyright (c) 2017-2020 Google Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2015-2020 the fiat-crypto authors (see
-https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2017 Andrew Gallant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2014 Benjamin Sago
-Copyright (c) 2021-2022 The Nushell Project Developers
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-

MIT License

-
The MIT License (MIT)
-
-Copyright (c) 2015 Bartłomiej Kamiński
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-

Unicode License v3

-
UNICODE LICENSE V3
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright © 1991-2023 Unicode, Inc.
-
-NOTICE TO USER: Carefully read the following legal agreement. BY
-DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
-SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
-TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
-DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of data files and any associated documentation (the "Data Files") or
-software and any associated documentation (the "Software") to deal in the
-Data Files or Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, and/or sell
-copies of the Data Files or Software, and to permit persons to whom the
-Data Files or Software are furnished to do so, provided that either (a)
-this copyright and permission notice appear with all copies of the Data
-Files or Software, or (b) this copyright and permission notice appear in
-associated Documentation.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-THIRD PARTY RIGHTS.
-
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
-BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
-OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
-FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall
-not be used in advertising or otherwise to promote the sale, use or other
-dealings in these Data Files or Software without prior written
-authorization of the copyright holder.
-
-

Unicode License v3

-
UNICODE LICENSE V3
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright © 2020-2024 Unicode, Inc.
-
-NOTICE TO USER: Carefully read the following legal agreement. BY
-DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
-SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
-TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
-DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of data files and any associated documentation (the "Data Files") or
-software and any associated documentation (the "Software") to deal in the
-Data Files or Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, and/or sell
-copies of the Data Files or Software, and to permit persons to whom the
-Data Files or Software are furnished to do so, provided that either (a)
-this copyright and permission notice appear with all copies of the Data
-Files or Software, or (b) this copyright and permission notice appear in
-associated Documentation.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-THIRD PARTY RIGHTS.
-
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
-BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
-OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
-FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall
-not be used in advertising or otherwise to promote the sale, use or other
-dealings in these Data Files or Software without prior written
-authorization of the copyright holder.
-
-SPDX-License-Identifier: Unicode-3.0
-
-—
-
-Portions of ICU4X may have been adapted from ICU4C and/or ICU4J.
-ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.
-
- - - - diff --git a/docs/security/license-inventory.md b/docs/security/license-inventory.md deleted file mode 100644 index ed7dd42..0000000 --- a/docs/security/license-inventory.md +++ /dev/null @@ -1,9895 +0,0 @@ -# Chanora — Third-party license inventory - -This document enumerates every third-party crate that ships in a -release build of Chanora and the license under which Chanora -redistributes it. Generated by `cargo about generate` from -`about.toml` at the repository root. - -Chanora itself is dual-licensed under -[Apache License 2.0](../../LICENSE-APACHE) or the -[MIT License](../../LICENSE-MIT) at the recipient's option (DEC-020 -in `docs/governance/product-decision-register.md`). The crates -listed below carry their own licenses and are redistributed under -those terms. - -## Licenses in use - -| License | Crate count | -|---------|-------------| -| `Apache License 2.0` | 293 | -| `MIT License` | 64 | -| `Unicode License v3` | 19 | -| `BSD 3-Clause "New" or "Revised" License` | 7 | -| `ISC License` | 7 | - -## Crates - -| Crate | Version | License | Source | -|-------|---------|---------|--------| -| powerfmt | 0.2.0 | `Apache License 2.0` | | -| deranged | 0.5.8 | `Apache License 2.0` | | -| encoding_rs | 0.8.35 | `Apache License 2.0` | | -| tinyvec | 1.11.0 | `Apache License 2.0` | | -| utf8_iter | 1.0.4 | `Apache License 2.0` | | -| zeroize | 1.8.2 | `Apache License 2.0` | | -| zeroize_derive | 1.4.3 | `Apache License 2.0` | | -| windows-core | 0.54.0 | `Apache License 2.0` | | -| windows-link | 0.2.1 | `Apache License 2.0` | | -| windows-registry | 0.6.1 | `Apache License 2.0` | | -| windows-result | 0.1.2 | `Apache License 2.0` | | -| windows-result | 0.4.1 | `Apache License 2.0` | | -| windows-strings | 0.5.1 | `Apache License 2.0` | | -| windows-sys | 0.45.0 | `Apache License 2.0` | | -| windows-sys | 0.60.2 | `Apache License 2.0` | | -| windows-sys | 0.61.2 | `Apache License 2.0` | | -| windows-targets | 0.42.2 | `Apache License 2.0` | | -| windows-targets | 0.52.6 | `Apache License 2.0` | | -| windows-targets | 0.53.5 | `Apache License 2.0` | | -| windows | 0.54.0 | `Apache License 2.0` | | -| windows_x86_64_gnu | 0.52.6 | `Apache License 2.0` | | -| windows_x86_64_gnu | 0.53.1 | `Apache License 2.0` | | -| windows_x86_64_msvc | 0.42.2 | `Apache License 2.0` | | -| windows_x86_64_msvc | 0.52.6 | `Apache License 2.0` | | -| windows_x86_64_msvc | 0.53.1 | `Apache License 2.0` | | -| moka | 0.12.15 | `Apache License 2.0` | | -| tinyvec_macros | 0.1.1 | `Apache License 2.0` | | -| zerocopy | 0.8.48 | `Apache License 2.0` | | -| allo-isolate | 0.1.27 | `Apache License 2.0` | | -| cpal | 0.16.0 | `Apache License 2.0` | | -| rustls-platform-verifier | 0.7.0 | `Apache License 2.0` | | -| self_cell | 1.2.2 | `Apache License 2.0` | | -| tracing-android | 0.2.0 | `Apache License 2.0` | | -| ipnet | 2.12.0 | `Apache License 2.0` | | -| prefix-trie | 0.8.4 | `Apache License 2.0` | | -| env_filter | 0.1.4 | `Apache License 2.0` | | -| fallible-iterator | 0.3.0 | `Apache License 2.0` | | -| fallible-streaming-iterator | 0.1.9 | `Apache License 2.0` | | -| hex | 0.4.3 | `Apache License 2.0` | | -| jni-sys | 0.3.1 | `Apache License 2.0` | | -| jni-sys | 0.4.1 | `Apache License 2.0` | | -| resolv-conf | 0.7.6 | `Apache License 2.0` | | -| serde_spanned | 1.1.1 | `Apache License 2.0` | | -| toml | 1.1.2+spec-1.1.0 | `Apache License 2.0` | | -| toml_datetime | 1.1.1+spec-1.1.0 | `Apache License 2.0` | | -| toml_edit | 0.25.11+spec-1.1.0 | `Apache License 2.0` | | -| toml_parser | 1.1.2+spec-1.1.0 | `Apache License 2.0` | | -| toml_writer | 1.1.1+spec-1.1.0 | `Apache License 2.0` | | -| omnom | 3.0.0 | `Apache License 2.0` | | -| async-broadcast | 0.7.2 | `Apache License 2.0` | | -| hickory-net | 0.26.1 | `Apache License 2.0` | | -| hickory-proto | 0.26.1 | `Apache License 2.0` | | -| hickory-resolver | 0.26.1 | `Apache License 2.0` | | -| futures-channel | 0.3.32 | `Apache License 2.0` | | -| futures-core | 0.3.32 | `Apache License 2.0` | | -| futures-executor | 0.3.32 | `Apache License 2.0` | | -| futures-io | 0.3.32 | `Apache License 2.0` | | -| futures-macro | 0.3.32 | `Apache License 2.0` | | -| futures-sink | 0.3.32 | `Apache License 2.0` | | -| futures-task | 0.3.32 | `Apache License 2.0` | | -| futures-util | 0.3.32 | `Apache License 2.0` | | -| futures | 0.3.32 | `Apache License 2.0` | | -| typenum | 1.20.0 | `Apache License 2.0` | | -| reqwest | 0.13.3 | `Apache License 2.0` | | -| http | 1.4.0 | `Apache License 2.0` | | -| tokio-rustls | 0.26.4 | `Apache License 2.0` | | -| pin-utils | 0.1.0 | `Apache License 2.0` | | -| ecdsa | 0.16.9 | `Apache License 2.0` | | -| rfc6979 | 0.4.0 | `Apache License 2.0` | | -| ppv-lite86 | 0.2.21 | `Apache License 2.0` | | -| rustls-pki-types | 1.14.1 | `Apache License 2.0` | | -| keyring | 3.6.3 | `Apache License 2.0` | | -| async-recursion | 1.1.1 | `Apache License 2.0` | | -| t4rust-derive | 0.3.1 | `Apache License 2.0` | | -| tsproto-structs | 0.2.0 | `Apache License 2.0` | | -| addr2line | 0.25.1 | `Apache License 2.0` | | -| ahash | 0.8.12 | `Apache License 2.0` | | -| atomic-waker | 1.1.2 | `Apache License 2.0` | | -| atomic | 0.5.3 | `Apache License 2.0` | | -| autocfg | 1.5.0 | `Apache License 2.0` | | -| backtrace | 0.3.76 | `Apache License 2.0` | | -| base64 | 0.22.1 | `Apache License 2.0` | | -| bitflags | 1.3.2 | `Apache License 2.0` | | -| bitflags | 2.11.1 | `Apache License 2.0` | | -| cc | 1.2.62 | `Apache License 2.0` | | -| cfg-if | 1.0.4 | `Apache License 2.0` | | -| cmake | 0.1.58 | `Apache License 2.0` | | -| concurrent-queue | 2.5.0 | `Apache License 2.0` | | -| core-foundation-sys | 0.8.7 | `Apache License 2.0` | | -| core-foundation | 0.10.1 | `Apache License 2.0` | | -| core-foundation | 0.9.4 | `Apache License 2.0` | | -| coreaudio-rs | 0.13.0 | `Apache License 2.0` | | -| critical-section | 1.2.0 | `Apache License 2.0` | | -| crossbeam-channel | 0.5.15 | `Apache License 2.0` | | -| crossbeam-epoch | 0.9.18 | `Apache License 2.0` | | -| crossbeam-utils | 0.8.21 | `Apache License 2.0` | | -| dbus-secret-service | 4.1.0 | `Apache License 2.0` | | -| displaydoc | 0.2.5 | `Apache License 2.0` | | -| either | 1.15.0 | `Apache License 2.0` | | -| equivalent | 1.0.2 | `Apache License 2.0` | | -| errno | 0.3.14 | `Apache License 2.0` | | -| event-listener-strategy | 0.5.4 | `Apache License 2.0` | | -| event-listener | 5.4.1 | `Apache License 2.0` | | -| fastrand | 2.4.1 | `Apache License 2.0` | | -| find-msvc-tools | 0.1.9 | `Apache License 2.0` | | -| fnv | 1.0.7 | `Apache License 2.0` | | -| form_urlencoded | 1.2.2 | `Apache License 2.0` | | -| futures-lite | 2.6.1 | `Apache License 2.0` | | -| gimli | 0.32.3 | `Apache License 2.0` | | -| group | 0.13.0 | `Apache License 2.0` | | -| hashbrown | 0.14.5 | `Apache License 2.0` | | -| hashbrown | 0.17.1 | `Apache License 2.0` | | -| heck | 0.5.0 | `Apache License 2.0` | | -| httparse | 1.10.1 | `Apache License 2.0` | | -| hyper-rustls | 0.27.9 | `Apache License 2.0` | | -| idna | 1.1.0 | `Apache License 2.0` | | -| idna_adapter | 1.2.2 | `Apache License 2.0` | | -| indexmap | 2.14.0 | `Apache License 2.0` | | -| ipconfig | 0.3.4 | `Apache License 2.0` | | -| itertools | 0.14.0 | `Apache License 2.0` | | -| jni | 0.21.1 | `Apache License 2.0` | | -| jobserver | 0.1.34 | `Apache License 2.0` | | -| lazy_static | 1.5.0 | `Apache License 2.0` | | -| linux-raw-sys | 0.12.1 | `Apache License 2.0` | | -| lock_api | 0.4.14 | `Apache License 2.0` | | -| log | 0.4.29 | `Apache License 2.0` | | -| mime | 0.3.17 | `Apache License 2.0` | | -| num-bigint | 0.4.6 | `Apache License 2.0` | | -| num-derive | 0.4.2 | `Apache License 2.0` | | -| num-integer | 0.1.46 | `Apache License 2.0` | | -| num-traits | 0.2.19 | `Apache License 2.0` | | -| num_cpus | 1.17.0 | `Apache License 2.0` | | -| object | 0.37.3 | `Apache License 2.0` | | -| once_cell | 1.21.4 | `Apache License 2.0` | | -| openssl-probe | 0.2.1 | `Apache License 2.0` | | -| ordered-stream | 0.2.0 | `Apache License 2.0` | | -| parking | 2.2.1 | `Apache License 2.0` | | -| parking_lot | 0.12.5 | `Apache License 2.0` | | -| parking_lot_core | 0.9.12 | `Apache License 2.0` | | -| percent-encoding | 2.3.2 | `Apache License 2.0` | | -| pkg-config | 0.3.33 | `Apache License 2.0` | | -| regex-automata | 0.4.14 | `Apache License 2.0` | | -| regex-syntax | 0.8.10 | `Apache License 2.0` | | -| regex | 1.12.3 | `Apache License 2.0` | | -| rustc-demangle | 0.1.27 | `Apache License 2.0` | | -| rustc_version | 0.4.1 | `Apache License 2.0` | | -| rustix | 1.1.4 | `Apache License 2.0` | | -| rustls-native-certs | 0.8.3 | `Apache License 2.0` | | -| rustls | 0.23.40 | `Apache License 2.0` | | -| scopeguard | 1.2.0 | `Apache License 2.0` | | -| security-framework-sys | 2.17.0 | `Apache License 2.0` | | -| security-framework | 2.11.1 | `Apache License 2.0` | | -| security-framework | 3.7.0 | `Apache License 2.0` | | -| signal-hook-registry | 1.4.8 | `Apache License 2.0` | | -| simd_cesu8 | 1.1.1 | `Apache License 2.0` | | -| smallvec | 1.15.1 | `Apache License 2.0` | | -| socket2 | 0.6.3 | `Apache License 2.0` | | -| stable_deref_trait | 1.2.1 | `Apache License 2.0` | | -| system-configuration-sys | 0.6.0 | `Apache License 2.0` | | -| system-configuration | 0.7.0 | `Apache License 2.0` | | -| tempfile | 3.27.0 | `Apache License 2.0` | | -| thread_local | 1.1.9 | `Apache License 2.0` | | -| threadpool | 1.8.1 | `Apache License 2.0` | | -| url | 2.5.8 | `Apache License 2.0` | | -| uuid | 1.23.1 | `Apache License 2.0` | | -| version_check | 0.9.5 | `Apache License 2.0` | | -| ff | 0.13.1 | `Apache License 2.0` | | -| hashlink | 0.9.1 | `Apache License 2.0` | | -| bit-vec | 0.6.3 | `Apache License 2.0` | | -| minimal-lexical | 0.2.1 | `Apache License 2.0` | | -| hkdf | 0.12.4 | `Apache License 2.0` | | -| aes | 0.8.4 | `Apache License 2.0` | | -| base16ct | 0.2.0 | `Apache License 2.0` | | -| base64ct | 1.8.3 | `Apache License 2.0` | | -| block-buffer | 0.10.4 | `Apache License 2.0` | | -| chacha20 | 0.10.0 | `Apache License 2.0` | | -| chacha20 | 0.9.1 | `Apache License 2.0` | | -| chacha20poly1305 | 0.10.1 | `Apache License 2.0` | | -| cipher | 0.4.4 | `Apache License 2.0` | | -| cmac | 0.7.2 | `Apache License 2.0` | | -| const-oid | 0.9.6 | `Apache License 2.0` | | -| cpufeatures | 0.2.17 | `Apache License 2.0` | | -| cpufeatures | 0.3.0 | `Apache License 2.0` | | -| crypto-bigint | 0.5.5 | `Apache License 2.0` | | -| crypto-common | 0.1.7 | `Apache License 2.0` | | -| ctr | 0.9.2 | `Apache License 2.0` | | -| dbl | 0.3.2 | `Apache License 2.0` | | -| der | 0.7.10 | `Apache License 2.0` | | -| digest | 0.10.7 | `Apache License 2.0` | | -| digest | 0.9.0 | `Apache License 2.0` | | -| eax | 0.5.0 | `Apache License 2.0` | | -| elliptic-curve | 0.13.8 | `Apache License 2.0` | | -| hmac | 0.12.1 | `Apache License 2.0` | | -| inout | 0.1.4 | `Apache License 2.0` | | -| md-5 | 0.10.6 | `Apache License 2.0` | | -| opaque-debug | 0.3.1 | `Apache License 2.0` | | -| p256 | 0.13.2 | `Apache License 2.0` | | -| pem-rfc7468 | 0.7.0 | `Apache License 2.0` | | -| pkcs8 | 0.10.2 | `Apache License 2.0` | | -| poly1305 | 0.8.0 | `Apache License 2.0` | | -| primeorder | 0.13.6 | `Apache License 2.0` | | -| sec1 | 0.7.3 | `Apache License 2.0` | | -| sha-1 | 0.10.1 | `Apache License 2.0` | | -| sha2 | 0.10.9 | `Apache License 2.0` | | -| signature | 2.2.0 | `Apache License 2.0` | | -| spki | 0.7.3 | `Apache License 2.0` | | -| universal-hash | 0.5.1 | `Apache License 2.0` | | -| aead | 0.5.2 | `Apache License 2.0` | | -| rand_core | 0.10.1 | `Apache License 2.0` | | -| rand_core | 0.6.4 | `Apache License 2.0` | | -| getrandom | 0.2.17 | `Apache License 2.0` | | -| getrandom | 0.3.4 | `Apache License 2.0` | | -| getrandom | 0.4.2 | `Apache License 2.0` | | -| rand_chacha | 0.3.1 | `Apache License 2.0` | | -| adler2 | 2.0.1 | `Apache License 2.0` | | -| proc-macro-crate | 3.5.0 | `Apache License 2.0` | | -| vcpkg | 0.2.15 | `Apache License 2.0` | | -| enumflags2 | 0.7.12 | `Apache License 2.0` | | -| enumflags2_derive | 0.7.12 | `Apache License 2.0` | | -| dbus | 0.9.11 | `Apache License 2.0` | | -| libdbus-sys | 0.2.7 | `Apache License 2.0` | | -| android_log-sys | 0.2.0 | `Apache License 2.0` | | -| android_log-sys | 0.3.2 | `Apache License 2.0` | | -| android_logger | 0.15.1 | `Apache License 2.0` | | -| ts-bookkeeping | 0.1.0 | `Apache License 2.0` | | -| tsclientlib | 0.2.0 | `Apache License 2.0` | | -| tsproto-packets | 0.1.0 | `Apache License 2.0` | | -| tsproto-types | 0.1.0 | `Apache License 2.0` | | -| tsproto | 0.2.0 | `Apache License 2.0` | | -| chanora_core | 0.0.1-pre | `Apache License 2.0` | | -| chanora_audio | 0.0.1-pre | `Apache License 2.0` | | -| chanora_bridge | 0.0.1-pre | `Apache License 2.0` | | -| chanora_diagnostics | 0.0.1-pre | `Apache License 2.0` | | -| chanora_protocol | 0.0.1-pre | `Apache License 2.0` | | -| chanora_state | 0.0.1-pre | `Apache License 2.0` | | -| chanora_storage | 0.0.1-pre | `Apache License 2.0` | | -| alsa | 0.9.1 | `Apache License 2.0` | | -| anyhow | 1.0.102 | `Apache License 2.0` | | -| async-trait | 0.1.89 | `Apache License 2.0` | | -| aws-lc-sys | 0.41.0 | `Apache License 2.0` | | -| cesu8 | 1.1.0 | `Apache License 2.0` | | -| dart-sys | 4.1.5 | `Apache License 2.0` | | -| dasp_sample | 0.11.0 | `Apache License 2.0` | | -| dunce | 1.0.5 | `Apache License 2.0` | | -| itoa | 1.0.18 | `Apache License 2.0` | | -| jni-macros | 0.22.4 | `Apache License 2.0` | | -| jni-sys-macros | 0.4.1 | `Apache License 2.0` | | -| jni | 0.22.4 | `Apache License 2.0` | | -| libc | 0.2.186 | `Apache License 2.0` | | -| linux-keyutils | 0.2.5 | `Apache License 2.0` | | -| mach2 | 0.4.3 | `Apache License 2.0` | | -| miniz_oxide | 0.8.9 | `Apache License 2.0` | | -| ndk-context | 0.1.1 | `Apache License 2.0` | | -| ndk-sys | 0.6.0+11769913 | `Apache License 2.0` | | -| ndk | 0.9.0 | `Apache License 2.0` | | -| num-conv | 0.2.1 | `Apache License 2.0` | | -| num_enum | 0.7.6 | `Apache License 2.0` | | -| num_enum_derive | 0.7.6 | `Apache License 2.0` | | -| objc2-audio-toolbox | 0.3.2 | `Apache License 2.0` | | -| objc2-core-audio-types | 0.3.2 | `Apache License 2.0` | | -| objc2-core-audio | 0.3.2 | `Apache License 2.0` | | -| objc2-core-foundation | 0.3.2 | `Apache License 2.0` | | -| pin-project-lite | 0.2.17 | `Apache License 2.0` | | -| portable-atomic | 1.13.1 | `Apache License 2.0` | | -| proc-macro2 | 1.0.106 | `Apache License 2.0` | | -| quicklz | 0.3.1 | `Apache License 2.0` | | -| quote | 1.0.45 | `Apache License 2.0` | | -| rand | 0.10.1 | `Apache License 2.0` | | -| rand | 0.8.6 | `Apache License 2.0` | | -| ref-cast-impl | 1.0.25 | `Apache License 2.0` | | -| ref-cast | 1.0.25 | `Apache License 2.0` | | -| rustls-platform-verifier-android | 0.1.1 | `Apache License 2.0` | | -| rustversion | 1.0.22 | `Apache License 2.0` | | -| ryu | 1.0.23 | `Apache License 2.0` | | -| semver | 1.0.28 | `Apache License 2.0` | | -| serde | 1.0.228 | `Apache License 2.0` | | -| serde_core | 1.0.228 | `Apache License 2.0` | | -| serde_derive | 1.0.228 | `Apache License 2.0` | | -| serde_repr | 0.1.20 | `Apache License 2.0` | | -| shlex | 1.3.0 | `Apache License 2.0` | | -| simdutf8 | 0.1.5 | `Apache License 2.0` | | -| syn | 2.0.117 | `Apache License 2.0` | | -| sync_wrapper | 1.0.2 | `Apache License 2.0` | | -| tagptr | 0.2.0 | `Apache License 2.0` | | -| thiserror-impl | 1.0.69 | `Apache License 2.0` | | -| thiserror-impl | 2.0.18 | `Apache License 2.0` | | -| thiserror | 1.0.69 | `Apache License 2.0` | | -| thiserror | 2.0.18 | `Apache License 2.0` | | -| time-core | 0.1.8 | `Apache License 2.0` | | -| time-macros | 0.2.27 | `Apache License 2.0` | | -| time | 0.3.47 | `Apache License 2.0` | | -| unicode-ident | 1.0.24 | `Apache License 2.0` | | -| widestring | 1.2.1 | `Apache License 2.0` | | -| subtle-ng | 2.5.0 | `BSD 3-Clause "New" or "Revised" License` | | -| subtle | 2.6.1 | `BSD 3-Clause "New" or "Revised" License` | | -| aws-lc-sys | 0.41.0 | `BSD 3-Clause "New" or "Revised" License` | | -| curve25519-dalek-ng | 4.1.1 | `BSD 3-Clause "New" or "Revised" License` | | -| git-testament-derive | 0.2.1 | `BSD 3-Clause "New" or "Revised" License` | | -| git-testament | 0.2.6 | `BSD 3-Clause "New" or "Revised" License` | | -| encoding_rs | 0.8.35 | `BSD 3-Clause "New" or "Revised" License` | | -| untrusted | 0.9.0 | `ISC License` | | -| simple_asn1 | 0.6.4 | `ISC License` | | -| rustls-webpki | 0.103.13 | `ISC License` | | -| audiopus_sys | 0.2.2 | `ISC License` | | -| audiopus | 0.3.0-rc.0 | `ISC License` | | -| aws-lc-rs | 1.17.0 | `ISC License` | | -| aws-lc-sys | 0.41.0 | `ISC License` | | -| uds_windows | 1.2.1 | `MIT License` | | -| mio | 1.2.0 | `MIT License` | | -| nom | 7.1.3 | `MIT License` | | -| libsqlite3-sys | 0.30.1 | `MIT License` | | -| rusqlite | 0.32.1 | `MIT License` | | -| hyper | 1.9.0 | `MIT License` | | -| schannel | 0.1.29 | `MIT License` | | -| memoffset | 0.9.1 | `MIT License` | | -| h2 | 0.4.14 | `MIT License` | | -| bytes | 1.11.1 | `MIT License` | | -| want | 0.3.1 | `MIT License` | | -| try-lock | 0.2.5 | `MIT License` | | -| slab | 0.4.12 | `MIT License` | | -| sharded-slab | 0.1.7 | `MIT License` | | -| matchers | 0.2.0 | `MIT License` | | -| tracing-attributes | 0.1.31 | `MIT License` | | -| tracing-core | 0.1.36 | `MIT License` | | -| tracing-log | 0.2.0 | `MIT License` | | -| tracing-subscriber | 0.3.23 | `MIT License` | | -| tracing | 0.1.44 | `MIT License` | | -| tower-layer | 0.3.3 | `MIT License` | | -| tower-service | 0.3.3 | `MIT License` | | -| tower | 0.5.3 | `MIT License` | | -| tower-http | 0.6.10 | `MIT License` | | -| http-body | 1.0.1 | `MIT License` | | -| http-body-util | 0.1.3 | `MIT License` | | -| delegate-attr | 0.3.0 | `MIT License` | | -| hyper-util | 0.1.20 | `MIT License` | | -| zbus | 5.15.0 | `MIT License` | | -| zbus_macros | 5.15.0 | `MIT License` | | -| zbus_names | 4.3.2 | `MIT License` | | -| zvariant | 5.11.0 | `MIT License` | | -| zvariant_derive | 5.11.0 | `MIT License` | | -| synstructure | 0.13.2 | `MIT License` | | -| fs_extra | 1.3.0 | `MIT License` | | -| alsa-sys | 0.3.1 | `MIT License` | | -| dashmap | 5.5.3 | `MIT License` | | -| tokio-macros | 2.7.0 | `MIT License` | | -| oslog | 0.2.0 | `MIT License` | | -| flutter_rust_bridge | 2.12.0 | `MIT License` | | -| flutter_rust_bridge_macros | 2.12.0 | `MIT License` | | -| objc2-encode | 4.1.0 | `MIT License` | | -| objc2-foundation | 0.3.2 | `MIT License` | | -| objc2 | 0.6.4 | `MIT License` | | -| build-target | 0.4.0 | `MIT License` | | -| tokio-stream | 0.1.18 | `MIT License` | | -| tokio-util | 0.7.18 | `MIT License` | | -| tokio | 1.52.3 | `MIT License` | | -| endi | 1.1.1 | `MIT License` | | -| zvariant_utils | 3.3.1 | `MIT License` | | -| winnow | 1.0.2 | `MIT License` | | -| aho-corasick | 1.1.4 | `MIT License` | | -| byteorder | 1.5.0 | `MIT License` | | -| csv-core | 0.1.13 | `MIT License` | | -| csv | 1.4.0 | `MIT License` | | -| memchr | 2.8.0 | `MIT License` | | -| walkdir | 2.5.0 | `MIT License` | | -| combine | 4.6.7 | `MIT License` | | -| data-encoding | 2.11.0 | `MIT License` | | -| aws-lc-sys | 0.41.0 | `MIT License` | | -| same-file | 1.0.6 | `MIT License` | | -| winapi-util | 0.1.11 | `MIT License` | | -| nu-ansi-term | 0.50.3 | `MIT License` | | -| generic-array | 0.14.7 | `MIT License` | | -| unicode-ident | 1.0.24 | `Unicode License v3` | | -| icu_collections | 2.2.0 | `Unicode License v3` | | -| icu_locale_core | 2.2.0 | `Unicode License v3` | | -| icu_normalizer | 2.2.0 | `Unicode License v3` | | -| icu_normalizer_data | 2.2.0 | `Unicode License v3` | | -| icu_properties | 2.2.0 | `Unicode License v3` | | -| icu_properties_data | 2.2.0 | `Unicode License v3` | | -| icu_provider | 2.2.0 | `Unicode License v3` | | -| litemap | 0.8.2 | `Unicode License v3` | | -| potential_utf | 0.1.5 | `Unicode License v3` | | -| tinystr | 0.8.3 | `Unicode License v3` | | -| writeable | 0.6.3 | `Unicode License v3` | | -| yoke-derive | 0.8.2 | `Unicode License v3` | | -| yoke | 0.8.2 | `Unicode License v3` | | -| zerofrom-derive | 0.1.7 | `Unicode License v3` | | -| zerofrom | 0.1.8 | `Unicode License v3` | | -| zerotrie | 0.2.4 | `Unicode License v3` | | -| zerovec-derive | 0.11.3 | `Unicode License v3` | | -| zerovec | 0.11.6 | `Unicode License v3` | | - -## Full license texts - -### Apache License 2.0 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2023 Jacob Pratt et al. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Jacob Pratt et al. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) Microsoft Corporation. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2020 - 2026 Tatsuya Kawano - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2020 Tomasz "Soveu" Marx - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2023 The Fuchsia Authors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2017 Juniper Networks, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2019 Yoshua Wuyts - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2020 Yoshua Wuyts - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2014 Paho Lurie-Gregg - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2016 Sean McArthur - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2017 http-rs authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2017 quininer kel - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2018 The pin-utils authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2018-2022 RustCrypto Developers - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2019 The CryptoCorrosion Contributors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2023 Dirkjan Ochtman - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [2017] [keyring developers] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/LICENSE-2.0 - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -``` - -### Apache License 2.0 - -``` -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and -You must cause any modified files to carry prominent notices stating that You changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - - -Copyright 2017-2023 Maik Klein, Maja Kądziołka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and -You must cause any modified files to carry prominent notices stating that You changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - - -Copyright [2017] [Maik Klein] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2014-2018 David Henningsson <diwic@ubuntu.com> and other contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -``` - -### Apache License 2.0 - -``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all -other entities that control, are controlled by, or are under common -control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the -direction or management of such entity, whether by contract or -otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation -source, and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or -Object form, made available under the License, as indicated by a -copyright notice that is included in or attached to the work -(an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including -the original version of the Work and any modifications or additions -to that Work or Derivative Works thereof, that is intentionally -submitted to Licensor for inclusion in the Work by the copyright owner -or by an individual or Legal Entity authorized to submit on behalf of -the copyright owner. For the purposes of this definition, "submitted" -means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, -and issue tracking systems that are managed by, or on behalf of, the -Licensor for the purpose of discussing and improving the Work, but -excluding communication that is conspicuously marked or otherwise -designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity -on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the -Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -(except as stated in this section) patent license to make, have made, -use, offer to sell, sell, import, and otherwise transfer the Work, -where such license applies only to those patent claims licensable -by such Contributor that are necessarily infringed by their -Contribution(s) alone or by combination of their Contribution(s) -with the Work to which such Contribution(s) was submitted. If You -institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work -or a Contribution incorporated within the Work constitutes direct -or contributory patent infringement, then any patent licenses -granted to You under this License for that Work shall terminate -as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the -Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You -meet the following conditions: - -(a) You must give any other recipients of the Work or -Derivative Works a copy of this License; and - -(b) You must cause any modified files to carry prominent notices -stating that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works -that You distribute, all copyright, patent, trademark, and -attribution notices from the Source form of the Work, -excluding those notices that do not pertain to any part of -the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its -distribution, then any Derivative Works that You distribute must -include a readable copy of the attribution notices contained -within such NOTICE file, excluding those notices that do not -pertain to any part of the Derivative Works, in at least one -of the following places: within a NOTICE text file distributed -as part of the Derivative Works; within the Source form or -documentation, if provided along with the Derivative Works; or, -within a display generated by the Derivative Works, if and -wherever such third-party notices normally appear. The contents -of the NOTICE file are for informational purposes only and -do not modify the License. You may add Your own attribution -notices within Derivative Works that You distribute, alongside -or as an addendum to the NOTICE text from the Work, provided -that such additional attribution notices cannot be construed -as modifying the License. - -You may add Your own copyright statement to Your modifications and -may provide additional or different license terms and conditions -for use, reproduction, or distribution of Your modifications, or -for any such Derivative Works as a whole, provided Your use, -reproduction, and distribution of the Work otherwise complies with -the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work -by You to the Licensor shall be under the terms and conditions of -this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed -with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or -agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied, including, without limitation, any warranties or conditions -of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, -unless required by applicable law (such as deliberate and grossly -negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, -incidental, or consequential damages of any character arising as a -result of this License or out of the use or inability to use the -Work (including but not limited to damages for loss of goodwill, -work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses), even if such Contributor -has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing -the Work or Derivative Works thereof, You may choose to offer, -and charge a fee for, acceptance of support, warranty, indemnity, -or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only -on Your own behalf and on Your sole responsibility, not on behalf -of any other Contributor, and only if You agree to indemnify, -defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following -boilerplate notice, with the fields enclosed by brackets "{}" -replaced with your own identifying information. (Don't include -the brackets!) The text should be enclosed in the appropriate -comment syntax for the file format. We also recommend that a -file or class name and description of purpose be included on the -same "printed page" as the copyright notice for easier -identification within third-party archives. - -Copyright 2016 The android_log_sys Developers - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all -other entities that control, are controlled by, or are under common -control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the -direction or management of such entity, whether by contract or -otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation -source, and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or -Object form, made available under the License, as indicated by a -copyright notice that is included in or attached to the work -(an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including -the original version of the Work and any modifications or additions -to that Work or Derivative Works thereof, that is intentionally -submitted to Licensor for inclusion in the Work by the copyright owner -or by an individual or Legal Entity authorized to submit on behalf of -the copyright owner. For the purposes of this definition, "submitted" -means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, -and issue tracking systems that are managed by, or on behalf of, the -Licensor for the purpose of discussing and improving the Work, but -excluding communication that is conspicuously marked or otherwise -designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity -on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the -Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -(except as stated in this section) patent license to make, have made, -use, offer to sell, sell, import, and otherwise transfer the Work, -where such license applies only to those patent claims licensable -by such Contributor that are necessarily infringed by their -Contribution(s) alone or by combination of their Contribution(s) -with the Work to which such Contribution(s) was submitted. If You -institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work -or a Contribution incorporated within the Work constitutes direct -or contributory patent infringement, then any patent licenses -granted to You under this License for that Work shall terminate -as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the -Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You -meet the following conditions: - -(a) You must give any other recipients of the Work or -Derivative Works a copy of this License; and - -(b) You must cause any modified files to carry prominent notices -stating that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works -that You distribute, all copyright, patent, trademark, and -attribution notices from the Source form of the Work, -excluding those notices that do not pertain to any part of -the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its -distribution, then any Derivative Works that You distribute must -include a readable copy of the attribution notices contained -within such NOTICE file, excluding those notices that do not -pertain to any part of the Derivative Works, in at least one -of the following places: within a NOTICE text file distributed -as part of the Derivative Works; within the Source form or -documentation, if provided along with the Derivative Works; or, -within a display generated by the Derivative Works, if and -wherever such third-party notices normally appear. The contents -of the NOTICE file are for informational purposes only and -do not modify the License. You may add Your own attribution -notices within Derivative Works that You distribute, alongside -or as an addendum to the NOTICE text from the Work, provided -that such additional attribution notices cannot be construed -as modifying the License. - -You may add Your own copyright statement to Your modifications and -may provide additional or different license terms and conditions -for use, reproduction, or distribution of Your modifications, or -for any such Derivative Works as a whole, provided Your use, -reproduction, and distribution of the Work otherwise complies with -the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work -by You to the Licensor shall be under the terms and conditions of -this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed -with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or -agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied, including, without limitation, any warranties or conditions -of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, -unless required by applicable law (such as deliberate and grossly -negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, -incidental, or consequential damages of any character arising as a -result of this License or out of the use or inability to use the -Work (including but not limited to damages for loss of goodwill, -work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses), even if such Contributor -has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing -the Work or Derivative Works thereof, You may choose to offer, -and charge a fee for, acceptance of support, warranty, indemnity, -or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only -on Your own behalf and on Your sole responsibility, not on behalf -of any other Contributor, and only if You agree to indemnify, -defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following -boilerplate notice, with the fields enclosed by brackets "{}" -replaced with your own identifying information. (Don't include -the brackets!) The text should be enclosed in the appropriate -comment syntax for the file format. We also recommend that a -file or class name and description of purpose be included on the -same "printed page" as the copyright notice for easier -identification within third-party archives. - -Copyright 2016 The android_logger Developers - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### Apache License 2.0 - -``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -### BSD 3-Clause "New" or "Revised" License - -``` -Copyright (c) 2016-2017 Isis Agora Lovecruft, Henry de Valence. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -``` - -### BSD 3-Clause "New" or "Revised" License - -``` -Copyright (c) 2016-2017 Isis Agora Lovecruft, Henry de Valence. All rights reserved. -Copyright (c) 2016-2024 Isis Agora Lovecruft. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -``` - -### BSD 3-Clause "New" or "Revised" License - -``` -Copyright (c) <year> <owner>. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -``` - -### BSD 3-Clause "New" or "Revised" License - -``` -Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -``` - -### ISC License - -``` -// Copyright 2015-2016 Brian Smith. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -``` - -### ISC License - -``` -Copyright (c) 2017 Adam Wick - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - -``` - -### ISC License - -``` -Except as otherwise noted, this project is licensed under the following -(ISC-style) terms: - -Copyright 2015 Brian Smith. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -The files under third-party/chromium are licensed as described in -third-party/chromium/LICENSE. - -``` - -### ISC License - -``` -ISC License - -Copyright (c) 2019, Lakelezz - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -``` - -### ISC License - -``` -ISC License - -Copyright (c) 2019, Lakelezz - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -``` - -### ISC License - -``` -ISC License: - -Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") -Copyright (c) 1995-2003 by Internet Software Consortium - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -``` - -### MIT License - -``` - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - -``` - -### MIT License - -``` -Copyright (c) 2014 Carl Lerche and other MIO contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2014-2019 Geoffroy Couprie - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2014-2021 The rusqlite developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2014-2026 Sean McArthur - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2015 steffengy - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2017 Gilad Naaman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -### MIT License - -``` -Copyright (c) 2017 h2 authors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2018 Carl Lerche - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2018-2019 Sean McArthur - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -``` - -### MIT License - -``` -Copyright (c) 2018-2023 Sean McArthur -Copyright (c) 2016 Alex Crichton - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -``` - -### MIT License - -``` -Copyright (c) 2019 Carl Lerche - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019 Eliza Weisman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019 Eliza Weisman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019 Tokio Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019 Tower Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019-2021 Tower Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019-2024 Sean McArthur & Hyper Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2019-2025 Sean McArthur & Hyper Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2020 Xidorn Quan - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2023-2025 Sean McArthur - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Copyright 2016 Nika Layzell - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) 2017 Denis Kurilenko - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) 2018 diwic - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) 2019 Acrimon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) 2019 Yoshua Wuyts -Copyright (c) Tokio Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) 2020 Steven Joruk - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) <year> <copyright holders> - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) OpenByte <development.openbyte@gmail.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -MIT License - -Copyright (c) Tokio Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2015 Andrew Gallant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2015 Markus Westerlind - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2015-2020 Julien Cretin -Copyright (c) 2017-2020 Google Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2015-2020 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2017 Andrew Gallant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2014 Benjamin Sago -Copyright (c) 2021-2022 The Nushell Project Developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -### MIT License - -``` -The MIT License (MIT) - -Copyright (c) 2015 Bartłomiej Kamiński - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -### Unicode License v3 - -``` -UNICODE LICENSE V3 - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2023 Unicode, Inc. - -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. - -``` - -### Unicode License v3 - -``` -UNICODE LICENSE V3 - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 2020-2024 Unicode, Inc. - -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. - -SPDX-License-Identifier: Unicode-3.0 - -— - -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. - -``` - - ---- - -Regenerate with: - -```bash -cargo about generate --output-file docs/security/license-inventory.md about-md.hbs -cargo about generate --output-file docs/security/license-inventory.html about.hbs -``` - -This artefact supports the DEC-012 legal review handoff at -`docs/governance/legal-review-readiness.md`. diff --git a/docs/security/secure-storage-audit-report.md b/docs/security/secure-storage-audit-report.md deleted file mode 100644 index 932d7f3..0000000 --- a/docs/security/secure-storage-audit-report.md +++ /dev/null @@ -1,97 +0,0 @@ -# Sec Secure Storage Audit Report V0.9.3.0.0 - -**Document type:** Security / Secure Storage Audit Report -**Version:** 0.9.3 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/security/secure-storage-audit-report.md` --- - -## 1. Purpose - -This report records evidence that Chanora stores secrets using platform secure storage mechanisms and does not store sensitive secrets in plaintext local storage. - -## 2. Secret Classification - -| Secret ID | Secret | Required storage | -|---|---|---| -| SEC-STORE-001 | Identity private key / identity secret | Platform secure storage | -| SEC-STORE-002 | Server password | Platform secure storage | -| SEC-STORE-003 | Authentication tokens if later added | Platform secure storage | -| SEC-STORE-004 | Encryption keys if later added | Platform secure storage | - -## 3. Platform Audit Matrix - -| Platform | Secure storage mechanism | Test status | Evidence | Result | -|---|---|---|---|---| -| Windows | DPAPI / Windows Credential Manager (per DEC-013 / SysRS-158) — adapter not yet implemented | Not started | n/a | Deferred to product `chanora_storage` | -| macOS | Keychain (per SysRS-159) — adapter not yet implemented | Not started | n/a | Deferred to product `chanora_storage` | -| Linux | Secret Service (libsecret) preferred; kernel keyutils fallback per DEC-013.2 | PoC Pass | `poc/secure-storage-spike/VERIFICATION.md`; six audit tests PASS via keyutils backend; CLI run additionally observed Secret-Service-locked → keyutils fallback live | PoC PASS; product audit pending | -| Android | Android Keystore (per SysRS-161) — adapter not yet implemented | Not started | n/a | Deferred to product `chanora_storage` | -| iOS | Keychain (per SysRS-160) — adapter not yet implemented | Not started | n/a | Deferred to product `chanora_storage` | - -## 4. Audit Checks - -| Check ID | Check | Expected result | Status | Evidence | -|---|---|---|---|---| -| SS-AUD-001 | Identity secret is not stored in local DB. | Pass | PoC Pass (Linux) | `poc/secure-storage-spike/tests/audit.rs::ss_aud_001_identity_secret_absent_from_local_db` — raw SQLite file scanned for plaintext markers; only the lookup name appears. | -| SS-AUD-002 | Server password is not stored in local DB. | Pass | PoC Pass (Linux) | `poc/secure-storage-spike/tests/audit.rs::ss_aud_002_server_password_absent_from_local_db` — distinct plaintext marker scan. | -| SS-AUD-003 | Secret values are not written to application logs. | Pass | PoC Pass (Linux) + cross-spike | `poc/secure-storage-spike/tests/audit.rs::ss_aud_003_secret_values_not_in_logs` — captured `tracing` output contains `` markers; never the plaintext. Cross-referenced by `poc/diagnostics-redaction-spike` REDACT-TC-002. | -| SS-AUD-004 | Secret values are not included in diagnostic export. | Pass | PoC Pass | Covered by `poc/diagnostics-redaction-spike/tests/redaction.rs::redact_tc_008_diagnostic_bundle_with_mixed_sensitive_fields` — whole-bundle JSON scan finds no plaintext. | -| SS-AUD-005 | Secure storage failure returns safe error. | Pass | PoC Pass (Linux) | `poc/secure-storage-spike/tests/audit.rs::ss_aud_005_safe_error_on_missing_entry`. Reinforced by the CLI driver run: a real locked gnome-keyring collection produced a typed `Backend` error containing no secret material, which the application then routed to the fallback adapter (DEC-013.2). | -| SS-AUD-006 | Secret deletion removes secure-storage entry. | Pass | PoC Pass (Linux) | `poc/secure-storage-spike/tests/audit.rs::ss_aud_006_delete_removes_entry` — second delete returns `NotFound`, not silent success. | -| SS-AUD-007 | Platform-specific secure storage is documented. | Pass | Partial | Linux documented in `poc/secure-storage-spike/README.md` and DEC-013.2. Windows/macOS/Android/iOS remain to be documented when adapters land in `chanora_storage`. | -| SS-AUD-008 | Migration or import path does not expose secrets. | Pass | Pending | No migration / import path exists yet; depends on product `chanora_storage` schema design (cross-references DEC-013.1 and `poc/sqlite-storage-spike`). | - -## 5. Test Cases - -| Test ID | Platform | Procedure | Expected result | Actual result | Status | -|---|---|---|---|---|---| -| SS-TC-001 | Windows | Save identity secret, inspect local DB/logs/export. | Secret absent from DB/logs/export. | Not run — Windows adapter not implemented in PoC | Deferred | -| SS-TC-002 | macOS | Save identity secret, inspect local DB/logs/export. | Secret absent from DB/logs/export. | Not run — macOS adapter not implemented in PoC | Deferred | -| SS-TC-003 | Linux | Save identity secret, inspect local DB/logs/export. | Secret absent from DB/logs/export. | Set / get / delete round-trip verified via keyutils backend; raw SQLite file scan confirmed plaintext absence; `tracing` log capture confirmed log absence. | **PoC Pass** | -| SS-TC-004 | Android | Save identity secret, inspect app storage/logs/export. | Secret absent from DB/logs/export. | Not run — Android adapter not implemented in PoC | Deferred | -| SS-TC-005 | iOS | Save identity secret, inspect app storage/logs/export. | Secret absent from DB/logs/export. | Not run — iOS adapter not implemented in PoC | Deferred | - -## 6. Findings - -| Finding ID | Severity | Description | Status | Owner | -|---|---|---|---|---| -| SS-FIND-001 | Informational | SysRS-053 / SysRS-162 ("Secret Service, libsecret, or equivalent") admitted both Secret Service and kernel keyutils as Linux backends. The PoC surfaced this ambiguity. | Resolved by DEC-013.2 on 2026-05-13 (Secret Service preferred, keyutils fallback). | Software Architect + Security Reviewer | -| SS-FIND-002 | Informational | Kernel keyutils requires a valid session keyring; cargo-test under non-interactive shells inherits an expired `_ses` and must be wrapped with `keyctl session -`. Production code on a graphical session inherits a valid session from PAM. | Documented in `poc/secure-storage-spike/README.md` and `VERIFICATION.md`. | Software Architect | -| SS-FIND-003 | Open | Windows / macOS / iOS / Android adapters not implemented; SS-TC-001/002/004/005 unverified. | Open — to be closed by per-platform adapter spikes or by the product `chanora_storage` implementation. | Platform Owners | - -## 7. Approval - -| Role | Name | Decision | Date | -|---|---|---|---| -| Security Reviewer | TBD | Pending | TBD | -| Platform Owner | TBD | Pending | TBD | -| QA / Verification Owner | TBD | Pending | TBD | - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial secure storage audit report template. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-14 | Recorded PoC empirical evidence: SS-AUD-001/002/003/005/006 status set to PoC Pass with evidence pointers; SS-AUD-004 cross-referenced to the diagnostics-redaction PoC; SS-TC-003 Linux Actual Result populated and Status set to PoC Pass. Added findings SS-FIND-001 (closed by DEC-013.2), SS-FIND-002 (keyutils session caveat), SS-FIND-003 (non-Linux adapters still open). Non-Linux test cases SS-TC-001/002/004/005 remain Deferred. | diff --git a/docs/security/security-privacy-legal-guideline.md b/docs/security/security-privacy-legal-guideline.md deleted file mode 100644 index 2209ea2..0000000 --- a/docs/security/security-privacy-legal-guideline.md +++ /dev/null @@ -1,89 +0,0 @@ -# Sec Security Privacy Legal Guideline V0.9.2.2.1 - -**Document type:** Security / Privacy / Legal Guideline -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/security/security-privacy-legal-guideline.md` --- - -## 1. Purpose - -This guideline defines the required security, privacy, and legal review documents that must be completed before Chanora is released outside a controlled internal engineering environment. - -A public or external release shall not rely only on SysRS, SysDes, SRS, SAD, SDD, and verification documents. It also requires security, privacy, dependency, and legal evidence. - -## 2. Required Pre-Release Documents - -| Document | Required before | Purpose | -|---|---|---| -| `docs/security/threat-model.md` | External Beta or public release | Identify attack surfaces, assets, trust boundaries, threats, and mitigations. | -| `docs/security/secure-storage-audit-report.md` | Any release storing secrets | Prove platform secure storage behavior. | -| `docs/security/diagnostic-redaction-audit-report.md` | Any release with diagnostics export/logs | Prove diagnostics and logs do not leak sensitive information. | -| `docs/security/dependency-and-supply-chain-report.md` | Any external release | Prove dependency inventory, licenses, vulnerability status, and SBOM readiness. | -| `docs/privacy/privacy-policy.md` | Any public or store release | Explain data handling, local storage, permissions, diagnostics, and upload behavior. | -| `docs/legal/trademark-and-attribution-review.md` | Any public or store release | Confirm non-affiliation wording, OSS attribution, and trademark risk review. | - -## 3. Release Gate Rule - -| Release type | Required security/privacy/legal gate | -|---|---| -| Internal Alpha | Security and privacy draft checklist acceptable if not publicly distributed. | -| External Beta | Threat model, secure storage audit, diagnostic redaction audit, dependency report, privacy draft, legal review draft required. | -| MVP Public | All listed documents must be completed and approved. | -| Store Release | All listed documents must be completed, approved, and aligned with store metadata. | - -## 4. Security Review Principles - -| Principle | Required behavior | -|---|---| -| Secret minimization | Store only secrets needed for user-approved functionality. | -| Local-first diagnostics | Diagnostic export requires explicit user action unless a future policy says otherwise. | -| Redaction by default | Secrets and sensitive server/user data are redacted before export. | -| Boundary validation | Protocol, platform, and file boundaries validate or sanitize external input. | -| Least privilege | Platform permissions are requested only when needed and explained to users. | -| Dependency accountability | Flutter packages, Rust crates, native libraries, and protocol libraries are inventoried. | -| Release evidence | Security and privacy claims require evidence, not only design intent. | - -## 5. Required Product Owner Decisions - -| Decision | Owner | -|---|---| -| Whether diagnostics are local-only or upload-capable | Product Owner + Legal | -| Whether crash reporting is included | Product Owner + Legal + Security | -| Which release channels are used | Product Owner | -| Public wording for non-affiliation statement | Legal / Compliance | -| Whether any telemetry is collected | Product Owner + Legal | -| Minimum supported platforms for secure storage audit | Product Owner + Engineering | - -## 6. Required Engineering Evidence - -| Evidence | Owner | -|---|---| -| Secure storage test results per platform | Platform / Security | -| Diagnostic redaction test results | Security / QA | -| Dependency inventory and license output | Engineering / Legal | -| SBOM output | Engineering / Security | -| Vulnerability scan result | Security / Engineering | -| Permission list and justification | Platform / Product | -| Threat model review result | Security / Architecture | - -## 7. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial security, privacy, and legal pre-release guideline. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/security/threat-model.md b/docs/security/threat-model.md deleted file mode 100644 index 70f947a..0000000 --- a/docs/security/threat-model.md +++ /dev/null @@ -1,154 +0,0 @@ -# Sec Threat Model V0.9.2.2.1 - -**Document type:** Security / Threat Model -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Repo path:** `docs/security/threat-model.md` --- - -## 1. Purpose - -This document identifies Chanora security assets, trust boundaries, attack surfaces, threat scenarios, mitigations, and residual risks. - -This document must be completed and approved before public or external release. - -## 2. Security Scope - -In scope: - -- Identity private keys and identity material -- Server passwords -- Saved bookmarks and recent server entries -- Local database -- Secure storage -- Diagnostic logs and export bundles -- Protocol input from compatible servers -- Text messages, channel names, server names, and nicknames -- Audio device access and microphone permission -- Platform permission flows -- Dependency and supply-chain risks -- Flutter/Rust bridge boundary -- Local file export/import surfaces - -Out of scope unless later added: - -- Cloud account sync -- Server hosting infrastructure operated by Chanora -- Telemetry backend -- Crash reporting backend -- Payment processing - -## 3. Assets - -| Asset ID | Asset | Sensitivity | Required protection | -|---|---|---|---| -| SEC-ASSET-001 | Identity private key / identity secret | Critical | Store only in platform secure storage; never log. | -| SEC-ASSET-002 | Server password | Critical | Store only in platform secure storage; redact from diagnostics. | -| SEC-ASSET-003 | Server address / bookmark | Sensitive | Store locally; redact or minimize in diagnostic export. | -| SEC-ASSET-004 | Nickname / user identity display name | Personal / user-provided | Preserve Unicode; avoid unnecessary upload. | -| SEC-ASSET-005 | Channel names and server names | Potentially sensitive | Treat as user/server content; redact where configured. | -| SEC-ASSET-006 | Chat text | Sensitive user/server content | Do not upload automatically; redact from diagnostics by default unless user explicitly includes. | -| SEC-ASSET-007 | Diagnostic bundle | Sensitive aggregate | Redact secrets; user-initiated export only. | -| SEC-ASSET-008 | Local database | Sensitive | Protect via OS file permissions; avoid plaintext secrets. | -| SEC-ASSET-009 | Logs | Sensitive | Redact secrets and avoid verbose sensitive content. | -| SEC-ASSET-010 | Audio stream | Sensitive real-time data | Do not persist audio unless explicitly designed later. | -| SEC-ASSET-011 | Dependency graph | Supply-chain-sensitive | Track licenses, vulnerabilities, and source integrity. | - -## 4. Trust Boundaries - -| Boundary ID | Boundary | Risk | -|---|---|---| -| TB-001 | User input to Flutter UI | Malformed or hostile input. | -| TB-002 | Flutter to Rust bridge | DTO validation and error mapping required. | -| TB-003 | Rust Core to protocol adapter | Protocol events and external inputs must be normalized. | -| TB-004 | Protocol adapter to external compatible server | Untrusted network/server input. | -| TB-005 | Rust/Flutter to platform secure storage | Platform-specific failure modes. | -| TB-006 | App to local database/file system | File tampering, data leakage, permissions. | -| TB-007 | Diagnostics export to user-controlled destination | Sensitive data leakage. | -| TB-008 | Audio device boundary | Permission and device-route privacy. | -| TB-009 | Dependency supply chain | Vulnerable or malicious dependencies. | - -## 5. Attack Surfaces - -| Surface ID | Attack surface | Example threats | -|---|---|---| -| AS-001 | Connection form | Credential capture in logs, malformed host input. | -| AS-002 | Protocol input | Malformed packets, hostile names/messages, state desync. | -| AS-003 | Bridge DTOs | Invalid commands, unexpected event payloads. | -| AS-004 | Local database | Tampering, unauthorized read. | -| AS-005 | Secure storage | Platform fallback failure or incorrect secret classification. | -| AS-006 | Diagnostics export | Secret leakage, excessive server/user information. | -| AS-007 | Logs | Password or identity leakage. | -| AS-008 | Audio permissions | Unclear microphone use or unintended capture. | -| AS-009 | Dependency ecosystem | Vulnerable packages or license incompatibility. | -| AS-010 | Store/package distribution | Tampered artifacts or signing issues. | - -## 6. Threat Scenarios and Mitigations - -| Threat ID | Scenario | Impact | Mitigation | Verification | -|---|---|---|---|---| -| THR-001 | Server password is logged during connection failure. | Credential leakage. | Redaction filters; never log secret fields. | Diagnostic redaction audit. | -| THR-002 | Identity private key is stored in local DB. | Identity compromise. | Secure storage classification and audit. | Secure storage audit. | -| THR-003 | Diagnostic export includes server password or identity secret. | Credential leakage. | Export redaction and denylist/allowlist design. | Redaction audit. | -| THR-004 | Hostile server sends malformed Unicode or extremely long names. | Crash, UI corruption, log injection. | Boundary validation, length limits, safe rendering. | Protocol fuzz/sanitization tests. | -| THR-005 | Protocol event causes inconsistent UI state. | Wrong user/channel state. | State reducer validation and snapshot recovery. | SWE.5/SWE.6 tests. | -| THR-006 | Dependency has known critical vulnerability. | Compromise or exploit risk. | Dependency scan and release gate. | Supply-chain report. | -| THR-007 | OSS license is incompatible with release model. | Legal/compliance risk. | License inventory and legal review. | Dependency/license report. | -| THR-008 | Microphone permission is unclear to user. | Privacy risk. | Permission explanation and privacy policy. | Privacy/legal review. | -| THR-009 | Logs contain private channel or nickname data by default. | Privacy leakage. | Minimize logs; redact or hash sensitive content. | Diagnostics audit. | -| THR-010 | Build artifact is not traceable to commit. | Supply-chain/release integrity risk. | Release record with commit, tag, build number, hashes. | Go/No-Go record. | - -## 7. Residual Risks - -| Risk ID | Risk | Disposition | -|---|---|---| -| RISK-001 | External compatible servers may expose untrusted content. | Accept with boundary validation and safe rendering. | -| RISK-002 | Platform secure storage behavior differs by OS/version. | Mitigate with per-platform audit. | -| RISK-003 | Dependency vulnerabilities may appear after release. | Mitigate with recurring scan and patch policy. | -| RISK-004 | Diagnostic bundles may contain contextual sensitive data even after redaction. | Mitigate with user confirmation and privacy notice. | - -## 8. Approval - -| Role | Name | Decision | Date | -|---|---|---|---| -| Security Reviewer | TBD | Pending | TBD | -| Software Architect | TBD | Pending | TBD | -| Platform Owner | TBD | Pending | TBD | -| QA / Verification Owner | TBD | Pending | TBD | - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.9.0 | 2026-05-14 | Initial threat model template and baseline candidate. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Desktop Push-to-Talk Threat Addendum (Baseline Candidate 0.9.3) - -| ID | Threat | Asset | Likelihood | Impact | Mitigation | -|---|---|---|---|---|---| -| THREAT-PTT-001 | A desktop PTT backend logs raw key codes or scan codes to the in-memory log sink. | User keystroke privacy | Medium (without controls) | High | `PttSanitizer` per SAD-077 / SDD-090 drops records with banned field names before they reach any sink; backend implementations call `AudioTransmitGate::set` only and never log key data. | -| THREAT-PTT-002 | A desktop PTT backend leaks raw key codes through the user-initiated diagnostic export. | User keystroke privacy | Medium | High | Diagnostic export carries only the capability level, backend identifier, and bound input class per SRS-202 / DEC-027. | -| THREAT-PTT-003 | The application advertises Global PTT support on a platform / permission / environment where it does not actually work. | Honest release claim | Medium | Medium (UX regression, support load) | `PttCapabilityLevel` is published from the *active* backend only; the UI capability badge reflects runtime measurement (SRS-196 / SysRS-298). Release readiness record carries per-platform evidence per SysDes-148. | -| THREAT-PTT-004 | A missed key-up event leaves `transmit_active` true after the user releases the binding (for example because the OS suppressed the event while Chanora was minimised). | Voice transmission integrity, user expectation of mute | Medium | Medium | `MissedKeyUpWatchdog` per SAD-079 / SDD-092 self-clears `transmit_active` after a configured timeout (default 30 s); the watchdog timeout is a P0 requirement per DEC-028. | -| THREAT-PTT-005 | A malicious or buggy third-party application registers a global hook that intercepts Chanora's binding and forces PTT on. | Voice transmission integrity | Low | Medium (user can mitigate by switching binding) | Out of MVP scope; documented as a deferred risk. Chanora reports the active backend identifier so a support investigation can correlate. | -| THREAT-PTT-006 | macOS Input-Monitoring / Accessibility permission is revoked at runtime; the application continues to claim Global PTT. | Honest capability state | Low | Medium | `MacOSEventTapBackend` re-queries the permission state on each tap-disabled callback and downgrades to `L0Focused` via `BridgeEvent::PttCapability`. | - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT threats THREAT-PTT-001..006: raw key logging, key data in diagnostic export, capability over-claim, missed key-up, third-party hook interference, and macOS permission revocation. | diff --git a/docs/ui-ux/adaptive-layout-platform-guide.md b/docs/ui-ux/adaptive-layout-platform-guide.md deleted file mode 100644 index e7b4f22..0000000 --- a/docs/ui-ux/adaptive-layout-platform-guide.md +++ /dev/null @@ -1,84 +0,0 @@ - -# Chanora Adaptive Layout and Platform Behavior Guide - -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English - -**Repo path:** `docs/ui-ux/adaptive-layout-platform-guide.md` --- - -## 1. Purpose - -This guide defines adaptive layout and platform behavior for the Chanora Flutter application. - -## 2. Window Classes - -| Class | Width | Layout | -|---|---:|---| -| Compact | `< 600dp` | Single-column content with mobile navigation | -| Medium | `600dp - 839dp` | Navigation rail or side navigation with main content | -| Expanded | `>= 840dp` | Persistent side pane, main pane, and persistent VoiceBar | - -## 3. Compact Layout - -- Use one primary content area. -- Keep VoiceBar visible or directly reachable. -- Keep connection status visible. -- Use bottom navigation for primary destinations. -- Avoid multi-pane assumptions. - -## 4. Medium Layout - -- Use navigation rail or equivalent side navigation. -- Keep primary content and VoiceBar available. -- Use dialogs or side panels depending on width. - -## 5. Expanded Layout - -- Use persistent side pane for server/channel navigation. -- Use main pane for chat, details, or current feature content. -- Keep VoiceBar persistent. -- Support pointer, keyboard, hover, and context menus. - -## 6. Android Platform Behavior - -- Runtime permissions must be explained before request where appropriate. -- System back behavior is handled as a back intent. -- Predictive back compatibility should be considered where supported. -- Bluetooth and audio routing are handled by platform services. -- Foreground voice behavior is handled according to Android platform rules. - -## 7. iOS Platform Behavior - -- Microphone permission must be explained before request where platform guidelines allow. -- Safe area, home indicator, keyboard avoidance, and route changes must be respected. -- Audio session behavior must be handled through platform audio services. -- Haptics should be restrained and meaningful. - -## 8. Desktop Platform Behavior - -- Keyboard traversal is required for primary controls. -- Tooltips and hover states should be supported. -- Context menus should be supported for channel tree, client rows, and bookmarks. -- Window resizing must not break critical controls. -- Diagnostics export must use platform-appropriate file handling. - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial adaptive layout and platform behavior guide. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/ui-ux/material3-component-catalog.md b/docs/ui-ux/material3-component-catalog.md deleted file mode 100644 index f401c6c..0000000 --- a/docs/ui-ux/material3-component-catalog.md +++ /dev/null @@ -1,105 +0,0 @@ - -# Chanora Component Catalog — Material 3 Baseline - -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English - -**Repo path:** `docs/ui-ux/material3-component-catalog.md` --- - -## 1. Purpose - -This catalog defines Chanora UI components that sit above Material 3 widgets. Components shall consume design tokens and expose accessible, testable APIs. - -## 2. Core Components - -| Component | Stage | Responsibility | -|---|---|---| -| `ChanoraAdaptiveShell` | P0 | Layout and navigation shell for compact, medium, expanded classes | -| `ChanoraVoiceBar` | P0 | Persistent voice controls | -| `ChanoraChannelTree` | P0 | Hierarchical channel and client browser | -| `ChanoraClientTile` | P0 | Client display row | -| `ChanoraStatusBadge` | P0 | Connection, voice, latency, and diagnostic status | -| `ChanoraAudioMeter` | P0 | Input audio level indicator | -| `ChanoraConnectionBanner` | P0 | Connection, reconnect, and error feedback | -| `ChanoraSettingsSection` | P0 | Settings grouping | -| `ChanoraDiagnosticPanel` | P0 | Diagnostics status and export entry | -| `ChanoraContextMenuAnchor` | P1 | Desktop and tablet context menu behavior | - -## 3. Component API Requirements - -### `ChanoraVoiceBar` - -Required properties: - -- connected status -- current channel name -- microphone muted state -- output deafened state -- push-to-talk active state -- input level -- latency summary -- localized labels -- callbacks for mute, deaf, push-to-talk, and settings - -### `ChanoraChannelTree` - -Required properties: - -- root channel nodes -- expanded channel IDs -- selected channel ID -- current voice channel ID -- client node list -- speaking client IDs -- join-channel callback -- context-menu callback -- keyboard traversal support - -### `ChanoraStatusBadge` - -Required properties: - -- state -- label -- icon -- semantic label -- optional severity -- optional tooltip - -### `ChanoraAudioMeter` - -Required properties: - -- level -- disabled state -- semantic value -- reduced-motion mode - -## 4. Accessibility Rules - -- Icon-only controls require semantic labels. -- Status components must not rely on color only. -- Components must support focus where interactive. -- Components must preserve touch target size where practical. -- Components must be testable through widget tests. - -## 5. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial Chanora component catalog. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/ui-ux/material3-design-tokens.md b/docs/ui-ux/material3-design-tokens.md deleted file mode 100644 index 843c978..0000000 --- a/docs/ui-ux/material3-design-tokens.md +++ /dev/null @@ -1,120 +0,0 @@ - -# Chanora Design Tokens — Material 3 Baseline - -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English - -**Repo path:** `docs/ui-ux/material3-design-tokens.md` --- - -## 1. Token Strategy - -Chanora uses Material 3 tokens as the foundation and adds Chanora semantic tokens for voice-client-specific states. - -```text -Material 3 ColorScheme / TextTheme / Shape / Motion - -> Chanora Semantic Tokens - -> Chanora Components - -> Feature Screens -``` - -## 2. Token Groups - -| Group | Purpose | -|---|---| -| `chanora.color.connection.*` | Connection status | -| `chanora.color.voice.*` | Voice states | -| `chanora.color.latency.*` | Latency and packet-loss status | -| `chanora.color.diagnostics.*` | Diagnostic severity | -| `chanora.spacing.*` | Layout spacing | -| `chanora.shape.*` | Corners and component shapes | -| `chanora.motion.*` | Motion duration and reduced-motion behavior | -| `chanora.density.*` | Mobile, tablet, desktop density | -| `chanora.typography.*` | Product role mapping to Material type roles | - -## 3. Color Tokens - -| Token | Purpose | -|---|---| -| `chanora.color.connection.connected` | Connected state | -| `chanora.color.connection.connecting` | Connection in progress | -| `chanora.color.connection.reconnecting` | Recovering connection | -| `chanora.color.connection.disconnected` | Disconnected state | -| `chanora.color.connection.error` | Connection failure | -| `chanora.color.voice.speaking` | User is speaking | -| `chanora.color.voice.muted` | Microphone muted | -| `chanora.color.voice.deafened` | Output deafened | -| `chanora.color.voice.pttActive` | Push-to-talk active | -| `chanora.color.latency.good` | Good latency | -| `chanora.color.latency.warning` | Warning latency | -| `chanora.color.latency.bad` | Bad latency | -| `chanora.color.diagnostics.info` | Informational diagnostic | -| `chanora.color.diagnostics.warning` | Warning diagnostic | -| `chanora.color.diagnostics.error` | Error diagnostic | - -## 4. Typography Mapping - -| Product role | Material 3 type role | -|---|---| -| App title | `headlineSmall` | -| Server name | `titleLarge` | -| Channel name | `bodyLarge` | -| Client nickname | `bodyLarge` | -| Status secondary text | `bodyMedium` | -| Diagnostic metadata | `bodySmall` | -| Button label | `labelLarge` | -| Badge label | `labelMedium` | - -## 5. Spacing Tokens - -| Token | Value | -|---|---:| -| `chanora.spacing.xs` | 4 | -| `chanora.spacing.sm` | 8 | -| `chanora.spacing.md` | 12 | -| `chanora.spacing.lg` | 16 | -| `chanora.spacing.xl` | 24 | -| `chanora.spacing.2xl` | 32 | - -## 6. Shape Tokens - -| Token | Use | -|---|---| -| `chanora.shape.sm` | Small chips, compact controls | -| `chanora.shape.md` | Cards and list containers | -| `chanora.shape.lg` | Panels and navigation surfaces | -| `chanora.shape.xl` | Dialogs and sheets | -| `chanora.shape.full` | Pills, badges, icon buttons | - -## 7. Motion Tokens - -| Token | Purpose | -|---|---| -| `chanora.motion.quick` | Small feedback | -| `chanora.motion.standard` | Normal UI transition | -| `chanora.motion.emphasized` | Major layout transition | -| `chanora.motion.reduced` | Reduced-motion fallback | - -## 8. Flutter Implementation Requirement - -Tokens should be exposed through `ThemeData`, `ColorScheme`, component themes, and `ThemeExtension`. Feature screens shall not hardcode product semantic token values. - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial design token baseline. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/ui-ux/material3-guideline.md b/docs/ui-ux/material3-guideline.md deleted file mode 100644 index 38b93db..0000000 --- a/docs/ui-ux/material3-guideline.md +++ /dev/null @@ -1,93 +0,0 @@ - -# Chanora UI/UX Guideline — Material 3 Baseline - -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Lifecycle support:** Supports SysDes, SRS, SAD, SDD, and Verification -**Design baseline:** Material 3 + Chanora Design System - -**Repo path:** `docs/ui-ux/material3-guideline.md` --- - -## 1. Purpose - -This guideline defines the UI and UX baseline for the Chanora Flutter application. Chanora shall use Material 3 as the foundation, but product-specific voice, channel, connection, latency, diagnostics, platform, and accessibility semantics shall be expressed through Chanora Design System components and tokens. - -## 2. Core UI Principles - -| Principle | Requirement | -|---|---| -| Voice-first control | Mute, deaf, push-to-talk, current channel, and input status must be visible or directly reachable. | -| Connection awareness | Connected, connecting, reconnecting, disconnected, and error states must be visible. | -| Adaptive layout | Layout must adapt by window class rather than hardcoding behavior by platform name. | -| Accessibility baseline | Critical controls must have semantics, focus behavior, text scaling support, and non-color-only status expression. | -| Platform respect | Permission, safe area, keyboard, back, haptic, and audio-route behavior must follow platform expectations. | -| Localization-ready | Product-owned strings must be localized; server-provided content must be displayed as content. | - -## 3. Primary Screens - -| Screen | Stage | Purpose | -|---|---|---| -| Home | P0 | Recent servers, bookmarks, manual connect entry | -| Connect | P0 | Host, port, nickname, password, identity selection | -| Server | P0 | Channel tree, clients, connection status, current channel | -| Voice | P0 | Voice controls, input level, device summary | -| Chat | P1 | Channel text messages | -| Settings | P0 | Audio, UI, localization, platform behavior, shortcuts | -| Diagnostics | P0 | Status, redacted export, troubleshooting information | - -## 4. Interaction Rules - -| Area | Rule | -|---|---| -| Channel tree | Select, expand/collapse, join, context menu, keyboard traversal | -| Client tile | Show speaking, mute/deaf, volume, latency when available | -| Voice controls | Must be reachable with touch, mouse, and keyboard | -| Diagnostics | Export must require explicit user action and show redaction notice | -| Settings | Destructive or permission-changing actions require clear confirmation or explanation | -| Text entry | Chat input must respect IME and keyboard safe areas | - -## 5. Motion Rules - -| Scenario | Allowed behavior | -|---|---| -| Page transition | Minimal fade or shared-axis style transition | -| Speaking indicator | Subtle pulse, disabled or simplified under reduced motion | -| Reconnect banner | Clear state transition without disruptive animation | -| Layout change | Resize/reflow smoothly where possible | -| Error state | Immediate, clear, non-color-only feedback | - -## 6. Accessibility Rules - -| Rule | Baseline | -|---|---| -| Minimum target | Critical controls should meet a 48dp target where practical. | -| Semantics | Icon-only controls require labels. | -| Focus | Desktop and tablet keyboard use require visible focus. | -| State expression | Critical states require more than color. | -| Text scale | Critical controls remain reachable under increased text size. | -| Reduced motion | Non-essential animation is reduced or disabled. | - -## 7. Internationalization UX - -Product strings are localized. Server-provided server names, channel names, nicknames, and messages are not translated. Mixed-language and bidirectional text must be rendered as text content and preserved through diagnostics unless redacted. - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial UI/UX guideline for Material 3, adaptive layout, accessibility, platform behavior, and i18n. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/verification/android-p0-acceptance.md b/docs/verification/android-p0-acceptance.md deleted file mode 100644 index ffd1d5a..0000000 --- a/docs/verification/android-p0-acceptance.md +++ /dev/null @@ -1,319 +0,0 @@ -# Android P0 acceptance — human-must test cases (v1.0.0-rc.8) - -This document captures the human-side verification pass for the -Android P0 ship of Chanora. The officially-tested environment is -**Android 9 (API 28) or later on a physical Android device, installed -via either Play Internal Track or `bundletool install-apks`** (DEC-004). -Emulator support is best-effort — microphone capture and audio routing -in the AVD do not represent real-device behaviour. - -Automated tests (`cargo check`, `cargo test --workspace --lib`, -`flutter test`, `flutter build appbundle --release`) sign off the -mechanical side. This checklist signs off the user-experience side. -A failure on any row blocks promotion of the Android build from rc.8. - -Source: this checklist mirrors the iOS, iPadOS, macOS, Linux, and -Windows acceptance documents. SRS references: SRS-013 (audio), -SRS-111 (foreground service P0), SRS-119 (AAB packaging), -SRS-163 (Android back navigation), SRS-187 (min API 28), -SRS-188 (Play target API), SRS-208 (in-call audio mode), -SRS-209 (RECORD_AUDIO + listen-only fallback). SAD references: -SAD-018, SAD-037, SAD-063, SAD-077, SAD-081, SAD-084, SAD-085, -SAD-086. SDD references: SDD-028, SDD-073, SDD-105, SDD-106, -SDD-107, SDD-108, SDD-109, SDD-110. Decision: DEC-004 -(Android min API 28). System requirements: SysRS-288, SysRS-305, -SysRS-306. - -Android does NOT have a global PTT capability comparable to Windows / -macOS / Linux desktops. Per SDD-110 the desktop PTT backend ladder -collapses to `FocusedPttBackend` on Android and the capability badge -always advertises `L0Focused`. PTT works only while Chanora itself is -the foreground app (and while the voice foreground service per -SDD-107 keeps the mic stream alive when the screen is off). - - -## 0. Pre-flight - -| # | Step | Expected | -|---|---|---| -| 0.1 | On a Linux/macOS host install Android SDK + NDK + cmdline-tools. Accept SDK licences. | `adb`, `bundletool`, and Gradle wrapper are runnable. | -| 0.2 | Connect a physical Android device (API 28+) via USB. Enable Developer Options → USB debugging. | `adb devices` lists the device as `device` (not `unauthorized`). | -| 0.3 | Build the bridge for Android: `rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android && cd ~/chanora && cargo ndk -t arm64-v8a -t armeabi-v7a -t x86_64 -t x86 -p 28 -- build --release -p chanora_bridge`. | `target//release/libchanora_bridge.so` exists for each ABI. (SDD-073 NDK ABI set, SDD-105 JNI load.) | -| 0.4 | Build the AAB: `cd apps/chanora_flutter && flutter build appbundle --release`. | `build/app/outputs/bundle/release/app-release.aab` exists. (SRS-119, SDD-109) | -| 0.5 | Validate the AAB with bundletool: `bundletool build-apks --bundle=app-release.aab --output=chanora.apks --connected-device`. | bundletool reports `Universal APK`/`split APKs` per ABI and no validation errors. (SDD-109) | -| 0.6 | Install on the connected device: `bundletool install-apks --apks=chanora.apks`. (Or Play Console → Internal Testing → upload + opt-in.) | App installs without signature errors. (SDD-073 release-signing CI assertion.) | -| 0.7 | Launch the app. First-launch microphone prompt appears. | Prompt rationale is localized. (SRS-209, SDD-106) | -| 0.8 | About / version label inside Chanora | Shows **`v1.0.0-rc.8`**. | - - -## Device matrix expectations - -Per SRS-187 / SRS-188, DEC-004, AND SDD-116 (Android voice audio backend -device matrix) the human pass shall be executed on the following devices: - -| Tier | Android version | Reason | Acceptance subset | -|---|---|---|---| -| Floor | Android 9 (API 28) | Minimum supported per DEC-004 / SRS-187 / SysRS-288; SDD-116 row A | TC-1..TC-11 (all), TC-14 | -| Mid-tier | Android 12 (API 31) | Covers FGS foreground-type tightening (API 31); SDD-116 row B | TC-1..TC-11 (all), TC-12 predictive-back (if API ≥ 33), TC-15 | -| Target | Android 14 (API 34) per SRS-188 | Play upload + runtime target; SDD-116 row C; FGS-type=microphone strict on API 34 | TC-1..TC-11 (all), TC-13 Play Internal install path, TC-16 | -| OEM: Pixel | Any API ≥ 28 | SDD-116 OEM coverage — Pixel | TC-17 latency rig | -| OEM: Samsung | Any API ≥ 28 | SDD-116 OEM coverage — Samsung | TC-18 latency rig | - -The Pixel and Samsung OEM rows MAY overlap with the API tier rows (e.g. -the API 34 device may be a Pixel). The minimum aggregate is four -physical devices when overlap is used, five otherwise. - - -## TC-1: Install + identity persistence (DEC-006, SRS-201) - -| # | Step | Expected | -|---|---|---| -| 1.1 | Enter a reachable TS3 server address, a nickname, blank password | Connect button enabled | -| 1.2 | Tap Connect | Server snapshot appears | -| 1.3 | Background + relaunch with the same nickname | Server-visible UID is the same (identity persisted in app-private files dir) | - -Traces: SRS-013, SRS-209. SWE.6: SWE6-SV-018. SWE.5: SWE5-IV-016. - - -## TC-2: Microphone permission state machine (SRS-209, SDD-106) - -| # | Step | Expected | -|---|---|---| -| 2.1 | First run: tap PTT → system prompt appears → Allow. | Mic transmits. Capability badge says `L0Focused`. | -| 2.2 | Revoke RECORD_AUDIO via Settings → Apps → Chanora → Permissions while app is running. Return to Chanora and attempt to transmit. | App degrades to listen-only stream (per SRS-209 fallback). No crash. User-visible banner explains state. | -| 2.3 | Re-grant RECORD_AUDIO. | Transmit re-enables without restart (or via clearly-labelled "Retry" button). | -| 2.4 | Fresh install: deny the prompt twice (Android treats this as "permanently denied"). Attempt PTT. | App stays in listen-only; in-app banner deep-links to system settings. | - -Traces: SRS-209, SysRS-306, SAD-085, SDD-106. SWE.4: SWE4-UV-041. SWE.5: SWE5-IV-017. SWE.6: SWE6-SV-019. - - -## TC-3: Voice channel join + foreground service longevity (SRS-111, SDD-107) - -| # | Step | Expected | -|---|---|---| -| 3.1 | Join a voice channel. | Foreground service notification appears with `foregroundServiceType="microphone"` (API 30+). Per SDD-107 the notification is non-dismissible while connected. | -| 3.2 | Lock the screen. Leave the device idle for **≥ 10 minutes**. | Voice continues to be sent/received. No `ANR`, no service kill, no `RemoteServiceException`. | -| 3.3 | Open Settings → Battery while still connected. | Chanora is not listed as "restricted". (P0: warn user if it is.) | -| 3.4 | Disconnect voice channel. | Foreground service stops, notification disappears, AudioManager mode is restored (TC-6 verifies). | - -Traces: SRS-111, SAD-081, SDD-107. SWE.4: SWE4-UV-043. SWE.5: SWE5-IV-018, SWE5-IV-019. SWE.6: SWE6-SV-018. - - -## TC-4: PTT press / release (Focused only — Android limitation, SDD-110) - -| # | Step | Expected | -|---|---|---| -| 4.1 | Open Voice settings → Push to talk | Capability badge clearly states **L0 Focused** with explanatory text noting Android does not expose global hotkeys to background apps. | -| 4.2 | Touch and hold the on-screen PTT button | Mic indicator goes active while held; releases on touch-up. | -| 4.3 | Background the app while holding PTT (swipe home). | Per SDD-110 PTT does NOT continue while backgrounded; transition is observable in the UI on return. | - -Traces: SRS-195, SRS-196, SAD-086, SDD-110. SWE.4: SWE4-UV-044. SWE.6: SWE6-SV-024. - - -## TC-5: Release tail - -| # | Step | Expected | -|---|---|---| -| 5.1 | Set release-tail to 0 ms; tap-release | Sharp on/off. | -| 5.2 | Set release-tail to 500 ms; tap-release | Mic stays on ~500 ms after release. | - - -## TC-6: AudioManager in-call mode round-trip (SRS-208, SDD-108) - -| # | Step | Expected | -|---|---|---| -| 6.1 | Before connecting, capture `AudioManager.getMode()` via diagnostic export (or `adb shell dumpsys audio`). Note the value (typically `MODE_NORMAL`). | Baseline recorded. | -| 6.2 | Connect + join voice channel. | Per SRS-208 / SDD-108 the controller enters in-call mode (`MODE_IN_COMMUNICATION` or platform equivalent). | -| 6.3 | Disconnect. | Per SDD-108 prior-mode snapshot is restored. Re-read AudioManager mode == baseline from 6.1. | -| 6.4 | Bluetooth SCO route check (P1 awareness, P0 minimum: no crash): pair a Bluetooth headset, connect Chanora voice. | P0: no crash, no permanent route lock. P1 follow-up: SCO routes correctly. | - -Traces: SRS-208, SysRS-305, SAD-084, SDD-108. SWE.4: SWE4-UV-045. SWE.5: SWE5-IV-019. SWE.6: SWE6-SV-020. SYS.4: SYS4-SIV-017. - - -## TC-7: Mic / speaker mute - -| # | Step | Expected | -|---|---|---| -| 7.1 | Mute mic via VoiceBar | Mic icon shows muted state; PTT does not unmute. | -| 7.2 | Speaker mute | Other clients silenced locally. | - - -## TC-8: Reconnect - -| # | Step | Expected | -|---|---|---| -| 8.1 | Toggle airplane mode for 10 s then off | Connection-lost banner, then recovers. Foreground service does not crash during the transition. | - - -## TC-9: Diagnostic export + privacy (DEC-027) - -| # | Step | Expected | -|---|---|---| -| 9.1 | Export a diagnostic bundle (Settings → Diagnostics → Export). | Bundle is saved via the system Storage Access Framework picker. Allow-listed fields only; no raw key labels, no audio bytes, no `RECORD_AUDIO` permission token. | - -Traces: SRS-117/SRS-118 family. SWE.6: SWE6-SV-006. - - -## TC-10: Capability badge labels (SDD-110) - -| # | Step | Expected | -|---|---|---| -| 10.1 | Capability badge | Shows `L0Focused` with text explaining Android does not expose session-level global hotkeys. | - - -## TC-11: Android back navigation (SRS-163, SDD-028) - -| # | Step | Expected | -|---|---|---| -| 11.1 | Open a modal sheet (e.g. Settings → Push-to-Talk binding sheet) and press the system back gesture / button. | Modal closes; route stack unchanged. (SDD-028 modal-first rule.) | -| 11.2 | From a leaf screen press back. | Pops one route. Does not exit the app unless on the home route. | -| 11.3 | While PTT is actively held, press back. | Back is **ignored** until PTT is released. (SDD-028 PTT-active-ignore rule.) | -| 11.4 | From the home route press back. | App backgrounds via standard activity finish (does not crash). | - -Traces: SRS-163, SAD-018, SDD-028. SWE.4: SWE4-UV-040, SWE4-UV-042. SWE.5: SWE5-IV-020. SWE.6: SWE6-SV-021. - - -## TC-12: Predictive back (Android 13+ API 33 branch, SDD-028) - -| # | Step | Expected | -|---|---|---| -| 12.1 | On API 33+ enable "Predictive back animations" in Developer Options. Trigger a back gesture from a non-home route. | Predictive back preview shows; release commits the pop. SDD-028 API 33+ branch (`OnBackInvokedCallback`) is exercised. | -| 12.2 | On API ≤ 32 the same scenario uses the legacy `OnBackPressedDispatcher` branch (SDD-028 pre-33 branch). | Same end behaviour; no predictive preview. | - -Traces: SRS-163, SDD-028. SWE.4: SWE4-UV-042. SWE.6: SWE6-SV-021. - - -## TC-13: Play Internal Track / bundletool install path (SRS-119, SRS-188, SDD-109) - -| # | Step | Expected | -|---|---|---| -| 13.1 | Upload `app-release.aab` to Play Console → Internal Testing track (or via `bundletool` for the same effect). | Play accepts the bundle: targetSdk matches SRS-188, minSdk == 28 per DEC-004, signing key is the release CI key per SDD-073. | -| 13.2 | Opt-in tester installs via Play store internal link. | App installs and runs identically to the bundletool path (TC-0.6). | -| 13.3 | Verify the AAB contains per-ABI split APKs (`armeabi-v7a`, `arm64-v8a`, `x86_64`). | bundletool report lists all expected ABIs (SDD-109 ABI splits). | - -Traces: SRS-119, SRS-188, SAD-063, SDD-073, SDD-109. SWE.5: SWE5-IV-020. SWE.6: SWE6-SV-022, SWE6-SV-023. SYS.4: SYS4-SIV-018. - - -## TC-14: Per-device evidence collection on API 28 device (SDD-116 matrix row A) - -| # | Step | Expected | -|---|---|---| -| 14.1 | On the API 28 device, complete pre-flight then `voice_join` a test channel. | Channel join succeeds; FGS active per TC-3. | -| 14.2 | Export the backend diagnostics bundle (Settings → Diagnostics → Export, or the equivalent in-app action). | Export contains `achieved_performance_mode`, `achieved_sharing_mode`, `achieved_input_preset`, `achieved_output_usage`, `achieved_output_content_type`, and per-effect `{aec, ns, agc}` engagement (`hw` / `sw` / `unavailable`). | -| 14.3 | Record all six achieved values + per-effect engagement into the SDD-116 matrix table for the API 28 row. | All fields populated; no `unknown`. | -| 14.4 | `voice_leave`. | Backend tears down cleanly per SWE5-IV-023 reverse order. | - -Traces: SRS-210, SRS-211, SRS-212, SRS-213, SRS-214, SRS-215, SDD-111, SDD-112, SDD-113, SDD-116. SWE.6: SWE6-SV-026, SWE6-SV-027, SWE6-SV-028, SWE6-SV-029, SWE6-SV-030. SWE.5: SWE5-IV-021. - - -## TC-15: Per-device evidence collection on API 31 device (SDD-116 matrix row B) - -| # | Step | Expected | -|---|---|---| -| 15.1 | On the API 31 device, complete pre-flight then `voice_join`. | Channel join succeeds. | -| 15.2 | Export diagnostics bundle. | Same fields as TC-14.2 populated. | -| 15.3 | Record values into SDD-116 matrix table for the API 31 row. | All fields populated. | -| 15.4 | Verify FGS-foreground-type tightening branch is exercised: `dumpsys activity services ` shows the voice service running. | Service entry present; type recorded. | -| 15.5 | `voice_leave`. | Clean teardown. | - -Traces: SRS-210..SRS-215, SDD-111..SDD-116. SWE.6: SWE6-SV-026..030. SWE.5: SWE5-IV-021, SWE5-IV-023. - - -## TC-16: Per-device evidence collection on API 34 device (SDD-116 matrix row C) - -| # | Step | Expected | -|---|---|---| -| 16.1 | On the API 34 device, complete pre-flight then `voice_join`. | Channel join succeeds. | -| 16.2 | Export diagnostics bundle. | Same fields as TC-14.2 populated. | -| 16.3 | Record values into SDD-116 matrix table for the API 34 row. | All fields populated. | -| 16.4 | Verify `dumpsys activity services ` shows `foregroundServiceType=microphone` for the voice service (API 34 type tightening). | `microphone` type present. | -| 16.5 | Screen-off / locked for ≥ 10 minutes during a live voice session. | Mic frames continue (per-minute frame-count probe in diagnostics is non-zero each minute). No `MissingForegroundServiceTypeException` in logcat. | -| 16.6 | `voice_leave`. | Clean teardown. | - -Traces: SRS-210..SRS-215, SDD-107, SDD-111..SDD-116. SWE.6: SWE6-SV-026..030. SWE.5: SWE5-IV-021, SWE5-IV-023, SWE5-IV-026. - - -## TC-17: Glass-to-glass latency measurement on Pixel device (SDD-116 OEM coverage) - -| # | Step | Expected | -|---|---|---| -| 17.1 | Set up the latency rig per `swe6-software-verification-plan.md` "Glass-to-glass latency measurement procedure" (DUT = Pixel device, reference listener on LAN, stereo capture on audio interface). | Rig produces clean impulse / listener channels. | -| 17.2 | Record `achieved_performance_mode` for the Pixel DUT. | Recorded (typically `LowLatency` on Pixel). | -| 17.3 | Run 20 impulses; compute median and p95 latency. | Both recorded. | -| 17.4 | Compare against SRS-210 tier per SWE6-SV-025 pass criteria. | If `LowLatency`: median ≤ 150 ms, p95 ≤ 180 ms. Otherwise: median ≤ 250 ms, p95 ≤ 300 ms. | -| 17.5 | Archive raw stereo WAVs + measurement script + per-impulse CSV. | Artifacts attached to test report. | - -Traces: SRS-210, SDD-111, SDD-112, SDD-116. SWE.6: SWE6-SV-025. SWE.4: SWE4-UV-051 (tier classifier). - - -## TC-18: Glass-to-glass latency measurement on Samsung device (SDD-116 OEM coverage) - -| # | Step | Expected | -|---|---|---| -| 18.1 | Re-run the TC-17 rig with the DUT swapped to a Samsung device. | Rig setup unchanged. | -| 18.2 | Record `achieved_performance_mode` for the Samsung DUT. | Recorded. | -| 18.3 | Run 20 impulses; compute median and p95 latency. | Both recorded. | -| 18.4 | Compare against SRS-210 tier per SWE6-SV-025 pass criteria. | Same thresholds as TC-17.4 against the Samsung-achieved tier. | -| 18.5 | Archive evidence as TC-17.5. | Artifacts attached. | - -Traces: SRS-210, SDD-111, SDD-112, SDD-116. SWE.6: SWE6-SV-025. SWE.4: SWE4-UV-051. - - -## Auto-test sign-off - -These rows do not require human interaction. - -| Layer | Result | -|---|---| -| `cargo check --workspace` | clean | -| `cargo test --workspace --lib` | unchanged (Android-specific Rust code is `#[cfg(target_os = "android")]`-gated) | -| `cargo ndk -t arm64-v8a -t armeabi-v7a -t x86_64 -p 28 -- build --release -p chanora_bridge` | clean per ABI | -| `flutter test` in `apps/chanora_flutter` | green; widget + e2e suites carry SRS trace headers | -| `flutter build appbundle --release` | clean — produces `app-release.aab` | -| `bundletool validate --bundle=app-release.aab` | no errors | -| Gradle `assertMinSdk28` task (per SDD-073) | passes; minSdk in merged manifest == 28 | -| R8 / ProGuard release pass (per SDD-073) | clean; mapping file archived | -| CI release-signing key custody check (per SDD-073) | signing key reference matches expected fingerprint | - - -## Sign-off form - -``` -chanora v1.0.0-rc.8 — Android P0 acceptance -Device 1 (API 28): ______________________ (model + Android version) -Device 2 (mid): ______________________ (model + Android version) -Device 3 (target): ______________________ (model + Android version) -Tester: ______________________ -Date: ______________________ - -TC-1 Install + identity persistence [ pass / fail ] notes: -TC-2 RECORD_AUDIO state machine [ pass / fail ] notes: -TC-3 Voice channel + FGS longevity [ pass / fail ] notes: -TC-4 PTT press / release (Focused) [ pass / fail ] notes: -TC-5 Release tail [ pass / fail ] notes: -TC-6 AudioManager mode round-trip [ pass / fail ] notes: -TC-7 Mic / speaker mute [ pass / fail ] notes: -TC-8 Reconnect [ pass / fail ] notes: -TC-9 Diagnostic export + privacy [ pass / fail ] notes: -TC-10 Capability badge label [ pass / fail ] notes: -TC-11 Back navigation [ pass / fail ] notes: -TC-12 Predictive back (API 33+) [ pass / fail ] notes: -TC-13 Play Internal / bundletool install [ pass / fail ] notes: -TC-14 Per-device evidence API 28 (SDD-116 A)[ pass / fail ] notes: -TC-15 Per-device evidence API 31 (SDD-116 B)[ pass / fail ] notes: -TC-16 Per-device evidence API 34 (SDD-116 C)[ pass / fail ] notes: -TC-17 Latency rig — Pixel [ pass / fail ] notes: -TC-18 Latency rig — Samsung [ pass / fail ] notes: - -Overall result: [ Android rc.8 PASS / Android rc.8 FAIL ] -Sign: ______________________ -``` - - -## Known gaps (not blockers) - -- **Bluetooth SCO routing**: P0 only requires no-crash behaviour. Full SCO route correctness is P1. -- **Background PTT**: not possible on Android per platform model; `FocusedPttBackend` only (SDD-110). -- **VAD** (`TransmitMode::VoiceActivity`) intentionally disabled in P0 (DEC-030). -- **Tablet / foldable layouts**: this checklist targets phone form factor. The wide-mode (≥ 840 dp) UI works but is not signed off here. -- **Play Console upload key custody**: depends on whoever holds the release keystore; CI signing assertion (SDD-073) covers the mechanical side only. diff --git a/docs/verification/ios-p0-acceptance.md b/docs/verification/ios-p0-acceptance.md deleted file mode 100644 index 6275e8a..0000000 --- a/docs/verification/ios-p0-acceptance.md +++ /dev/null @@ -1,183 +0,0 @@ -# iOS P0 acceptance — human-must test cases (v1.0.0-rc.8) - -This document captures the human-side verification pass for the -iOS P0 ship of Chanora. The officially-tested environment is -**iOS 17 or later on a physical iPhone signed with the developer's -personal team** (DEC-025). Simulator support is best-effort — -microphone capture is simulated by the host's mic but global PTT -behaviour cannot be exercised in the simulator. - -Automated tests (`cargo check`, `cargo test --workspace --lib`) -sign off the mechanical side. This checklist signs off the user- -experience side. A failure on any row blocks promotion of the iOS -build from rc.8. - -Source: this checklist mirrors the macOS, Linux, and Windows -acceptance documents. Auto-test sign-off lives in this document's -"Auto-test sign-off" section. SDD references: SDD-094..097, SDD-098..104 (v1 -audio + PTT lifecycle), DEC-025 (target environment), DEC-027 -(diagnostic privacy invariant), SRS-197 (iOS audio routing -contract), SRS-198 (honest capability advertising under runtime -permission state). - -iOS does NOT have a global PTT capability comparable to Windows / -macOS / Linux desktops. The desktop PTT backend ladder -(`SDD-081..088`) collapses to `FocusedPttBackend` on iOS and the -capability badge always advertises `L0Focused`. PTT works only -while Chanora itself is the foreground app. This is intentional -per DEC-025 — Apple's iOS sandbox model has no path to a -session-level event tap analogue. - - -## 0. Pre-flight - -| # | Step | Expected | -|---|---|---| -| 0.1 | Open `apps/chanora_flutter/ios/Runner.xcworkspace` in Xcode once. In Runner target → Signing & Capabilities → set your **personal team** (free Apple ID team is sufficient for the P0 device pass). Set a unique bundle identifier (e.g. `your.name.chanoraFlutter`) — the default `com.example.chanoraFlutter` may already be claimed in the App Store registry. | Xcode shows "Provisioning Profile: Xcode Managed Profile" with no errors. | -| 0.2 | Connect a physical iPhone via USB and trust the development Mac. On the iPhone: Settings → General → VPN & Device Management → developer-cert → Trust. | iPhone appears in Xcode's device picker. | -| 0.3 | Build the bridge for the device: `cd ~/chanora && rustup target add aarch64-apple-ios && cargo build --release --target aarch64-apple-ios -p chanora_bridge`. | `target/aarch64-apple-ios/release/libchanora_bridge.a` is produced. | -| 0.4 | Build the Flutter app: `cd apps/chanora_flutter && flutter build ios --release`. | `build/ios/iphoneos/Runner.app` exists. | -| 0.5 | Install + launch on the iPhone: in Xcode pick the device + Runner scheme → Run. | App launches on phone. | -| 0.6 | On first launch the iPhone prompts for **Microphone** access — Allow. | Prompt text matches `NSMicrophoneUsageDescription` from `ios/Runner/Info.plist`. | -| 0.7 | About / version label inside Chanora | Shows **`v1.0.0-rc.8`**. | - - -## TC-1: Connect + identity persistence (DEC-006, SRS-201) - -| # | Step | Expected | -|---|---|---| -| 1.1 | Enter a reachable TS3 server address, a nickname, blank password | Connect button enabled | -| 1.2 | Tap Connect | Server snapshot appears | -| 1.3 | Quit (background) + relaunch with the same nickname | Server-visible UID is the same (identity persisted in the app-private support directory as `identity.tskey`) | - - -## TC-2: Voice channel join (SRS-204, SDD-094) - -| # | Step | Expected | -|---|---|---| -| 2.1 | Tap a voice channel | Join works; voice bar shows the channel name. Mic capture starts (the iOS status bar may show a red microphone indicator). | -| 2.2 | Tap a different voice channel | Smooth move; no audio dropout. | - - -## TC-3: PTT press / release (Focused only — iOS limitation, SDD-103) - -| # | Step | Expected | -|---|---|---| -| 3.1 | Open Voice settings (gear icon), select Push to talk | The capability badge clearly states **L0 Focused** with explanatory text noting iOS does not permit global hotkeys. | -| 3.2 | Bind a key — the only "bound" key on iOS is the on-screen PTT button in the Voice Bar | "Bound key" UI is replaced by an on-screen Push-to-Talk button. | -| 3.3 | Touch and hold the PTT button | Mic indicator turns "Mic on" while held; releases on touch-up. | - - -## TC-4: Release tail (SDD-096) - -| # | Step | Expected | -|---|---|---| -| 4.1 | Set release-tail to 0 ms; tap-and-release the PTT button | Sharp on/off transition. | -| 4.2 | Set release-tail to 500 ms; tap-and-release | Mic stays on for ~500 ms after release. | - - -## TC-5: Continuous mode - -| # | Step | Expected | -|---|---|---| -| 5.1 | Switch to Continuous mode | PTT button disappears; mic stays open while in the voice channel. | - - -## TC-6: Mic mute - -| # | Step | Expected | -|---|---|---| -| 6.1 | Mute mic via the Voice Bar | Mic icon shows muted state; touching the PTT button does not unmute it. | - - -## TC-7: Speaker mute - -| # | Step | Expected | -|---|---|---| -| 7.1 | Speaker mute | Other clients silenced locally. | - - -## TC-8: Background audio (UIBackgroundModes = audio, SDD-102) - -| # | Step | Expected | -|---|---|---| -| 8.1 | While connected + in a voice channel + in Continuous mode, swipe Chanora to the background. | The iOS red microphone indicator stays on; voice continues to be received and sent. | -| 8.2 | Return to Chanora | Session intact; no reconnect cycle. | -| 8.3 | Lock the iPhone for 30 s, then unlock | Session still intact (provided you stayed in the channel and on cellular/wifi network). | - - -## TC-9: AVAudioSession routing (SDD-098, SDD-100, SDD-101) - -| # | Step | Expected | -|---|---|---| -| 9.1 | With voice connected, place an iPhone phone call to yourself (or have someone call). | Chanora's audio session yields to the phone call (iOS owns the audio focus). | -| 9.2 | End the phone call | Chanora resumes audio without manual reconnect. | -| 9.3 | Connect AirPods / Bluetooth headset; talk on Chanora | Audio routes to the headset (`.allowBluetoothHFP` + `.allowBluetoothA2DP` are set in `AppDelegate.swift`). | - - -## TC-10: Reconnect - -| # | Step | Expected | -|---|---|---| -| 10.1 | Toggle Airplane Mode on for 10 s, then off | Connection-lost banner appears, then recovers. | - - -## TC-11: Diagnostic export + privacy (DEC-027) - -| # | Step | Expected | -|---|---|---| -| 11.1 | Export a diagnostic bundle | Allow-listed fields only; no raw key labels, no audio bytes. | - - -## TC-12: Capability badge labels (SDD-103) - -| # | Step | Expected | -|---|---|---| -| 12.1 | Capability badge | Shows `L0Focused` with explanation that iOS does not expose global hotkeys. | - - -## Auto-test sign-off - -These rows do not require human interaction. - -| Layer | Result | -|---|---| -| `cargo check --workspace` on macOS host | clean | -| `cargo test --workspace --lib` on macOS host | unchanged (iOS-specific Rust code is `#[cfg(target_os = "ios")]`-gated and not exercised in host tests) | -| `cargo build --release --target aarch64-apple-ios -p chanora_bridge` | clean — produces `libchanora_bridge.a` | -| `flutter build ios --release` | clean — produces `Runner.app` | -| `AppDelegate.swift` registers `AVAudioSession.routeChangeNotification` and `AVAudioSession.interruptionNotification` observers (SDD-100, SDD-101) | Log lines `chanora_flutter: route change reason=…` and `chanora_flutter: audio interruption began/ended` in device console. | - - -## Sign-off form - -``` -chanora v1.0.0-rc.8 — iOS P0 acceptance -Device: ______________________ (model + iOS version) -Tester: ______________________ -Date: ______________________ - -TC-1 Connect + identity persistence [ pass / fail ] notes: -TC-2 Voice channel join [ pass / fail ] notes: -TC-3 PTT press / release (Focused) [ pass / fail ] notes: -TC-4 Release tail [ pass / fail ] notes: -TC-5 Continuous mode [ pass / fail ] notes: -TC-6 Mic mute [ pass / fail ] notes: -TC-7 Speaker mute [ pass / fail ] notes: -TC-8 Background audio [ pass / fail ] notes: -TC-9 AVAudioSession routing [ pass / fail ] notes: -TC-10 Reconnect [ pass / fail ] notes: -TC-11 Diagnostic export + privacy [ pass / fail ] notes: -TC-12 Capability badge label [ pass / fail ] notes: - -Overall result: [ iOS rc.8 PASS / iOS rc.8 FAIL ] -Sign: ______________________ -``` - - -## Known gaps (not blockers) - -- **TestFlight + App Store distribution**: requires the paid $99/yr Apple Developer Program (the personal team is sufficient for sideloaded device testing but not for TestFlight). P1 follow-up. -- **Simulator audio**: cpal-via-CoreAudio inside the iOS simulator routes to the Mac's audio devices and is fine for smoke-testing the UI, but real microphone capture / AEC behaviour cannot be assessed there. Test on a physical iPhone. -- **VAD** (`TransmitMode::VoiceActivity`) is intentionally disabled in P0 (DEC-030). -- **iPad layout**: this checklist targets iPhone. The wide-mode (≥ 840 dp) UI works on iPad but is not signed off here. diff --git a/docs/verification/ipad-p0-acceptance.md b/docs/verification/ipad-p0-acceptance.md deleted file mode 100644 index ee6ffd1..0000000 --- a/docs/verification/ipad-p0-acceptance.md +++ /dev/null @@ -1,245 +0,0 @@ -# iPad P0 acceptance — human-must test cases (v1.0.0-rc.8) - -This document captures the human-side verification pass for the -iPad P0 ship of Chanora. The build artefact is the **same** -`Runner.app` produced for iPhone (`TARGETED_DEVICE_FAMILY = "1,2"` -in `Runner.xcodeproj` — both iPhone (1) and iPad (2)). Apple's -free Personal Team provisioning profile includes iPad in the -universal family, so the same sideload that installs on an iPhone -installs on an iPad. - -The officially-tested environment is **iPadOS 17 or later on a -physical iPad**, signed with the developer's personal team -(DEC-025 covers iPhone; this document extends P0 coverage to -iPad). Simulator support is best-effort — microphone capture and -AirPlay 2 routing cannot be assessed in the simulator. - -Automated tests (`cargo check`, `cargo test --workspace --lib`) -sign off the mechanical side. This checklist signs off the user- -experience side. A failure on any row blocks promotion of the -iPad build from rc.8. - -Source: this checklist extends `ios-p0-acceptance.md` with the -three iPad-specific rows (split-view multitasking, on-screen -keyboard occlusion, AirPlay 2 audio route) and removes the rows -that don't apply (background-audio behaviour is identical -because both share the same `UIBackgroundModes = ['audio']` -declaration in `Info.plist`). SDD references: SDD-094..097 (v1 -audio + PTT lifecycle), DEC-025 (target environment), DEC-027 -(diagnostic privacy invariant), SRS-197 (iOS/iPadOS audio -routing contract). - -iPad does **not** have a global PTT capability — Apple's iOS / -iPadOS sandbox model has no session-level event-tap analogue. -The desktop PTT backend ladder (SDD-081..088) collapses to -`FocusedPttBackend` and the capability badge advertises -`L0Focused`. PTT works only while Chanora is the foreground app -(or the audio-background mode keeps streaming when Chanora is -backgrounded; see TC-8 / TC-13). - - -## 0. Pre-flight - -| # | Step | Expected | -|---|---|---| -| 0.1 | Same Xcode signing setup as iOS: in `Runner.xcworkspace`, Runner target → Signing & Capabilities → personal team selected, unique bundle id. (If you already did this for iPhone the iPad uses the same provisioning profile.) | No code-signing errors in Xcode. | -| 0.2 | Connect iPad via USB and trust the development Mac. On iPad: Settings → General → VPN & Device Management → developer-cert → Trust. | iPad appears in Xcode's device picker. | -| 0.3 | Build for iPad: in Xcode pick the iPad as the run destination + Runner scheme → Cmd+R. (Or via CLI: `flutter build ios --release` then sideload with `xcrun devicectl device install app`.) | App installs on iPad and launches. | -| 0.4 | First launch: iPad prompts for **Microphone** access — Allow. The prompt string matches `NSMicrophoneUsageDescription` from `ios/Runner/Info.plist`. | Mic permission granted. | -| 0.5 | About / version label inside Chanora | Shows **`v1.0.0-rc.8`**. | - - -## TC-1: Connect + identity persistence (DEC-006, SRS-201) - -| # | Step | Expected | -|---|---|---| -| 1.1 | Enter a reachable TS3 server address, a nickname, blank password | Connect button enabled. | -| 1.2 | Tap Connect | Server snapshot appears. | -| 1.3 | Quit (background) + relaunch with the same nickname | Server-visible UID is the same (identity persisted in `Documents/identity.tskey`). | - - -## TC-2: Voice channel join (SRS-204, SDD-094) - -| # | Step | Expected | -|---|---|---| -| 2.1 | Tap a voice channel | Join works; voice bar shows the channel name. Mic capture starts (iOS status bar shows the orange mic indicator on iPadOS 17+). | -| 2.2 | Tap a different voice channel | Smooth move; no audio dropout. | - - -## TC-3: PTT press / release (Focused only — iPadOS limitation) - -| # | Step | Expected | -|---|---|---| -| 3.1 | Open Voice settings (gear icon), select Push to talk | Capability badge clearly states **L0 Focused** with explanatory text that iPadOS does not permit global hotkeys. | -| 3.2 | The "Bound key" UI is replaced by an on-screen Push-to-Talk button. | Touch and hold the button → mic indicator turns "Mic on". Release → indicator returns "Mic off" after the configured release-tail. | - - -## TC-4: Release tail (SDD-097) - -| # | Step | Expected | -|---|---|---| -| 4.1 | Set release-tail to 0 ms; tap-and-release the PTT button | Sharp on/off transition. | -| 4.2 | Set release-tail to 500 ms; tap-and-release | Mic stays on for ~500 ms after release. | - - -## TC-5: Continuous mode - -| # | Step | Expected | -|---|---|---| -| 5.1 | Switch to Continuous mode | PTT button disappears; mic stays open while in the voice channel. | - - -## TC-6: Mic mute - -| # | Step | Expected | -|---|---|---| -| 6.1 | Mute mic via the Voice Bar | Mic icon shows muted state. Touching the PTT button does NOT unmute. | - - -## TC-7: Speaker mute - -| # | Step | Expected | -|---|---|---| -| 7.1 | Speaker mute | Other clients silenced locally. | - - -## TC-8: Background audio (UIBackgroundModes = audio) - -| # | Step | Expected | -|---|---|---| -| 8.1 | While connected + in a voice channel + in Continuous mode, swipe Chanora to the App Switcher (or press the home button if your iPad has one). | The iPadOS orange mic indicator stays on; voice continues to be received and sent. | -| 8.2 | Return to Chanora | Session intact; no reconnect cycle. | -| 8.3 | Lock the iPad for 30 s, then unlock | Session still intact (provided you stayed in the channel and on Wi-Fi/cellular). | - - -## TC-9: AVAudioSession routing (SRS-197) - -| # | Step | Expected | -|---|---|---| -| 9.1 | Connect AirPods / Bluetooth headset; talk on Chanora | Audio routes to the headset (`.allowBluetooth` + `.allowBluetoothA2DP` are set in `AppDelegate.swift::application(_:didFinishLaunchingWithOptions:)`). | -| 9.2 | Disconnect the headset mid-call | Audio routes back to the built-in speakers (`.defaultToSpeaker`). | -| 9.3 | (If iPad has FaceTime configured) place a FaceTime call to yourself or have someone call. | Chanora's audio session yields to the FaceTime call. | -| 9.4 | End the FaceTime call | Chanora resumes audio without manual reconnect. | - - -## TC-10: Reconnect - -| # | Step | Expected | -|---|---|---| -| 10.1 | Toggle Airplane Mode on for 10 s, then off | Connection-lost banner appears, then recovers. | - - -## TC-11: Diagnostic export + privacy (DEC-027) - -| # | Step | Expected | -|---|---|---| -| 11.1 | Export a diagnostic bundle | Allow-listed fields only; no raw key labels, no audio bytes. | - - -## TC-12: Capability badge label - -| # | Step | Expected | -|---|---|---| -| 12.1 | Capability badge | Shows `L0Focused` with explanation that iPadOS does not expose global hotkeys. | - - -## TC-13: iPad-specific — wide-mode landscape layout - -The Flutter UI uses a `LayoutBuilder` 840 dp breakpoint -(`apps/chanora_flutter/lib/main.dart`). On iPhone in portrait the -body is below 840 dp, so the layout is stacked (Voice Bar on top, -channel tree below). On iPad in landscape the body is well above -840 dp, so the layout splits into a 320 dp left column (banner + -Voice Bar) and the rest filled by the channel tree. - -| # | Step | Expected | -|---|---|---| -| 13.1 | Rotate iPad to landscape, connect to a server, double-click into a voice channel. | Voice Bar pinned to a 320 dp left column. Channel tree fills the rest. The "not production ready" banner sits inside the left column above the Voice Bar (per the earlier left-column-banner change). | -| 13.2 | Rotate iPad to portrait. | Layout flips back to the stacked iPhone-style arrangement. Voice Bar on top full-width, channel tree below. Banner pins full-width at the top above the connection status. | -| 13.3 | In landscape, join a channel with a very long name. | The channel-name pill in the Voice Bar truncates with an ellipsis instead of overflowing under the channel tree. Mute icons stay anchored to the right edge of the left column. | - - -## TC-14: iPad-specific — Split View / Slide Over - -Multitasking with other iPad apps. Our scaffold currently sets -`UIApplicationSupportsMultipleScenes = false` in `Info.plist`, -so Split View is **not** supported in P0. This row exists to -document that and ensure the app doesn't crash when iPadOS tries. - -| # | Step | Expected | -|---|---|---| -| 14.1 | In landscape, swipe up from the iPad home indicator → drag Chanora to the right edge to enter Split View, or pick "Slide Over" from the iPadOS multitasking menu. | iPadOS shows the Split View / Slide Over UI but Chanora remains full-screen and does not crash. The non-support is by design for P0; a P1 follow-up will switch to multi-scene. | - - -## TC-15: iPad-specific — AirPlay 2 audio route - -| # | Step | Expected | -|---|---|---| -| 15.1 | While in a voice channel, open Control Center → AirPlay → pick an AirPlay 2 speaker (HomePod, Apple TV, AirPlay-compatible receiver). | Audio routes to the AirPlay destination. The PTT-active indicator continues to work; the mic stays routed to the iPad built-in mic (AirPlay 2 receivers don't typically have a return mic channel). | -| 15.2 | Reselect "iPad" as the audio route | Audio returns to local routing. No restart needed. | - - -## Auto-test sign-off - -These rows do not require human interaction. The values are the -same as the iOS document — iPad uses the identical Rust + Flutter -build artefacts. - -| Layer | Result | -|---|---| -| `cargo check --workspace` on macOS host | clean | -| `cargo test --workspace --lib` on macOS host | unchanged (iPad-specific Rust code does not exist; iOS-targeted code is `#[cfg(target_os = "ios")]`-gated and applies identically to iPadOS) | -| `cargo build --release --target aarch64-apple-ios -p chanora_bridge` | clean — produces `libchanora_bridge.a` | -| `flutter build ios --release` | clean — produces `Runner.app` ≈ 17 MB (same artefact as iPhone) | -| `Runner.xcodeproj` `TARGETED_DEVICE_FAMILY = "1,2"` | Universal family confirmed via `grep TARGETED_DEVICE_FAMILY ios/Runner.xcodeproj/project.pbxproj`. | - - -## Sign-off form - -``` -chanora v1.0.0-rc.8 — iPad P0 acceptance -Device: ______________________ (iPad model + iPadOS version) -Tester: ______________________ -Date: ______________________ - -TC-1 Connect + identity persistence [ pass / fail ] notes: -TC-2 Voice channel join [ pass / fail ] notes: -TC-3 PTT press / release (Focused) [ pass / fail ] notes: -TC-4 Release tail [ pass / fail ] notes: -TC-5 Continuous mode [ pass / fail ] notes: -TC-6 Mic mute [ pass / fail ] notes: -TC-7 Speaker mute [ pass / fail ] notes: -TC-8 Background audio [ pass / fail ] notes: -TC-9 AVAudioSession routing [ pass / fail ] notes: -TC-10 Reconnect [ pass / fail ] notes: -TC-11 Diagnostic export + privacy [ pass / fail ] notes: -TC-12 Capability badge label [ pass / fail ] notes: -TC-13 Wide-mode landscape layout [ pass / fail ] notes: -TC-14 Split View / Slide Over no-crash [ pass / fail ] notes: -TC-15 AirPlay 2 audio route [ pass / fail ] notes: - -Overall result: [ iPad rc.8 PASS / iPad rc.8 FAIL ] -Sign: ______________________ -``` - - -## Known gaps (not blockers) - -- **Split View / Slide Over multitasking** is intentionally - unsupported in P0. `UIApplicationSupportsMultipleScenes` stays - `false` until we wire iPadOS multi-scene handling (P1). -- **Apple Pencil + external keyboard shortcuts**: not wired. A - paid Developer Program account would let us declare - `GCKeyboard` hardware-keyboard support for things like Cmd+M - to mute — P1 follow-up. -- **Stage Manager** (iPadOS 16+): app runs but the layout is not - optimised for resizable Stage Manager windows. P1. -- **TestFlight + App Store distribution**: requires the paid - $99/yr Apple Developer Program. P1 follow-up. -- **Simulator audio**: cpal-via-CoreAudio inside the iPad - simulator routes to the Mac's audio devices and is fine for - smoke-testing the UI, but real microphone capture / AEC - behaviour and AirPlay 2 routing cannot be assessed there. - Test on a physical iPad. -- **VAD** (`TransmitMode::VoiceActivity`) is intentionally - disabled in P0 (DEC-030). diff --git a/docs/verification/linux-p0-acceptance.md b/docs/verification/linux-p0-acceptance.md deleted file mode 100644 index 399dd16..0000000 --- a/docs/verification/linux-p0-acceptance.md +++ /dev/null @@ -1,228 +0,0 @@ -# Linux P0 acceptance — human-must test cases (v1.0.0-rc.8) - -This document captures the human-side verification pass for the -Linux P0 ship of Chanora. The officially-tested environment is -**GNOME on Wayland** (DEC-025); on every other Linux environment -(X11, sway, KDE, etc.) the desktop PTT layer cleanly downgrades to -`FocusedPttBackend` and the rest of the app continues to function. - -Automated tests (`cargo check`, `cargo test --workspace --lib`, -the `#[ignore]`-gated `linux_portal_smoke.rs`, and the cross- -platform `ptt_privacy` integration test) sign off the mechanical -side. This checklist signs off the user-experience side. A failure -on any row blocks promotion of the Linux build from rc.8. - -Source: this checklist mirrors `windows-p0-acceptance.md`. The -auto-test sign-off lives in this document's "Auto-test sign-off" -section. SDD references: SDD-081 (trait), SDD-086 (Linux GNOME -Wayland portal backend), SDD-094..097 (v1 audio + PTT lifecycle), -DEC-025 (target environment), DEC-027 (diagnostic privacy -invariant). - - -## 0. Pre-flight - -| # | Step | Expected | -|---|---|---| -| 0.1 | Log in to the GNOME on Wayland session at the physical console of `100.74.219.114` (user `edison`). Verify `echo $XDG_SESSION_TYPE` prints `wayland` and `echo $XDG_CURRENT_DESKTOP` contains `GNOME`. | Wayland GNOME session active. SSH/`tty` sessions are **not** sufficient; on those `try_select()` correctly returns `None` and the rest of this checklist is skipped from row TC-3 onward. | -| 0.2 | Confirm `xdg-desktop-portal` and `xdg-desktop-portal-gnome` are installed: `pacman -Q xdg-desktop-portal xdg-desktop-portal-gnome` | Both packages present. (On the Arch verification host these are `1.20.4-1` and `50.0-1` respectively.) | -| 0.3 | Wipe stale install: `rm -rf ~/.local/share/app.chanora/ ~/.config/app.chanora/` | First-launch from clean state. | -| 0.4 | Build: `cd ~/chanora && cargo build --release -p chanora_bridge`. Then build the Flutter Linux bundle: `cd apps/chanora_flutter && flutter build linux --release` and copy `target/release/libchanora_bridge.so` next to the runner if the build glue did not auto-bundle it. | Build succeeds, runner binary at `apps/chanora_flutter/build/linux/x64/release/bundle/chanora_flutter` exists, bridge `.so` is in `bundle/lib/` or alongside the runner. | -| 0.5 | Launch the runner from a GNOME-Wayland terminal (so the process inherits the right `DBUS_SESSION_BUS_ADDRESS` + `WAYLAND_DISPLAY`). | Window opens, no crash. | -| 0.6 | Open About / version label | Shows **`v1.0.0-rc.8`**. | -| 0.7 | Open `~/.local/share/app.chanora/chanora_flutter/logs/chanora.log` | Contains `bridge initialised`, `log file path …`, `identity store initialised`, `bookmark store initialised`. File <1 MB. The descriptor line for the PTT backend should mention `backend_id = "gnome-wayland-portal"` (or `"focused"` if not on GNOME Wayland). | - - -## TC-1: Connect + identity persistence (DEC-006, SRS-201) - -| # | Step | Expected | -|---|---|---| -| 1.1 | Enter a reachable TS3 server address, a nickname, blank password | "Connect" button enabled | -| 1.2 | Click Connect | Server snapshot appears: channel tree on left, client list visible | -| 1.3 | Note the connected server name + the channel tree | Tree is sorted (parents above children); depth indent visible up to 6 levels | -| 1.4 | Disconnect, reconnect with the same nickname | Server-visible UID is the same as previous session (identity persisted via `~/.local/share/app.chanora/identity.dek`) | -| 1.5 | Disconnect | Returns to connect form, no error | - - -## TC-2: Voice channel join (SRS-204, SDD-094) - -| # | Step | Expected | -|---|---|---| -| 2.1 | After connecting, observe the UI | **No "Start audio" button anywhere.** Voice Bar is visible at the bottom. | -| 2.2 | Double-click a voice channel | Client moves into that channel; voice bar shows the channel name; `voice_join` log line appears with no error | -| 2.3 | Double-click a different voice channel | Client moves; no audio glitch; `voice_join` repeats cleanly | -| 2.4 | Double-click the same channel again quickly (concurrency) | Either: no-op move, or single clean move; no duplicate audio engine spawn (engine is single-instance) | - - -## TC-3: PTT press / release (SDD-083, SDD-086, SDD-096) — GNOME-Wayland only - -| # | Step | Expected | -|---|---|---| -| 3.1 | Open Voice settings (gear icon), select **Push to talk** | Bind-key row + Release-tail slider become visible | -| 3.2 | Click "Bind key" | GNOME's **system** portal dialog appears asking you to pick a shortcut. (Chanora itself never reads raw keys — this is the portal's own UI.) | -| 3.3 | Pick a key (e.g. Right Ctrl), accept | Dialog closes. VoiceBar's capability badge transitions from `L0` to `L2 GlobalHoldToTalk` (or `L3` for a mouse side-button). Bound-key label shows the portal's translated description. | -| 3.4 | With another window focused, hold the bound key | Mic indicator turns "Mic on"; `transmit_active` true in stats | -| 3.5 | Release the key | After the configured release-tail, indicator returns to "Mic off" | -| 3.6 | Switch focus several times while pressing the key | PTT still fires from another window — this is the portal's "global" guarantee | - - -## TC-4: Release tail (SDD-097) - -| # | Step | Expected | -|---|---|---| -| 4.1 | Set release-tail to 0 ms in Voice settings | Slider updates immediately | -| 4.2 | Tap PTT key briefly | Mic on/off transition is sharp (no tail) | -| 4.3 | Set release-tail to 500 ms | Slider updates immediately | -| 4.4 | Tap PTT key briefly | Mic stays "on" for ~500 ms after release before flipping to off | - - -## TC-5: Continuous mode (SDD-094) - -| # | Step | Expected | -|---|---|---| -| 5.1 | Switch transmit mode to **Continuous** | Bind-key + release-tail rows disappear; capability badge greys out. | -| 5.2 | Talk into mic | "Mic on" stays solid; no self-disable bug. | -| 5.3 | Switch back to PTT | Previously bound key still works without re-binding (binding persisted in `audio_meta.json`). | - - -## TC-6: Mic mute (SDD-097) - -| # | Step | Expected | -|---|---|---| -| 6.1 | Press mic-mute toggle in Voice Bar | Mic icon shows muted state; selector hard-mute engaged. | -| 6.2 | Press PTT (still muted) | No "Sending audio while muted" spam in log. Mic indicator does not flip on. | -| 6.3 | Un-mute | PTT resumes working normally. | - - -## TC-7: Speaker mute - -| # | Step | Expected | -|---|---|---| -| 7.1 | Press speaker-mute toggle | Other clients in channel are silenced locally; server still sees you in channel. | - - -## TC-8: Binding persistence across restart - -| # | Step | Expected | -|---|---|---| -| 8.1 | With a working PTT binding, quit Chanora | `audio_meta.json` next to `identity.dek` shows the new `ptt_*` fields. | -| 8.2 | Relaunch | Binding restored without re-running the portal dialog. Hold key — mic flips on. | - - -## TC-9: Binding before voice-join - -| # | Step | Expected | -|---|---|---| -| 9.1 | Connect to server, do **not** join a voice channel yet. Open Voice settings, bind a PTT key. | Portal dialog appears; binding succeeds. | -| 9.2 | Now double-click a voice channel | Voice engine starts with the existing binding active immediately. | - - -## TC-10: No-permission channel rejection (typed `ServerRejected` propagation) - -| # | Step | Expected | -|---|---|---| -| 10.1 | Try to join a channel you lack permissions on | Red SnackBar with a human message derived from the TS3 error code (e.g. `permissions_client_insufficient` → "You do not have permission to join this channel."). Move does not silently fail. | - - -## TC-11: Reconnect - -| # | Step | Expected | -|---|---|---| -| 11.1 | Yank the wifi or run `nmcli con down …` for 10 s, then reconnect | UI shows red "Connection lost" banner, then recovers. Transient `os error 111` blips are logged but **not** shown as a banner. | - - -## TC-12: Diagnostic export + privacy (DEC-027, SAD-077, SDD-090) - -| # | Step | Expected | -|---|---|---| -| 12.1 | Open Diagnostics, export a bundle | Bundle contains tracing records with allow-listed fields only: `backend_id`, `bound_input_class`, `capability_level`, `host_id`, `timeout_secs`, `error`, `event`, `message`, `target`, `level`. **No `platform_key`, no `trigger_description`, no raw key codes.** | -| 12.2 | Grep the bundle for the human-readable PTT key label | No hit. | - - -## TC-13: PTT bind dialog labels - -| # | Step | Expected | -|---|---|---| -| 13.1 | Open Voice settings; the Bind-key row's display reads the portal's translated description (e.g. "Ctrl+Right Shift") | The translated string never appears in `chanora.log`. | - - -## TC-14: Capability badge gating - -| # | Step | Expected | -|---|---|---| -| 14.1 | On a non-GNOME-Wayland session (e.g. SSH-only `tty`, X11, sway), the badge displays `L0Focused` and explains it is information-only. The Bind-key UI is hidden in PTT mode if the backend is `focused`. | Verified manually by logging into the matching environment. | - - -## TC-15: Indicator label - -| # | Step | Expected | -|---|---|---| -| 15.1 | In any mode, look at the stats line | Reads "Mic on" / "Mic off" (mode-neutral); **not** "PTT on" / "PTT off" | - - -## Auto-test sign-off - -These rows do not require human interaction. - -| Layer | Result on Arch host `100.74.219.114` | -|---|---| -| `cargo check --workspace --release` | clean (`Finished `release` profile [optimized] target(s) in 30.99s`) | -| `cargo test --workspace --lib` | **78 passed / 0 failed / 1 ignored** (sums across all 7 workspace crates: `chanora_audio` 32, `chanora_bridge` 0, `chanora_core` 13, `chanora_diagnostics` 12, `chanora_protocol` 8 + 1 ignored, `chanora_state` 1, `chanora_storage` 12) | -| `cargo test -p chanora_audio --test linux_portal_smoke -- --ignored` | **1 passed / 0 failed**; log line `GlobalShortcuts portal reachable, version = 1`. Run with `DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus` + `XDG_SESSION_TYPE=wayland` + `XDG_CURRENT_DESKTOP=GNOME` exported. | -| `cargo test -p chanora_audio --test ptt_privacy` | **1 passed / 0 failed** — DEC-027 invariant holds. | - -The Linux host runs fewer tests than the Korean Win 11 host (which -reports 126 / 0 / 1) because the `#[cfg(target_os = "windows")]`- -gated PTT-backend dispatcher and full-chain tests in -`crates/chanora_audio/src/ptt_backends/windows.rs` and -`core/chanora_core/src/ptt.rs::windows_full_chain_tests` are -Windows-only by construction. The Linux equivalent — the GNOME -portal flow — is exercised by the `linux_portal_smoke` ignored -integration test and the inline unit tests in -`crates/chanora_audio/src/ptt_backends/linux.rs` (counted within -the `chanora_audio` 32 above). - - -## Sign-off form - -``` -chanora v1.0.0-rc.8 — Linux P0 acceptance -Host: Arch Linux GNOME Wayland (100.74.219.114) -Tester: ______________________ -Date: ______________________ -Build: apps/chanora_flutter/build/linux/x64/release/bundle/chanora_flutter @ ______________________ - libchanora_bridge.so @ ______________________ - -TC-1 Connect + identity persistence [ pass / fail ] notes: -TC-2 Voice channel join [ pass / fail ] notes: -TC-3 PTT press / release (GNOME-Wayland) [ pass / fail ] notes: -TC-4 Release tail [ pass / fail ] notes: -TC-5 Continuous mode [ pass / fail ] notes: -TC-6 Mic mute [ pass / fail ] notes: -TC-7 Speaker mute [ pass / fail ] notes: -TC-8 Binding persistence across restart [ pass / fail ] notes: -TC-9 Binding before voice-join [ pass / fail ] notes: -TC-10 No-permission channel rejection [ pass / fail ] notes: -TC-11 Reconnect [ pass / fail ] notes: -TC-12 Diagnostic export + privacy [ pass / fail ] notes: -TC-13 PTT bind dialog labels [ pass / fail ] notes: -TC-14 Capability badge gating [ pass / fail ] notes: -TC-15 Indicator label [ pass / fail ] notes: - -Overall result: [ Linux rc.8 PASS / Linux rc.8 FAIL ] -Sign: ______________________ -``` - - -## Known gaps (not blockers) - -- **X11, sway, KDE, other Wayland compositors**: officially out of - scope for v1.0.0-rc.8 per DEC-025. The desktop PTT layer falls - back to `FocusedPttBackend` (L0Focused capability) on these. - Voice + identity + connect paths still work. -- **Flutter build glue**: the Linux bundle currently requires - manually copying `libchanora_bridge.so` next to the runner or - into `bundle/lib/`. Auto-bundling is a P1 carryover. -- **VAD** (`TransmitMode::VoiceActivity`) is intentionally disabled - in P0 (DEC-030) on Linux as on Windows. -- **macOS / iOS / Android** P0 acceptance is NOT covered here. diff --git a/docs/verification/macos-p0-acceptance.md b/docs/verification/macos-p0-acceptance.md deleted file mode 100644 index 75b1fb8..0000000 --- a/docs/verification/macos-p0-acceptance.md +++ /dev/null @@ -1,222 +0,0 @@ -# macOS P0 acceptance — human-must test cases (v1.0.0-rc.8) - -This document captures the human-side verification pass for the -macOS P0 ship of Chanora. The officially-tested environment is -**Apple Silicon macOS 14+** (DEC-025). Intel macOS is best-effort — -the same build runs but is not signed-off for this release. - -Automated tests (`cargo check`, `cargo test --workspace --lib`, -the live `IOHIDCheckAccess` permission query path) sign off the -mechanical side. This checklist signs off the user-experience -side. A failure on any row blocks promotion of the macOS build -from rc.8. - -Source: this checklist mirrors `linux-p0-acceptance.md` and -`windows-p0-acceptance.md`. The auto-test sign-off lives in this -document's "Auto-test sign-off" section. SDD references: SDD-081 -(trait), SDD-085 (macOS CGEventTap backend), SDD-094..097 (v1 -audio + PTT lifecycle), DEC-025 (target environment), DEC-027 -(diagnostic privacy invariant), SRS-197 (iOS/macOS audio routing -contract), SRS-198 (honest capability advertising under runtime -permission state). - - -## 0. Pre-flight - -| # | Step | Expected | -|---|---|---| -| 0.1 | Build host: M1 / M2 / M3 Mac running macOS 14 or later. From a graphical login (NOT SSH alone) open Terminal and confirm: `sw_vers -productVersion` is `14.x` or higher; `uname -m` is `arm64`. | Apple Silicon macOS confirmed. | -| 0.2 | Wipe stale install: `rm -rf "~/Library/Application Support/app.chanora.chanoraFlutter" ~/Library/Logs/app.chanora.chanora_flutter ~/Library/Containers/com.example.chanoraFlutter`. (App-Sandbox-aware container path; macOS quietly relocates `Application Support` under `Containers//Data/` when the app is sandboxed.) | First-launch from clean state. | -| 0.3 | Build the bridge: `cd ~/chanora && cargo build --release -p chanora_bridge`. | `target/release/libchanora_bridge.dylib` ≈ 15 MB. | -| 0.4 | Build the Flutter app: `cd apps/chanora_flutter && flutter build macos --release`. | `build/macos/Build/Products/Release/chanora_flutter.app` exists, ≈ 60 MB. | -| 0.5 | Wrap + sign: `cd ~/chanora && tools/macos-postbuild.sh Release`. | Last line reads `[postbuild] OK: …chanora_flutter.app is launchable`. The `chanora_bridge.framework` is now inside `Contents/Frameworks/`. | -| 0.6 | Launch from a graphical session: `open ~/chanora/apps/chanora_flutter/build/macos/Build/Products/Release/chanora_flutter.app`. The first launch will pop a Gatekeeper warning because the app is ad-hoc signed. Click "Open Anyway" in System Settings → Privacy & Security if prompted. | Window opens; no crash. | -| 0.7 | About / version label | Shows **`v1.0.0-rc.8`**. | -| 0.8 | Open `~/Library/Logs/app.chanora.chanora_flutter/chanora.log` | Contains `bridge initialised`, `log file path …`, `identity store initialised`, `bookmark store initialised`. File < 1 MB. The PTT controller line should read `backend_id="event-tap"` and capability `L0Focused` (because Input Monitoring has not been granted yet). | - - -## TC-1: Connect + identity persistence (DEC-006, SRS-201) - -| # | Step | Expected | -|---|---|---| -| 1.1 | Enter a reachable TS3 server address, a nickname, blank password | "Connect" button enabled | -| 1.2 | Click Connect | Server snapshot appears: channel tree on left, client list visible | -| 1.3 | Note the connected server name + channel tree | Tree is sorted (parents above children); depth indent visible up to 6 levels | -| 1.4 | Disconnect, reconnect with the same nickname | Server-visible UID is the same as previous session (identity persisted via `Application Support/.../identity.tskey`) | -| 1.5 | Disconnect | Returns to connect form, no error | - - -## TC-2: Voice channel join (SRS-204, SDD-094) - -| # | Step | Expected | -|---|---|---| -| 2.1 | After connecting, observe the UI | **No "Start audio" button anywhere.** Voice Bar visible at the bottom. | -| 2.2 | Double-click a voice channel | First time only: macOS shows a system prompt requesting microphone access; click **Allow**. Subsequent joins do not re-prompt. Client moves into the channel; voice bar shows the channel name. | -| 2.3 | Double-click a different voice channel | Client moves; no audio glitch; the second `voice_join` is logged cleanly with no panic. | -| 2.4 | Double-click the same channel again quickly (concurrency) | Either: no-op move, or single clean move; no duplicate audio engine spawn. | - - -## TC-3: PTT press / release (SDD-083, SDD-085, SDD-096) — Input Monitoring granted - -| # | Step | Expected | -|---|---|---| -| 3.1 | Open Voice settings (gear icon), select **Push to talk** | Bind-key row + Release-tail slider become visible. | -| 3.2 | Click "Bind key" → press a key (e.g. Right Option) | Flutter captures the key label. macOS may show a system prompt requesting **Input Monitoring** access. Open System Settings → Privacy & Security → Input Monitoring, toggle Chanora ON. | -| 3.3 | Return to Chanora; within ~1.5 s the capability badge transitions from `L0Focused` to `L2 GlobalHoldToTalk` (or `L3` for a mouse side-button). | The transition fires WITHOUT restarting Chanora — the macOS `permission re-query worker` polls every 1.5 s and re-publishes the descriptor. | -| 3.4 | With another window focused, hold the bound key | Mic indicator turns "Mic on"; `transmit_active` true in stats. | -| 3.5 | Release the key | After the configured release-tail, indicator returns to "Mic off". | -| 3.6 | Switch focus several times while pressing the key | PTT still fires from another window — confirms the CGEventTap is reading session-global events. | - - -## TC-4: Release tail (SDD-097) - -| # | Step | Expected | -|---|---|---| -| 4.1 | Set release-tail to 0 ms in Voice settings | Slider updates immediately. | -| 4.2 | Tap PTT key briefly | Mic on/off transition is sharp (no tail). | -| 4.3 | Set release-tail to 500 ms | Slider updates immediately. | -| 4.4 | Tap PTT key briefly | Mic stays "on" for ~500 ms after release before flipping to off. | - - -## TC-5: Continuous mode (SDD-094) - -| # | Step | Expected | -|---|---|---| -| 5.1 | Switch transmit mode to **Continuous** | Bind-key + release-tail rows disappear; capability badge greys out. | -| 5.2 | Talk into mic | "Mic on" stays solid; no self-disable bug. | -| 5.3 | Switch back to PTT | Previously bound key still works without re-binding (binding persisted in `audio_meta.json`). | - - -## TC-6: Mic mute (SDD-097) - -| # | Step | Expected | -|---|---|---| -| 6.1 | Press mic-mute toggle in Voice Bar | Mic icon shows muted state; selector hard-mute engaged. | -| 6.2 | Press PTT (still muted) | No "Sending audio while muted" spam in log. Mic indicator does not flip on. | -| 6.3 | Un-mute | PTT resumes working normally. | - - -## TC-7: Speaker mute - -| # | Step | Expected | -|---|---|---| -| 7.1 | Press speaker-mute toggle | Other clients in channel are silenced locally; server still sees you in channel. | - - -## TC-8: Binding persistence across restart - -| # | Step | Expected | -|---|---|---| -| 8.1 | With a working PTT binding, quit Chanora | `audio_meta.json` next to `identity.tskey` shows the `ptt_*` fields populated. | -| 8.2 | Relaunch | Binding restored without re-running the bind flow. Hold key — mic flips on. | - - -## TC-9: Binding before voice-join - -| # | Step | Expected | -|---|---|---| -| 9.1 | Connect to server, do **not** join a voice channel yet. Open Voice settings, bind a PTT key. | Binding succeeds. | -| 9.2 | Now double-click a voice channel | Voice engine starts with the existing binding active immediately. | - - -## TC-10: No-permission channel rejection (typed `ServerRejected` propagation) - -| # | Step | Expected | -|---|---|---| -| 10.1 | Try to join a channel you lack permissions on | Red SnackBar with a human message derived from the TS3 error code (e.g. `permissions_client_insufficient` → "You do not have permission to join this channel."). Move does not silently fail. | - - -## TC-11: Reconnect - -| # | Step | Expected | -|---|---|---| -| 11.1 | Toggle Wi-Fi off for 10 s, then reconnect | UI shows red "Connection lost" banner, then recovers. Transient `Operation timed out` blips are logged but **not** shown as a banner. | - - -## TC-12: Diagnostic export + privacy (DEC-027, SAD-077, SDD-090) - -| # | Step | Expected | -|---|---|---| -| 12.1 | Open Diagnostics, export a bundle | Bundle contains tracing records with allow-listed fields only: `backend_id`, `bound_input_class`, `capability_level`, `host_id`, `timeout_secs`, `error`, `event`, `message`, `target`, `level`. **No raw key codes, no bound key labels, no mouse-button numbers, no IOHIDAccessType raw values.** | -| 12.2 | Grep the bundle for the human-readable PTT key label | No hit. | - - -## TC-13: PTT bind dialog labels - -| # | Step | Expected | -|---|---|---| -| 13.1 | Open Voice settings; the Bind-key row displays the Flutter-supplied label (e.g. "Space", "F10"). | The translated string never appears in `chanora.log`. | - - -## TC-14: Capability badge gating - -| # | Step | Expected | -|---|---|---| -| 14.1 | Revoke Input Monitoring in System Settings while Chanora is running. Within ~1.5 s the badge downgrades from `L2 GlobalHoldToTalk` to `L0Focused`. The Bind-key UI hides if it would be unusable; PTT then only works when Chanora is the foreground window. | The transition is logged: `macos ptt: permission state transition from=Granted to=Denied`. | -| 14.2 | Re-grant; within ~1.5 s the badge upgrades back to L2. | Same transition log line reversed. | - - -## TC-15: Indicator label - -| # | Step | Expected | -|---|---|---| -| 15.1 | In any mode, look at the stats line | Reads "Mic on" / "Mic off" (mode-neutral); **not** "PTT on" / "PTT off". | - - -## Auto-test sign-off - -These rows do not require human interaction. - -| Layer | Result on Apple Silicon macOS (M1 host) | -|---|---| -| `cargo check --workspace` | clean | -| `cargo test --workspace --lib` | 74 baseline + 6 new macOS keymap/state tests = **80 / 0 / 1** target; currently `chanora_audio` reports 34 / 0 / 0 on macOS (Linux had 32) | -| `cargo build --release -p chanora_bridge` | clean — produces `libchanora_bridge.dylib` ≈ 15 MB | -| `flutter build macos --release` | clean — produces `chanora_flutter.app` ≈ 60 MB | -| `tools/macos-postbuild.sh Release` | exit 0; framework-wrap + install_name_tool + ad-hoc codesign succeed | -| `chanora_flutter.app` headless launch | bridge / identity / bookmark store all initialise; `~/Library/Logs/app.chanora.chanora_flutter/chanora.log` captures clean boot | -| Live `IOHIDCheckAccess(kIOHIDRequestTypeListenEvent)` | returns `Unknown` (2) on a fresh-install box — expected; transitions to Granted/Denied after the user responds to the system prompt | - -The macOS host runs 6 more `chanora_audio` tests than Linux because of the macOS-only PTT keymap + descriptor builder + RunLoopHandle Send-bound tests. Linux runs 4 portal-specific tests that macOS skips. Net cross-platform delta: `+2` macOS. - - -## Sign-off form - -``` -chanora v1.0.0-rc.8 — macOS P0 acceptance -Host: Apple Silicon macOS (M1/M2/M3) -Tester: ______________________ -Date: ______________________ -Build: apps/chanora_flutter/build/macos/Build/Products/Release/chanora_flutter.app - @ ______________________ - chanora_bridge.framework/chanora_bridge inside Contents/Frameworks/ - @ ______________________ - -TC-1 Connect + identity persistence [ pass / fail ] notes: -TC-2 Voice channel join [ pass / fail ] notes: -TC-3 PTT press / release (Input Monitor) [ pass / fail ] notes: -TC-4 Release tail [ pass / fail ] notes: -TC-5 Continuous mode [ pass / fail ] notes: -TC-6 Mic mute [ pass / fail ] notes: -TC-7 Speaker mute [ pass / fail ] notes: -TC-8 Binding persistence across restart [ pass / fail ] notes: -TC-9 Binding before voice-join [ pass / fail ] notes: -TC-10 No-permission channel rejection [ pass / fail ] notes: -TC-11 Reconnect [ pass / fail ] notes: -TC-12 Diagnostic export + privacy [ pass / fail ] notes: -TC-13 PTT bind dialog labels [ pass / fail ] notes: -TC-14 Capability badge gating [ pass / fail ] notes: -TC-15 Indicator label [ pass / fail ] notes: - -Overall result: [ macOS rc.8 PASS / macOS rc.8 FAIL ] -Sign: ______________________ -``` - - -## Known gaps (not blockers) - -- **Intel macOS** (`x86_64-apple-darwin`): the same Rust build targets it cleanly but no acceptance pass; ship as best-effort. -- **macOS Gatekeeper + notarization**: ad-hoc-signed `chanora_flutter.app` requires the user to right-click → Open the first time (or approve in Privacy & Security). Developer ID + notarization for distribution is a P1 follow-up. -- **`tools/macos-postbuild.sh` is a separate manual step**: Xcode build-phase auto-integration (so a plain `flutter build macos --release` produces a launchable bundle) is a P1 carryover, same shape as the analogous Windows + Linux gaps. -- **VAD** (`TransmitMode::VoiceActivity`) is intentionally disabled in P0 (DEC-030) on macOS as on every platform. -- **iOS** P0 acceptance is NOT covered here; see `ios-p0-acceptance.md`. diff --git a/docs/verification/swe4-unit-verification-plan.md b/docs/verification/swe4-unit-verification-plan.md deleted file mode 100644 index ea7b42f..0000000 --- a/docs/verification/swe4-unit-verification-plan.md +++ /dev/null @@ -1,709 +0,0 @@ - -# Chanora SWE.4 Software Unit Verification Plan - -**Document type:** Software Unit Verification Plan -**Process alignment:** ASPICE SWE.4 Software Unit Verification -**Version:** 0.9.14 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Verification object:** Software units defined by SDD -**Direct source layer:** SDD only - -**Repo path:** `docs/verification/swe4-unit-verification-plan.md` --- - -## 1. Purpose - -This document defines the software unit verification strategy for Chanora. It verifies that software units implement the Software Detailed Design. - -This document is downstream of SDD and shall not bypass the document hierarchy. - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -> SWE.4 Unit Verification -``` - -Direct source rule: - -```text -SWE.4 unit verification items shall link directly to SDD only. -``` - -## 2. Verification Scope - -In scope: - -- Flutter unit tests -- Flutter widget-level unit verification where a widget is treated as a software unit -- Dart static analysis -- Dart code review -- Rust unit tests -- Rust static analysis -- Rust code review -- Unit-level regression verification -- Unit-level interface boundary tests -- Unit-level localization, Unicode, design-token, and diagnostics verification - -Out of scope: - -- Software integration verification across components; handled by SWE.5. -- Fully integrated software verification against SRS; handled by SWE.6. -- System integration verification against SysDes; handled by SYS.4. - -## 3. Unit Verification Strategy - -| Verification type | Applies to | Purpose | -|---|---|---| -| Static analysis | Dart, Rust | Detect structural, lint, safety, style, and maintainability issues | -| Code review | Dart, Rust, build scripts | Confirm design compliance and maintainability | -| Unit tests | Dart, Rust | Verify individual units against SDD behavior | -| Widget tests | Flutter widgets | Verify component rendering, semantics, and state behavior | -| Golden tests | Design-system components | Verify stable UI rendering where appropriate | -| Localization tests | Localization service and accessibility labels | Verify fallback, keys, and localized display strings | -| Unicode tests | Protocol/bridge/text-boundary units | Verify UTF-8 and multilingual content handling | -| Regression tests | Changed units | Confirm unchanged behavior remains valid after modifications | - -## 4. Entry Criteria - -| Criterion | Description | -|---|---| -| SDD baseline available | Unit design items and source SAD links are available. | -| Unit implementation available | The unit exists in source code or executable test double form. | -| Unit test environment available | Flutter and/or Rust test infrastructure is configured. | -| Verification measure defined | Test, review, or static analysis objective is defined. | -| Pass/fail criteria defined | Expected result is objective and reviewable. | - -## 5. Exit Criteria - -| Criterion | Description | -|---|---| -| Selected unit verification measures executed | Tests, reviews, and analyses required for the release scope are complete. | -| Results recorded | Verification results are stored in test reports or review records. | -| Nonconformances recorded | Failures are recorded for problem resolution. | -| Traceability complete | Each unit verification item traces to SDD and result evidence. | -| Regression scope complete | Changed units have selected regression measures executed. | - -## 6. Unit Verification Measures - -**SWE4-UV-001**: Verify `ChanoraApp` initialization order. - -- Source SDD: SDD-001, SDD-045 -- Verification method: Flutter unit/integration test -- Pass criteria: Theme, localization, platform services, routing, and adaptive shell initialize before feature rendering. -- Evidence: Test result - -**SWE4-UV-002**: Verify `ChanoraThemeFactory` Material 3 theme creation. - -- Source SDD: SDD-002, SDD-003 -- Verification method: Dart unit test -- Pass criteria: Light and dark Material 3 ThemeData objects are created with valid ColorScheme and TextTheme values. -- Evidence: Test result - -**SWE4-UV-003**: Verify `ChanoraSemanticColors` connection token behavior. - -- Source SDD: SDD-004, SDD-006 -- Verification method: Dart unit test -- Pass criteria: All connection semantic roles are present and do not require feature-screen hardcoding. -- Evidence: Test result - -**SWE4-UV-004**: Verify voice semantic token behavior. - -- Source SDD: SDD-005, SDD-006 -- Verification method: Dart unit test -- Pass criteria: Speaking, muted, deafened, and push-to-talk active states are available through semantic tokens. -- Evidence: Test result - -**SWE4-UV-005**: Verify feature widgets use theme accessors rather than hardcoded semantic values. - -- Source SDD: SDD-010 -- Verification method: Static inspection -- Pass criteria: Feature widgets do not construct product semantic token values directly. -- Evidence: Review record - -**SWE4-UV-006**: Verify adaptive shell window classification. - -- Source SDD: SDD-011, SDD-012 -- Verification method: Dart unit test -- Pass criteria: Compact, medium, and expanded classes are selected deterministically. -- Evidence: Test result - -**SWE4-UV-007**: Verify `CompactShell` layout behavior. - -- Source SDD: SDD-013 -- Verification method: Flutter widget test -- Pass criteria: Compact shell renders a single-column layout and mobile navigation entry points. -- Evidence: Test result - -**SWE4-UV-008**: Verify `MediumShell` layout behavior. - -- Source SDD: SDD-014 -- Verification method: Flutter widget test -- Pass criteria: Medium shell renders side navigation or navigation rail behavior. -- Evidence: Test result - -**SWE4-UV-009**: Verify `ExpandedShell` persistent pane behavior. - -- Source SDD: SDD-015 -- Verification method: Flutter widget test -- Pass criteria: Expanded shell renders persistent side pane and VoiceBar slot. -- Evidence: Test result - -**SWE4-UV-010**: Verify connection status presentation uses non-color-only cues. - -- Source SDD: SDD-016, SDD-022 -- Verification method: Dart unit test, widget test -- Pass criteria: The presenter exposes label, icon, semantic label, and severity token. -- Evidence: Test result - -**SWE4-UV-011**: Verify `ChanoraVoiceBar` exposed properties. - -- Source SDD: SDD-017, SDD-018 -- Verification method: Flutter widget test -- Pass criteria: Mute, deaf, push-to-talk, input meter, current channel, and latency properties render correctly. -- Evidence: Test result - -**SWE4-UV-012**: Verify `ChanoraChannelTree` data and interaction behavior. - -- Source SDD: SDD-019, SDD-020 -- Verification method: Flutter widget test -- Pass criteria: Channel hierarchy, selected state, expansion state, join intent, and context-menu intent operate as designed. -- Evidence: Test result - -**SWE4-UV-013**: Verify `ChanoraClientTile` state semantics. - -- Source SDD: SDD-021 -- Verification method: Widget test, accessibility test -- Pass criteria: Client status is available through text/icon/semantic cues and not color alone. -- Evidence: Test result - -**SWE4-UV-014**: Verify localized semantic labels for icon-only buttons. - -- Source SDD: SDD-024, SDD-031, SDD-032 -- Verification method: Accessibility test, localization unit test -- Pass criteria: Icon-only controls expose localized semantic labels with fallback. -- Evidence: Test result - -**SWE4-UV-015**: Verify keyboard focus traversal. - -- Source SDD: SDD-025 -- Verification method: Widget test -- Pass criteria: Primary interactive controls can be traversed in a logical order. -- Evidence: Test result - -**SWE4-UV-016**: Verify text-scale resilience of critical controls. - -- Source SDD: SDD-026 -- Verification method: Accessibility widget test -- Pass criteria: Critical controls remain reachable under increased text scale. -- Evidence: Test result - -**SWE4-UV-017**: Verify platform inset service unit behavior. - -- Source SDD: SDD-027, SDD-030 -- Verification method: Unit test with platform test doubles -- Pass criteria: Insets are normalized and exposed to the shell. -- Evidence: Test result - -**SWE4-UV-018**: Verify back intent service behavior. - -- Source SDD: SDD-028 -- Verification method: Unit test with platform test doubles -- Pass criteria: Platform back events map to expected route-level intents. -- Evidence: Test result - -**SWE4-UV-019**: Verify localization fallback. - -- Source SDD: SDD-031, SDD-032, SDD-033 -- Verification method: Unit test -- Pass criteria: Missing localized strings fall back deterministically. -- Evidence: Test result - -**SWE4-UV-020**: Verify server-content pass-through. - -- Source SDD: SDD-034 -- Verification method: Unit test -- Pass criteria: Server-provided content is not translated by product localization. -- Evidence: Test result - -**SWE4-UV-021**: Verify Unicode text boundary behavior. - -- Source SDD: SDD-035, SDD-036, SDD-037 -- Verification method: Unit test -- Pass criteria: Valid multilingual Unicode content is preserved; invalid external encodings are handled at boundaries. -- Evidence: Test result - -**SWE4-UV-022**: Verify diagnostic Unicode preservation and redaction behavior. - -- Source SDD: SDD-038, SDD-041, SDD-050, SDD-054 -- Verification method: Unit test, security review -- Pass criteria: Secrets are redacted while multilingual content is preserved. -- Evidence: Test result, review record - -**SWE4-UV-023**: Verify locale-aware formatting. - -- Source SDD: SDD-040 -- Verification method: Unit test -- Pass criteria: Dates, times, numbers, and timestamps format through localization utilities. -- Evidence: Test result - -**SWE4-UV-024**: Verify traceability checker behavior. - -- Source SDD: SDD-043, SDD-044, SDD-055, SDD-056, SDD-066, SDD-067 -- Verification method: Unit test / script test -- Pass criteria: Invalid direct-layer references are detected. -- Evidence: Test result - -**SWE4-UV-025**: Verify bridge DTO safety. - -- Source SDD: SDD-046 -- Verification method: Unit test, static inspection -- Pass criteria: Bridge DTOs do not expose internal Rust implementation types. -- Evidence: Test result, review record - -**SWE4-UV-026**: Verify Rust core event mapping. - -- Source SDD: SDD-047 -- Verification method: Rust unit test -- Pass criteria: Core events map deterministically to view model deltas. -- Evidence: Test result - -**SWE4-UV-027**: Verify voice view model separation from DSP. - -- Source SDD: SDD-048 -- Verification method: Code review, unit test -- Pass criteria: Voice UI receives status values and does not perform audio DSP. -- Evidence: Review record, test result - -**SWE4-UV-028**: Verify storage facade isolation. - -- Source SDD: SDD-049 -- Verification method: Static inspection, unit test -- Pass criteria: Feature widgets do not directly call database APIs. -- Evidence: Review record, test result - -**SWE4-UV-029**: Verify interface detail catalog completeness. - -- Source SDD: SDD-059, SDD-060 -- Verification method: Review -- Pass criteria: Unit-level interface entries include required details where applicable. -- Evidence: Review record - -**SWE4-UV-030**: Verify unit construction and review records. - -- Source SDD: SDD-064, SDD-065, SDD-068, SDD-069, SDD-070 -- Verification method: Review -- Pass criteria: Unit construction, review, verification handoff, and registry records exist for release scope units. -- Evidence: Review record - -## 7. Traceability Matrix - -| SDD Range | SWE.4 Coverage | -|---|---| -| SDD-001 through SDD-010 | SWE4-UV-001 through SWE4-UV-005 | -| SDD-011 through SDD-018 | SWE4-UV-006 through SWE4-UV-011 | -| SDD-019 through SDD-026 | SWE4-UV-012 through SWE4-UV-016 | -| SDD-027 through SDD-037 | SWE4-UV-017 through SWE4-UV-021 | -| SDD-038 through SDD-050 | SWE4-UV-022 through SWE4-UV-028 | -| SDD-051 through SDD-070 | SWE4-UV-029 through SWE4-UV-030 | - -## 8. Result Reporting - -Unit verification results shall be summarized in a unit verification summary report including: - -- verification scope -- selected verification measures -- skipped measures and rationale -- pass/fail result -- nonconformances -- regression scope -- residual risks -- release recommendation - -## 9. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial SWE.4 unit verification plan derived from SDD v0.3. | - ---- - -## 10. Platform Decision Unit Verification Addendum - -**SWE4-UV-031**: Verify iOS and Android build configuration units. - -- Source SDD: SDD-071, SDD-072, SDD-073 -- Verification method: Static inspection, platform test -- Pass criteria: iOS minimum runtime, Apple SDK gate, Android minimum runtime, and Android target SDK configuration are inspectable and match release policy. -- Evidence: Test result, release inspection - -**SWE4-UV-032**: Verify single active connection enforcement. - -- Source SDD: SDD-074 -- Verification method: Unit test -- Pass criteria: Attempting to create a second active MVP connection is rejected or routed through a controlled disconnect/switch policy. -- Evidence: Test result - -**SWE4-UV-033**: Verify audio processing defaults and backend selection. - -- Source SDD: SDD-075, SDD-076 -- Verification method: Unit test, audio test -- Pass criteria: AEC, AGC, Noise Suppression, and High-Pass Filter default to enabled where supported and stable; backend selector prefers platform-native processing. -- Evidence: Test result - -**SWE4-UV-034**: Verify local database, secret storage, bridge, and diagnostics privacy gate units. - -- Source SDD: SDD-077, SDD-078, SDD-079, SDD-080 -- Verification method: Unit test, security inspection -- Pass criteria: Non-secret storage, secret storage, typed bridge DTOs, and disabled automatic upload/crash behavior match detailed design. -- Evidence: Test result, security review - -**SWE4-UV-035**: Verify `DesktopPttBackend` trait + `PttCapabilityLevel` enum + `FocusedPttBackend` units. - -- Source SDD: SDD-081, SDD-082, SDD-087 -- Verification method: Unit test -- Pass criteria: Trait surface compiles for every implementation; enum `as_str()` mapping is unambiguous; `FocusedPttBackend` reports `L0Focused` and forwards `set_ptt` events into `AudioTransmitGate` unchanged. -- Evidence: Test result - -**SWE4-UV-036**: Verify Windows / macOS / Linux platform backend units in isolation. - -- Source SDD: SDD-083, SDD-084, SDD-085, SDD-086 -- Verification method: Unit test (with mocked OS surfaces), Platform Test (Windows / macOS / GNOME-Wayland reference hosts) -- Pass criteria: Each backend reports the expected `PttCapabilityLevel` for the current host configuration; the ladder falls through to `FocusedPttBackend` when its preferred OS API is unavailable. -- Evidence: Test result, platform-test trace - -**SWE4-UV-037**: Verify `PttController` + `AudioTransmitGate` units. - -- Source SDD: SDD-088, SDD-089 -- Verification method: Unit test -- Pass criteria: `PttController::set_binding` rebinds the active backend without dropping `AudioTransmitGate`; `AudioTransmitGate::subscribe()` returns a `watch::Receiver` that delivers every transition the gate observes. -- Evidence: Test result - -**SWE4-UV-038**: Verify `PttSanitizer` and `PttCapabilityBadge` units. - -- Source SDD: SDD-090, SDD-091 -- Verification method: Unit test, UI review -- Pass criteria: `PttSanitizer` drops records whose field names match the banned list (`key_code`, `scan_code`, `virtual_key`, `vk`, `keysym`, `keysym_string`, `key_sequence`); `PttCapabilityBadge` renders the correct label and explanation sheet for each `PttCapabilityLevel`. -- Evidence: Test result, UI screenshot - -**SWE4-UV-039**: Verify `MissedKeyUpWatchdog` unit. - -- Source SDD: SDD-092 -- Verification method: Unit test (tokio time-paused) -- Pass criteria: After a simulated `false -> true -> (timeout elapsed)` sequence the watchdog calls `AudioTransmitGate::set(false)` exactly once and emits a sanitised diagnostic record naming only `capability_level` and `backend_id`. -- Evidence: Test result - -| SDD Range | SWE.4 Coverage | -|---|---| -| SDD-071 through SDD-080 | SWE4-UV-031 through SWE4-UV-034 | -| SDD-081 through SDD-092 | SWE4-UV-035 through SWE4-UV-039 | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT unit-verification items SWE4-UV-035 through SWE4-UV-039: `DesktopPttBackend` trait + `PttCapabilityLevel`, platform backends, `PttController` + `AudioTransmitGate`, `PttSanitizer` + `PttCapabilityBadge`, `MissedKeyUpWatchdog`. | - - -## 11. Android P0 Unit Verification Addendum - -**SWE4-UV-040**: Verify Android build configuration unit (`SDD-073` expanded). - -- Source SDD: SDD-073 -- Verification method: Gradle task assertion + static inspection of `android/app/build.gradle.kts` -- Pass criteria: `minSdk` literal equals `28` (DEC-004); `ndk.abiFilters` set equals `{arm64-v8a, armeabi-v7a, x86_64}` (per SDD-073 item 4 and SDD-118 item 3, `x86` 32-bit is explicitly out of scope and shall not be in the set); release `signingConfig` references the CI signing key reference (not debug); R8/ProGuard `minifyEnabled = true` on release; `bundle { abi.enableSplit = true }`; assemble target produces an AAB artifact at `app/build/outputs/bundle/release/app-release.aab`. -- Evidence: Gradle log + manifest dump - -**SWE4-UV-041**: Verify `AndroidPermissionRequester` state machine (`SDD-106`). - -- Source SDD: SDD-106 -- Source SRS: SRS-209 -- Verification method: Dart/Kotlin unit test with a permission-platform test double -- Pass criteria: State transitions are exhaustive for `{granted, denied, permanently_denied, revoked_mid_session}`; transitioning out of `granted` clamps `AudioTransmitGate::set(false)`; re-entering `granted` does NOT auto-transmit (requires explicit user gesture); permanently-denied surfaces a settings-deep-link intent rather than re-prompting. -- Evidence: Test result - -**SWE4-UV-042**: Verify `BackIntentService` Android branches (`SDD-028` expanded). - -- Source SDD: SDD-028 -- Source SRS: SRS-163 -- Verification method: Dart unit test with platform-channel test double for both `OnBackInvokedCallback` (API 33+) and `OnBackPressedDispatcher` (API ≤ 32) paths. -- Pass criteria: Modal-first rule — if a modal is open, back closes the modal and does not pop the route. PTT-active-ignore — while `transmit_active == true` the back event is consumed without effect. Route-pop ordering — otherwise the topmost non-modal route pops. The API 33+ branch registers a `OnBackInvokedCallback` at `PRIORITY_DEFAULT`; the pre-33 branch registers an `OnBackPressedCallback`. Switching API level in the test double switches the active branch deterministically. -- Evidence: Test result - -**SWE4-UV-043**: Verify `AndroidJniBootstrap` library load and init ordering (`SDD-105`). - -- Source SDD: SDD-105 -- Verification method: Instrumented unit test on Android (or Robolectric where applicable) -- Pass criteria: `System.loadLibrary("chanora_bridge")` is invoked from the `Application` subclass `onCreate` (not from an Activity); `JNI_OnLoad` runs exactly once per process and captures the `JavaVM*`; bridge init occurs before any FFI call from Dart; double-init is a no-op. -- Evidence: Test result + logcat trace - -**SWE4-UV-044**: Verify `AndroidVoiceForegroundService` lifecycle unit (`SDD-107`). - -- Source SDD: SDD-107 -- Source SRS: SRS-111 -- Verification method: Kotlin unit test + Robolectric `ServiceController` -- Pass criteria: `startForeground` is called within 5 s of `onStartCommand` (API 26+ requirement); notification channel exists with `IMPORTANCE_LOW`; `foregroundServiceType` includes `microphone` on API 30+; service stops cleanly on disconnect intent and does not leak its wakelock; restart policy is `START_NOT_STICKY` (no auto-respawn after force-stop). -- Evidence: Test result - -**SWE4-UV-045**: Verify `AndroidAudioModeController` snapshot/restore + refcount (`SDD-108`). - -- Source SDD: SDD-108 -- Source SRS: SRS-208 -- Source SysRS: SysRS-305 -- Verification method: Kotlin unit test with `AudioManager` test double -- Pass criteria: First acquire snapshots prior `AudioManager.getMode()` and sets `MODE_IN_COMMUNICATION`; nested acquires increment refcount without re-snapshotting; matched release decrements; final release restores the snapshotted prior mode exactly once; when `AudioManager` is unavailable (e.g. injected null), controller logs a sanitized warning and degrades to no-op without throwing. -- Evidence: Test result - -**SWE4-UV-046**: Verify `AndroidPttCapability` reports `L0Focused` and pins `FocusedPttBackend` (`SDD-110`). - -- Source SDD: SDD-110 -- Verification method: Rust + Dart unit test -- Pass criteria: On `target_os = "android"` the `DesktopPttBackend` factory returns `FocusedPttBackend` unconditionally (no ladder evaluation); `PttCapabilityBadge` renders the localized `L0Focused` label with the Android-specific explanation string; no Android branch attempts to bind global hotkeys. -- Evidence: Test result + UI screenshot - -| SDD Range | SWE.4 Coverage | -|---|---| -| SDD-028 (expanded) | SWE4-UV-042 | -| SDD-073 (refreshed) | SWE4-UV-040 | -| SDD-105 | SWE4-UV-043 | -| SDD-106 | SWE4-UV-041 | -| SDD-107 | SWE4-UV-044 | -| SDD-108 | SWE4-UV-045 | -| SDD-110 | SWE4-UV-046 | - - -### Android voice audio backend unit-verification items (SDD-111..SDD-116 wave) - -**SWE4-UV-047**: Verify `AndroidVoiceStreamConfig` builder records requested vs. achieved fields. - -- Source SDD: SDD-112 (config struct), SDD-111 (trait surface) -- Source SRS: SRS-210, SRS-211, SRS-213, SRS-214 -- Source SAD: SAD-077, SAD-081 -- Verification method: Rust unit test with a fake Oboe builder return path (no device) -- Pass criteria: Given a `MobileVoiceStreamConfig` requesting `PERFORMANCE_MODE_LOW_LATENCY`, input preset `VoiceCommunication`, output usage `VoiceCommunication`, content type `Speech`, and sharing mode `Exclusive`, the resulting `AndroidVoiceStreamConfig` records the requested values verbatim AND exposes `achieved_*` accessors populated from the fake builder's grant values. Mismatch between requested and achieved is observable via the accessors with no panics. Both input and output stream configs are independently recorded. -- Evidence: Rust unit test result -- SDD-116 matrix row satisfied: none directly (unit-level; matrix consumes the accessors per-device) - -**SWE4-UV-048**: Verify input preset fallback ladder is observable at each step. - -- Source SDD: SDD-111 (trait surface, open() error pathway), SDD-112 (preset field) -- Source SRS: SRS-211 -- Source SAD: SAD-077 -- Verification method: Rust unit test with a scripted Oboe builder mock that returns `ErrorIllegalArgument` for successive presets -- Pass criteria: With the mock denying `VoiceCommunication`, `open()` retries with `VoicePerformance`; with the mock denying both, `open()` retries with `Generic` (`Unprocessed`/default). Each retry is recorded in a structured field (e.g. `attempted_presets: Vec`) and the final `achieved_input_preset()` returns the preset that was granted. If all presets fail, `open()` returns `BackendError::InputPresetUnavailable` (or the SDD-111 equivalent). No silent fallback. -- Evidence: Rust unit test result -- SDD-116 matrix row satisfied: none directly (matrix records `achieved_input_preset` per device) - -**SWE4-UV-049**: Verify sharing-mode fallback Exclusive→Shared is observable. - -- Source SDD: SDD-111, SDD-112 (sharing mode field) -- Source SRS: SRS-214 -- Source SAD: SAD-077 -- Verification method: Rust unit test with a fake Oboe builder return path -- Pass criteria: When the fake builder accepts `SharingMode::Exclusive`, `achieved_sharing_mode()` returns `Exclusive` and no retry occurs. When the fake builder rejects `Exclusive` (returns the documented Oboe error path for exclusive denial), the unit retries with `Shared`, and `achieved_sharing_mode()` returns `Shared`. The original request (`Exclusive`) is still recorded for diagnostics. -- Evidence: Rust unit test result -- SDD-116 matrix row satisfied: none directly (matrix records `achieved_sharing_mode` per device) - -**SWE4-UV-050**: Verify hardware effects per-effect success/failure logic with software-AEC fallback. - -- Source SDD: SDD-113 (per-effect construction + software fallback signal) -- Source SRS: SRS-212 -- Source SAD: SAD-077, SAD-081 -- Verification method: Rust unit test with a mocked JNI surface (`new_object`-style indirection) representing `AcousticEchoCanceler.create`, `NoiseSuppressor.create`, `AutomaticGainControl.create` -- Pass criteria: For each of AEC, NS, AGC: (a) success path — mock returns a non-null `GlobalRef`, effect is recorded as engaged, `setEnabled(true)` is invoked once; (b) failure path — mock returns null OR throws, the unit records the per-effect failure, does NOT abort the other two, and signals the engine to engage the software equivalent (per SDD-113 item 5 — for AEC failure the engine's software AEC must be flagged on). Order of effect construction does not affect outcome (no cross-effect coupling). `release()` is called on every engaged `GlobalRef` exactly once when the unit is torn down. -- Evidence: Rust unit test result -- SDD-116 matrix row satisfied: per-device AEC/NS/AGC availability column - -**SWE4-UV-051**: Verify performance-mode achieved recording feeds SRS-210 latency tier classification. - -- Source SDD: SDD-111 (`achieved_performance_mode`), SDD-112 (mode field) -- Source SRS: SRS-210 -- Source SAD: SAD-077 -- Verification method: Rust unit test -- Pass criteria: When the fake builder grants `PERFORMANCE_MODE_LOW_LATENCY`, `achieved_performance_mode()` returns `LowLatency` and the SRS-210 tier classifier (the unit-level pure function that maps achieved mode → latency target) returns the 150 ms tier. When the fake builder grants `PERFORMANCE_MODE_NONE` or `POWER_SAVING`, the classifier returns the 250 ms tier. The classifier is a pure function reachable from the engine without a device. -- Evidence: Rust unit test result -- SDD-116 matrix row satisfied: per-device `achieved_performance_mode` column - -**SWE4-UV-052**: Verify output stream usage and content type are set correctly. - -- Source SDD: SDD-112 (output config fields) -- Source SRS: SRS-213 -- Source SAD: SAD-077 -- Verification method: Rust unit test inspecting the builder calls captured by a mock Oboe builder -- Pass criteria: The output stream-construction path invokes `setUsage(VoiceCommunication)` and `setContentType(Speech)` exactly once on the builder before `openStream`. No other usage / content-type combination is reachable from the production path (the test asserts there is no code path that constructs the output stream with `Media` / `Music` defaults). `achieved_output_usage()` returns `VoiceCommunication` and `achieved_output_content_type()` returns `Speech` on a successful open. -- Evidence: Rust unit test result -- SDD-116 matrix row satisfied: per-device `achieved_output_usage` / `achieved_output_content_type` column - -| SDD Range | SWE.4 Coverage | -|---|---| -| SDD-111 | SWE4-UV-047, SWE4-UV-048, SWE4-UV-049, SWE4-UV-051 | -| SDD-112 | SWE4-UV-047, SWE4-UV-048, SWE4-UV-049, SWE4-UV-051, SWE4-UV-052 | -| SDD-113 | SWE4-UV-050 | -| SDD-115 | (lifecycle sequencing — see SWE.5 integration items) | -| SDD-116 | (device matrix — see SWE.6 + android-p0-acceptance TC-14..TC-18) | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-18 | Added Android P0 unit-verification items SWE4-UV-040 through SWE4-UV-046 covering SDD-028 (expanded back-intent branches), SDD-073 (refreshed build config + AAB), SDD-105 (JNI bootstrap), SDD-106 (permission state machine + transmit clamp), SDD-107 (foreground service lifecycle), SDD-108 (audio mode controller refcount + restore), SDD-110 (PTT capability pin). | -| 0.9.5 | 2026-05-18 | Added Android voice audio backend unit-verification items SWE4-UV-047 through SWE4-UV-052 covering SDD-111 (trait surface), SDD-112 (config requested vs achieved), SDD-113 (per-effect hardware engagement + software fallback) and feeding SRS-210/211/213/214 unit-level classification. | -| 0.9.14 | 2026-05-18 | Wave 3 reviewer follow-up: allocated real SWE.4 IDs for two test sets that had been cited under provisional `SWE4-UV-NNN` placeholders. SWE4-UV-053..055 anchor the three `TransmitModeSelector` permission-state clamp tests in `crates/chanora_audio/src/transmit_selector.rs` (commit 635d160 was cited under the "SWE4-UV-026 family" without real anchors). SWE4-UV-056..057 anchor the two missing `DiagnosticExport::with_android_audio` rendering tests in `crates/chanora_diagnostics/src/lib.rs` (commit aea50a1 introduced the field/builder/`to_text` branch but the unit-test pair was queued for the commit-8 amend). Closes the Wave 3 traceability gap; downstream test cites in commits 4 and 8 are amended to reference these IDs. | -| 0.9.15 | 2026-05-18 | Closed SDD-120 §11 verification-engineer follow-up: allocated SWE4-UV-058 through SWE4-UV-062 anchoring the five realtime-audio bench functions landed in commit 3a7750a (`bench_capture_alloc_count` and `bench_capture_callback_wall_clock` in `crates/chanora_audio/benches/realtime_capture.rs`; `bench_opus_encode_latency` and `bench_opus_decode_latency` in `crates/chanora_audio/benches/opus_codec.rs`; `bench_resampler_throughput` in `crates/chanora_audio/benches/resampler.rs`) and feeding the SRS-216 metric families under the SRS-219 per-metric tolerance windows. Status PENDING_BASELINE: pass/fail evaluation cannot proceed until the first `bench-baseline-update.yml` `workflow_dispatch` invocation lands the SAD-089 baseline JSON; once landed, the SDD-120 §6 `bench-advisory.yml` workflow plus `examples/compare_baseline` perform automated 🔴/🟡/🟢 evaluation against the merge-base baseline snapshot. Strict-layered sourcing preserved (`SWE.4 -> SDD/SRS` only); no SDD, SRS, SAD, SysDes, or SysRS edits performed. | - -## 12. Android Permission Clamp + Diagnostics Android-Audio Unit Verification Addendum (Wave 3 — v0.9.14) - -**Background.** Wave 3 reviewer audit flagged two newly-landed test groups whose source comments cited verification IDs as `SWE4-UV-NNN` placeholders rather than real allocated anchors: - -1. Three `TransmitModeSelector` permission-state tests at `crates/chanora_audio/src/transmit_selector.rs:343-435` (introduced by commit 635d160). The reviewer noted at `transmit_selector.rs:343` that these tests cite "SWE4-UV-026 family" without real IDs. -2. Two missing unit tests for the new `chanora_diagnostics` Android-audio surface (`android_audio: Option` field, `with_android_audio` builder, `[audio.android]` `to_text` branch) introduced by commit aea50a1; queued for the commit-8 amend. - -This addendum allocates the five required anchors. SWE4-UV-052 was the prior high-water mark; SWE4-UV-053..057 are the next free contiguous range. - -**SWE4-UV-053**: Verify `TransmitModeSelector` clamps transmit to `false` when `permission_state == Denied` (or `PermanentlyDenied`/`Unknown`) regardless of PTT, channel, or transmit-mode state. - -- Source SDD: SDD-106 §6 -- Source SRS: SRS-209 (fail-safe listen-only default) -- Verification method: Rust unit test -- Test code path: `crates/chanora_audio/src/transmit_selector.rs::tests::permission_state_denied_clamps_transmit_to_false` (lines 348-384) -- Pass criteria: With `TransmitMode::Ptt`, `in_channel = true`, `ptt_held = true` and the default `Granted` permission state the gate evaluates `true`. Publishing `PermissionGate::Denied` flips the gate to `false`. `PermanentlyDenied` and `Unknown` likewise clamp `false`. The clamp wins over `TransmitMode::Continuous`. -- Evidence: `cargo test -p chanora_audio` result -- Notes: Establishes the fail-safe semantics: cold-launch `Unknown` is listen-only per SRS-209. - -**SWE4-UV-054**: Verify `TransmitModeSelector` releases the permission clamp on transition back to `Granted` and resumes normal PTT-driven evaluation. - -- Source SDD: SDD-106 §6 -- Source SRS: SRS-209 -- Verification method: Rust unit test -- Test code path: `crates/chanora_audio/src/transmit_selector.rs::tests::permission_state_granted_releases_clamp` (lines 389-409) -- Pass criteria: After `Denied` clamps the gate to `false`, transitioning to `PermissionGate::Granted` (with PTT held + in channel) restores the gate to `true` on the next state tick. Releasing the PTT key then drops the gate per normal PTT semantics — the clamp is no longer in effect. -- Evidence: `cargo test -p chanora_audio` result -- Notes: Pairs with SWE4-UV-053; together they cover the clamp on/off edges. - -**SWE4-UV-055**: Verify `TransmitModeSelector` ignores `PermissionState` events for non-`RECORD_AUDIO` permissions (contract: bridge filters before reaching the selector). - -- Source SDD: SDD-106 §5 -- Verification method: Rust unit test (contract pin) -- Test code path: `crates/chanora_audio/src/transmit_selector.rs::tests::permission_state_for_other_permission_does_not_clamp` (lines 418-435) -- Pass criteria: The selector exposes no setter for non-`RECORD_AUDIO` permissions. With `TransmitMode::Continuous` + `in_channel = true` and no call to `set_permission_state`, the selector remains in its `Granted` default and the gate evaluates `true`. Demonstrates the contract that unrelated permission events (e.g. `POST_NOTIFICATIONS`) cannot reach this code path. -- Evidence: `cargo test -p chanora_audio` result -- Notes: This is a negative/contract test; the JNI bridge is responsible for filtering by permission name before invoking `set_permission_state`. - -**SWE4-UV-056**: Verify `DiagnosticExport::with_android_audio(Some(yaml))` renders the `[audio.android]` section between `[metadata]` and `[recent logs]` in `to_text()`. - -- Source SDD: SDD-116 item 3 (diagnostics matrix surface), SDD-112 item 10 / SDD-113 item 7 (producing crate) -- Verification method: Rust unit test -- Test code path: `crates/chanora_diagnostics/src/lib.rs::tests::android_audio_renders_between_metadata_and_logs` (to be added by commit-8 amend) -- Pass criteria: Building a `DiagnosticExport::from_sink(...)` and chaining `.with_android_audio(Some("perf: low_latency\n".into()))` produces a `to_text()` output where the substring `[audio.android]` appears (a) after the `[metadata]` header, (b) before the `[recent logs]` header, and (c) is immediately followed by the supplied YAML fragment verbatim. The YAML fragment is not re-redacted by the diagnostics bundle (SDD-090 places sanitisation in the producing crate). -- Evidence: `cargo test -p chanora_diagnostics` result -- Notes: Section ordering is part of the SDD-116 matrix contract; downstream tooling parses by header. - -**SWE4-UV-057**: Verify `DiagnosticExport` with default `android_audio = None` omits the `[audio.android]` header entirely (negative test). - -- Source SDD: SDD-116 item 3 (negative case — non-Android or pre-session) -- Verification method: Rust unit test -- Test code path: `crates/chanora_diagnostics/src/lib.rs::tests::android_audio_absent_omits_section` (to be added by commit-8 amend) -- Pass criteria: A `DiagnosticExport::from_sink(...)` constructed without `.with_android_audio(...)` (i.e. `android_audio == None`) produces a `to_text()` output that does **not** contain the substring `[audio.android]`. The `[metadata]` and `[recent logs]` sections remain present in order. Calling `.with_android_audio(None)` explicitly is equivalent (idempotent omission). -- Evidence: `cargo test -p chanora_diagnostics` result -- Notes: Pairs with SWE4-UV-056; together they cover the conditional-render branch in `DiagnosticExport::to_text`. - -| SDD Range | SWE.4 Coverage | -|---|---| -| SDD-106 §5 | SWE4-UV-055 | -| SDD-106 §6 | SWE4-UV-053, SWE4-UV-054 | -| SDD-116 item 3 | SWE4-UV-056, SWE4-UV-057 | - -## 13. Realtime-Audio Benchmark-Harness Unit Verification Addendum (SDD-120 §11 closure — v0.9.15) - -**Background.** SDD-120 (`RealtimeAudioBenchmarkHarnessAndAdvisoryCI`, v0.9.16) §11 explicitly defers the SWE.4 allocation for the five bench functions it specifies in §3, noting: "Suggested SWE.4 forward allocation: SWE4-UV-058 through SWE4-UV-062 (verification-engineer follow-up; not authored by this SDD unit)." Commit 3a7750a landed the implementation across three bench files plus two `examples/` post-processor binaries. This addendum closes the §11 follow-up by authoring the five anchors. SWE4-UV-057 was the prior high-water mark; SWE4-UV-058..062 are the next free contiguous range. - -**Status conventions.** All five items are marked **PENDING_BASELINE**: pass/fail evaluation requires a committed SAD-089 baseline JSON for the active host triple (`x86_64-unknown-linux-gnu`), which is produced only by the SDD-120 §7 `bench-baseline-update.yml` `workflow_dispatch` workflow. Until that workflow has been dispatched at least once and its PR merged, the SDD-120 §6 `bench-advisory.yml` short-circuits on missing baseline (per SRS-218 clause 4 always-success) and these verification items cannot return 🟢/🟡/🔴. Automated comparison thereafter is performed by `crates/chanora_audio/examples/compare_baseline.rs` (invoked via `cargo run --example compare_baseline`) against the merge-base baseline per SRS-219. - -**SWE4-UV-058**: Verify the realtime capture path performs zero heap allocations per callback after the warmup window. - -- Source SDD: SDD-120 §3 (bench function `bench_capture_alloc_count` with 100-callback warmup before the dhat measurement window); SDD-120 §8 (zero-tolerance metric collapses to 🔴/🟢 only — no 🟡 band). -- Source SRS: SRS-216 metric 1 (heap allocation count per realtime callback after warmup); SRS-219 clause a (zero tolerance — "any non-zero allocation count on a PR is flagged 🔴"). -- Verification method: Criterion bench with dhat global allocator. Invocation: `cargo bench --bench realtime_capture -- bench_capture_alloc_count`. -- Test code path: `crates/chanora_audio/benches/realtime_capture.rs::bench_capture_alloc_count` (line 27). -- Pass criteria: After a 100-call `CaptureState::ingest` pre-warm (per SDD-120 §3), the dhat `HeapStats.total_blocks` delta across the subsequent 1000 `CaptureState::ingest` calls **SHALL equal zero**. Any non-zero count is a 🔴 regression per SRS-219 clause a (zero tolerance). -- Acceptance evidence: dhat global-allocator `HeapStats.total_blocks` delta == 0 captured by the bench; criterion `estimates.json` projected into the SRS-217 baseline schema by `examples/emit_baseline`; advisory marker rendered by `examples/compare_baseline` against the merge-base baseline. -- Cross-trace: SAD-088 (benchmark-instrumentation seam), SDD-094 (audio-engine lifecycle as the bench-seam container). -- Status: **PENDING_BASELINE** (zero-tolerance metric — first baseline run establishes the binary 🟢/🔴 evaluation; subsequent runs gate on any non-zero allocation regardless of baseline value). - -**SWE4-UV-059**: Verify the realtime capture callback wall-clock stays within the SRS-219 p95 tolerance. - -- Source SDD: SDD-120 §3 (bench function `bench_capture_callback_wall_clock` with criterion default warmup; measurement reports p50/p95/p99 as a fraction of the cpal stream period). -- Source SRS: SRS-216 metric 2 (per-callback wall-clock at p50/p95/p99 as a fraction of cpal stream period); SRS-219 clause b ("per-callback wall-clock duration at p95 — tolerance is +20% relative to the baseline (p50 and p99 are advisory data only and do not drive the 🔴 marker)"). -- Verification method: Criterion timing bench. Invocation: `cargo bench --bench realtime_capture -- bench_capture_callback_wall_clock`. -- Test code path: `crates/chanora_audio/benches/realtime_capture.rs::bench_capture_callback_wall_clock` (line 95). -- Pass criteria: p95 wall-clock per callback **SHALL stay within +20% of the baseline-at-merge-base** per SRS-219 clause b. p50 and p99 are reported but **advisory only** (no tolerance gate; cannot drive 🔴). Automated 🟢/🟡/🔴 evaluation by `examples/compare_baseline` per SDD-120 §8 (🔴 if `delta_pct > 20%`, 🟡 if `10% < delta_pct ≤ 20%`, 🟢 otherwise). -- Acceptance evidence: criterion p95 estimate from `target/criterion/.../estimates.json` projected through `examples/emit_baseline`; advisory marker rendered by `examples/compare_baseline`. -- Cross-trace: SAD-088, SDD-094. -- Status: **PENDING_BASELINE**. - -**SWE4-UV-060**: Verify Opus encode latency on a 960-sample / 20 ms frame stays within the SRS-219 mean tolerance. - -- Source SDD: SDD-120 §3 (bench function `bench_opus_encode_latency` exercising `audiopus::coder::Encoder::encode_float` **directly**, not through `tsclientlib::AudioHandler`, to isolate encode latency from higher-layer mix/jitter handling). -- Source SRS: SRS-216 metric 3 (Opus encode latency on 960-sample/20 ms frame); SRS-219 clause c ("Opus encode latency on a 960-sample / 20 ms frame — tolerance is +15% relative to the baseline on the mean"). -- Verification method: Criterion timing bench. Invocation: `cargo bench --bench opus_codec -- bench_opus_encode_latency`. -- Test code path: `crates/chanora_audio/benches/opus_codec.rs::bench_opus_encode_latency` (line 21). -- Pass criteria: `encoder.encode_float()` mean latency on a 960-sample (20 ms @ 48 kHz mono) deterministic-sine frame **SHALL stay within +15% of the baseline-at-merge-base** per SRS-219 clause c. Automated 🟢/🟡/🔴 evaluation by `examples/compare_baseline` per SDD-120 §8 (🔴 if `delta_pct > 15%`, 🟡 if `7.5% < delta_pct ≤ 15%`, 🟢 otherwise). -- Acceptance evidence: criterion mean estimate from `target/criterion/.../estimates.json` projected through `examples/emit_baseline`; advisory marker rendered by `examples/compare_baseline`. -- Cross-trace: SAD-088, SDD-094. -- Status: **PENDING_BASELINE**. - -**SWE4-UV-061**: Verify Opus decode latency on a 20 ms Opus frame stays within the SRS-219 mean tolerance. - -- Source SDD: SDD-120 §3 (bench function `bench_opus_decode_latency` exercising `audiopus::coder::Decoder::decode_float` **directly**, not `tsclientlib::AudioHandler::fill_buffer`; SDD-120 §3 pinned this explicitly because the `AudioHandler` path conflates Opus decode with jitter-buffer dequeue and PCM mix). -- Source SRS: SRS-216 metric 4 (Opus decode latency on 960-sample/20 ms frame); SRS-219 clause c ("Opus decode latency on a 960-sample / 20 ms frame — tolerance is +15% relative to the baseline on the mean"). -- Verification method: Criterion timing bench. Invocation: `cargo bench --bench opus_codec -- bench_opus_decode_latency`. -- Test code path: `crates/chanora_audio/benches/opus_codec.rs::bench_opus_decode_latency` (line 37). -- Pass criteria: `decoder.decode_float()` mean latency on a single 20 ms (960-sample @ 48 kHz mono) Opus-encoded frame **SHALL stay within +15% of the baseline-at-merge-base** per SRS-219 clause c. Automated 🟢/🟡/🔴 evaluation by `examples/compare_baseline` per SDD-120 §8 (🔴 if `delta_pct > 15%`, 🟡 if `7.5% < delta_pct ≤ 15%`, 🟢 otherwise). -- Acceptance evidence: criterion mean estimate from `target/criterion/.../estimates.json` projected through `examples/emit_baseline`; advisory marker rendered by `examples/compare_baseline`. -- Cross-trace: SAD-088, SDD-094. -- Status: **PENDING_BASELINE**. - -**SWE4-UV-062**: Verify resampler throughput on the three canonical rate pairs stays within the SRS-219 samples-per-second tolerance. - -- Source SDD: SDD-120 §3 (bench function `bench_resampler_throughput` structured as a criterion `BenchmarkGroup` with three sub-benches: 44.1 kHz → 48 kHz, 16 kHz → 48 kHz, and 48 kHz → 48 kHz passthrough). -- Source SRS: SRS-216 metric 5 (resampler throughput on canonical rate pairs); SRS-219 clause d ("resampler throughput on the canonical rate pairs — tolerance is −10% relative to the baseline on samples-per-second (i.e. a throughput drop greater than 10% is flagged 🔴)"). -- Verification method: Criterion throughput bench. Invocation: `cargo bench --bench resampler -- bench_resampler_throughput`. -- Test code path: `crates/chanora_audio/benches/resampler.rs::bench_resampler_throughput` (line 17). -- Pass criteria: Each of the three sub-benches (44.1→48, 16→48, 48→48-passthrough) samples-per-second throughput **SHALL stay no worse than −10% of the baseline-at-merge-base** per SRS-219 clause d. A throughput drop greater than 10% on any of the three sub-benches is a 🔴 regression. Automated 🟢/🟡/🔴 evaluation by `examples/compare_baseline` per SDD-120 §8 (🔴 if `delta_pct < −10%`, 🟡 if `−10% ≤ delta_pct < −5%`, 🟢 otherwise; note the sign inversion versus latency metrics — for throughput, a *decrease* is the regression direction). -- Acceptance evidence: criterion samples-per-second estimates from `target/criterion/.../estimates.json` for each of the three sub-benches projected through `examples/emit_baseline`; advisory marker rendered by `examples/compare_baseline`. -- Cross-trace: SAD-088, SDD-094. -- Status: **PENDING_BASELINE**. - -### 13.1 SDD-120 Coverage Index - -| SDD Range | SWE.4 Coverage | Tolerance Source | -|---|---|---| -| SDD-120 §3 (bench `bench_capture_alloc_count`) | SWE4-UV-058 | SRS-219 clause a (zero-tolerance) | -| SDD-120 §3 (bench `bench_capture_callback_wall_clock`) | SWE4-UV-059 | SRS-219 clause b (+20% p95) | -| SDD-120 §3 (bench `bench_opus_encode_latency`) | SWE4-UV-060 | SRS-219 clause c (+15% mean) | -| SDD-120 §3 (bench `bench_opus_decode_latency`) | SWE4-UV-061 | SRS-219 clause c (+15% mean) | -| SDD-120 §3 (bench `bench_resampler_throughput`) | SWE4-UV-062 | SRS-219 clause d (−10% samples/sec) | - -### 13.2 SWE4-UV-058..062 Status Index - -| SWE.4 ID | Bench function | Bench file | Tolerance | Status | -|---|---|---|---|---| -| SWE4-UV-058 | `bench_capture_alloc_count` | `crates/chanora_audio/benches/realtime_capture.rs` | zero | PENDING_BASELINE | -| SWE4-UV-059 | `bench_capture_callback_wall_clock` | `crates/chanora_audio/benches/realtime_capture.rs` | +20% p95 | PENDING_BASELINE | -| SWE4-UV-060 | `bench_opus_encode_latency` | `crates/chanora_audio/benches/opus_codec.rs` | +15% mean | PENDING_BASELINE | -| SWE4-UV-061 | `bench_opus_decode_latency` | `crates/chanora_audio/benches/opus_codec.rs` | +15% mean | PENDING_BASELINE | -| SWE4-UV-062 | `bench_resampler_throughput` | `crates/chanora_audio/benches/resampler.rs` | −10% samples/sec | PENDING_BASELINE | diff --git a/docs/verification/swe5-software-integration-verification-plan.md b/docs/verification/swe5-software-integration-verification-plan.md deleted file mode 100644 index df0c7b7..0000000 --- a/docs/verification/swe5-software-integration-verification-plan.md +++ /dev/null @@ -1,377 +0,0 @@ - -# Chanora SWE.5 Software Integration and Integration Verification Plan - -**Document type:** Software Integration Verification Plan -**Process alignment:** ASPICE SWE.5 Software Component Verification and Integration Verification -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Verification object:** Integrated software elements -**Direct source layer:** SAD and SDD verification objects - -**Repo path:** `docs/verification/swe5-software-integration-verification-plan.md` --- - -## 1. Purpose - -This document defines the software integration and integration verification strategy for Chanora. It verifies that software elements integrate correctly and interact according to the software architecture and detailed design. - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD - -> SWE.5 Software Integration Verification -``` - -SWE.5 verifies architecture interfaces, dynamic behavior, component behavior, and selected detailed-design interactions. - -## 2. Integration Strategy - -| Integration step | Integrated elements | Purpose | -|---|---|---| -| SWE5-INT-001 | Flutter App Shell + Design System | Confirm theme initialization and token availability | -| SWE5-INT-002 | Design System + UI Components | Confirm components consume tokens and expose semantics | -| SWE5-INT-003 | Adaptive Shell + Feature Modules | Confirm compact/medium/expanded layouts integrate with features | -| SWE5-INT-004 | Localization Service + UI Components | Confirm product strings and accessibility labels integrate | -| SWE5-INT-005 | Protocol Adapter + Rust Core | Confirm protocol events and errors integrate with core state | -| SWE5-INT-006 | Rust Core + Bridge Facade | Confirm commands, results, and event streams integrate | -| SWE5-INT-007 | Bridge Facade + Flutter State | Confirm event mapping and view model updates | -| SWE5-INT-008 | Audio Subsystem + Platform Audio | Confirm capture, processing, encode/decode, and playback interface behavior | -| SWE5-INT-009 | Diagnostics + Storage + Localization | Confirm diagnostics event keys, localized descriptions, redaction, and export integration | -| SWE5-INT-010 | Full Flutter UI + Rust Core | Confirm end-to-end software behavior before software qualification testing | - -## 3. Integration Verification Measures - -**SWE5-IV-001**: Verify Flutter App Shell and Design System integration. - -- Source SAD: SAD-001, SAD-002, SAD-007 -- Source SDD: SDD-001, SDD-002, SDD-003 -- Verification method: Flutter integration test -- Pass criteria: App initializes Material 3 theme and Chanora semantic tokens before rendering feature screens. -- Evidence: Integration test result - -**SWE5-IV-002**: Verify Design System and UI Component integration. - -- Source SAD: SAD-002, SAD-003, SAD-014 -- Source SDD: SDD-004 through SDD-010, SDD-021 through SDD-024 -- Verification method: Widget integration test -- Pass criteria: Components consume design tokens and expose required accessibility semantics. -- Evidence: Integration test result - -**SWE5-IV-003**: Verify adaptive shell and feature module integration. - -- Source SAD: SAD-008 through SAD-011 -- Source SDD: SDD-011 through SDD-015 -- Verification method: Integration test -- Pass criteria: Compact, medium, and expanded layouts render correct feature regions and preserve critical voice/connection access. -- Evidence: Integration test result - -**SWE5-IV-004**: Verify connection status and VoiceBar integration. - -- Source SAD: SAD-012, SAD-013, SAD-016 -- Source SDD: SDD-016, SDD-017, SDD-018, SDD-026 -- Verification method: Integration test -- Pass criteria: Connection status and primary voice controls are visible or directly reachable across layout classes. -- Evidence: Integration test result - -**SWE5-IV-005**: Verify localization and accessibility integration. - -- Source SAD: SAD-014, SAD-020, SAD-026 -- Source SDD: SDD-024, SDD-031, SDD-032, SDD-040 -- Verification method: Integration test, accessibility test -- Pass criteria: Localized strings, semantic labels, fallback behavior, and locale-aware formatting work together. -- Evidence: Integration test result - -**SWE5-IV-006**: Verify server-content text path integration. - -- Source SAD: SAD-021, SAD-022, SAD-023 -- Source SDD: SDD-034, SDD-035, SDD-036, SDD-037 -- Verification method: Integration test -- Pass criteria: Server names, channel names, nicknames, and messages preserve Unicode and are not translated. -- Evidence: Integration test result - -**SWE5-IV-007**: Verify Platform Services and App Shell integration. - -- Source SAD: SAD-017, SAD-018, SAD-019 -- Source SDD: SDD-027, SDD-028, SDD-029, SDD-030 -- Verification method: Platform integration test -- Pass criteria: Insets, back intent, haptics, and keyboard avoidance integrate with shell behavior. -- Evidence: Platform test result - -**SWE5-IV-008**: Verify Bridge Facade and Rust Core integration. - -- Source SAD: SAD-040, SAD-041 -- Source SDD: SDD-046, SDD-047 -- Verification method: Integration test -- Pass criteria: Flutter commands and Rust events flow through stable DTOs and deterministic event mapping. -- Evidence: Integration test result - -**SWE5-IV-009**: Verify Rust Core and Protocol Adapter integration. - -- Source SAD: SAD-032, SAD-033, SAD-041 -- Source SDD: SDD-046, SDD-047 -- Verification method: Integration test with protocol test server or protocol test double -- Pass criteria: Connection, snapshot, delta events, and protocol errors integrate with core state. -- Evidence: Integration test result - -**SWE5-IV-010**: Verify Audio Subsystem and Platform Audio integration. - -- Source SAD: SAD-034 -- Source SDD: SDD-048 -- Verification method: Audio integration test -- Pass criteria: Audio status reaches UI while DSP remains isolated from UI units. -- Evidence: Audio integration test result - -**SWE5-IV-011**: Verify Diagnostics integration. - -- Source SAD: SAD-036, SAD-050 -- Source SDD: SDD-038, SDD-041, SDD-050, SDD-054 -- Verification method: Integration test, audit -- Pass criteria: Diagnostic keys, localized descriptions, redaction, Unicode preservation, and export flow operate together. -- Evidence: Integration test result, audit record - -**SWE5-IV-012**: Verify storage and secure-storage integration boundaries. - -- Source SAD: SAD-035 -- Source SDD: SDD-049 -- Verification method: Integration test, security review -- Pass criteria: Non-secret data uses storage facade and secrets use secure storage boundaries. -- Evidence: Integration test result, review record - -**SWE5-IV-013**: Verify architecture-view and traceability-tooling integration. - -- Source SAD: SAD-046 through SAD-060 -- Source SDD: SDD-051 through SDD-070 -- Verification method: Documentation/tooling integration check -- Pass criteria: Architecture views, ADRs, interface detail catalog, and traceability checker are mutually consistent. -- Evidence: Review record - -## 4. Regression Strategy - -Regression selection shall consider: - -- changed software unit -- changed interface -- changed architecture item -- changed DTO -- changed localization resource -- changed audio pipeline behavior -- changed protocol adapter behavior -- changed diagnostics redaction behavior -- changed platform behavior - -## 5. Traceability Matrix - -| Architecture / Design Area | SWE.5 Coverage | -|---|---| -| SAD-001 through SAD-016 | SWE5-IV-001 through SWE5-IV-005 | -| SAD-017 through SAD-027 | SWE5-IV-005 through SWE5-IV-007, SWE5-IV-011 | -| SAD-028 through SAD-031 | SWE5-IV-013 | -| SAD-032 through SAD-041 | SWE5-IV-008 through SWE5-IV-012 | -| SAD-042 through SAD-050 | SWE5-IV-001, SWE5-IV-011, SWE5-IV-013 | -| SAD-051 through SAD-060 | SWE5-IV-013 | -| SDD-001 through SDD-030 | SWE5-IV-001 through SWE5-IV-007 | -| SDD-031 through SDD-050 | SWE5-IV-005 through SWE5-IV-012 | -| SDD-051 through SDD-070 | SWE5-IV-013 | - -## 6. Result Reporting - -Software integration verification results shall be summarized in an integration verification summary report including: - -- integrated elements -- selected integration sequence -- selected verification measures -- regression scope -- test environment -- pass/fail result -- nonconformances -- interface issues -- residual risks -- release recommendation - -## 7. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial SWE.5 software integration and integration verification plan. | - ---- - -## 8. Platform Decision Integration Verification Addendum - -**SWE5-IV-014**: Verify platform baseline, build configuration, single connection, audio defaults, storage, bridge, and diagnostics privacy integration. - -- Source SAD: SAD-061 through SAD-070 -- Source SDD: SDD-071 through SDD-080 -- Verification method: Integration test, release inspection, security review -- Pass criteria: New product decisions integrate across build configuration, runtime behavior, audio, storage, bridge, diagnostics, and release readiness. -- Evidence: Integration verification result - -| Architecture / Design Area | SWE.5 Coverage | -|---|---| -| SAD-061 through SAD-070 | SWE5-IV-014 | -| SDD-071 through SDD-080 | SWE5-IV-014 | - -**SWE5-IV-015**: Verify integrated desktop PTT subsystem (audio engine, Rust core PTT controller, bridge, Flutter UI, diagnostics). - -- Source SAD: SAD-071 through SAD-079 -- Source SDD: SDD-081 through SDD-092 -- Verification method: Software integration test on every supported desktop reference host (Windows, macOS, GNOME-on-Wayland Linux) -- Pass criteria: For each platform the live measurement of `PttCapabilityLevel` and `backend_id` matches the design expectation; pressing the bound input toggles `transmit_active` end-to-end; the missed-key-up watchdog clears `transmit_active` after the configured timeout; the user-initiated diagnostic export does not contain raw key data; the UI capability badge matches the active capability. -- Evidence: Integration test trace, diagnostic-export inspection, UI screenshot - -| Architecture / Design Area | SWE.5 Coverage | -|---|---| -| SAD-061 through SAD-070 | SWE5-IV-014 | -| SDD-071 through SDD-080 | SWE5-IV-014 | -| SAD-071 through SAD-079 | SWE5-IV-015 | -| SDD-081 through SDD-092 | SWE5-IV-015 | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT software-integration verification item SWE5-IV-015 covering the integrated audio engine + Rust core PTT controller + bridge + Flutter UI + diagnostics path on Windows, macOS, and GNOME-on-Wayland Linux reference hosts. | - - -## 9. Android P0 Software Integration Verification Addendum - -**SWE5-IV-016**: Verify Android JNI bootstrap → foreground service lifecycle integration. - -- Source SAD: SAD-077, SAD-081 -- Source SDD: SDD-105, SDD-107 -- Verification method: Instrumented integration test on a physical API 28 device -- Pass criteria: `Application.onCreate` loads `libchanora_bridge.so`, `JNI_OnLoad` captures the `JavaVM`, the bridge is initialized, and `AndroidVoiceForegroundService` can be started by the Rust core (via JNI callback) without re-loading the library or racing init. Service start completes before the first audio frame is produced. -- Evidence: Integration test result + logcat trace - -**SWE5-IV-017**: Verify permission denial → foreground service not started → listen-only stream open integration. - -- Source SAD: SAD-077 -- Source SDD: SDD-106, SDD-107 -- Source SRS: SRS-209 -- Verification method: Integration test using permission-state test double + real audio stack -- Pass criteria: When `RECORD_AUDIO` is denied (or revoked mid-session) the FGS is NOT started for capture; the playback stream remains open so the user hears other participants (listen-only fallback per SRS-209); UI surfaces the degraded state; re-granting permission re-enables capture without process restart. -- Evidence: Integration test result - -**SWE5-IV-018**: Verify foreground service start triggers audio mode acquisition; service stop triggers mode restore. - -- Source SAD: SAD-081, SAD-085 -- Source SDD: SDD-107, SDD-108 -- Source SRS: SRS-208 -- Source SysRS: SysRS-305 -- Verification method: Integration test on a physical device with `dumpsys audio` snapshots before / during / after -- Pass criteria: Before voice channel join, `AudioManager.mode` is the device baseline. After FGS start and join, mode is `MODE_IN_COMMUNICATION`. After leave/disconnect, FGS stops and the controller restores the snapshotted prior mode. Refcount holds across rapid join/leave/join cycles. -- Evidence: Integration test result + `dumpsys audio` traces - -**SWE5-IV-019**: Verify `BackIntentService` integration with the Flutter Navigator route stack. - -- Source SAD: SAD-018 -- Source SDD: SDD-028 (expanded) -- Source SRS: SRS-163 -- Verification method: Flutter integration test on Android with a non-trivial route stack (home → channel → settings → modal) -- Pass criteria: System back closes modal first (does not pop the route); subsequent back pops one route per press; at the home route system back backgrounds the activity. PTT-active-ignore: while the test driver asserts `transmit_active`, back is consumed. API 33+ and pre-33 code paths both produce identical end states (verified on at least one device per branch). -- Evidence: Integration test result - -**SWE5-IV-020**: Verify AAB build pipeline integration (`SDD-109`). - -- Source SAD: SAD-063 -- Source SDD: SDD-073, SDD-109 -- Source SRS: SRS-119, SRS-188 -- Verification method: CI build job + `bundletool` validation -- Pass criteria: `flutter build appbundle --release` produces an AAB; `bundletool validate` reports no errors; `bundletool build-apks --connected-device` produces per-ABI splits for `{arm64-v8a, armeabi-v7a, x86_64}`; signing key fingerprint matches the CI release-key reference; `targetSdkVersion` matches the SRS-188 declared target; `minSdkVersion` == 28 (DEC-004); manifest contains `FOREGROUND_SERVICE` + `FOREGROUND_SERVICE_MICROPHONE` (API 34+) + `RECORD_AUDIO` permissions and no others outside the allow-list. -- Evidence: CI artifact + bundletool report - -| Architecture / Design Area | SWE.5 Coverage | -|---|---| -| SAD-018, SAD-063, SAD-077, SAD-081, SAD-084, SAD-085, SAD-086 | SWE5-IV-016 through SWE5-IV-020 | -| SDD-028 (expanded), SDD-073 (refreshed), SDD-105, SDD-106, SDD-107, SDD-108, SDD-109, SDD-110 | SWE5-IV-016 through SWE5-IV-020 | - - -### Android voice audio backend integration items (SDD-111..SDD-116 wave) - -**SWE5-IV-021**: Verify `MobileVoiceAudioBackend` trait + audio engine integration on voice_join / voice_leave. - -- Source SAD: SAD-077, SAD-081 -- Source SDD: SDD-111 (trait surface), SDD-112 (config), SDD-115 (lifecycle) -- Source SRS: SRS-210, SRS-211, SRS-213, SRS-214 -- Verification method: Rust integration test on a physical Android device (API 31 mid-tier minimum) driving the engine through `voice_join` / `voice_leave` against the real `AndroidVoiceUnit` -- Pass criteria: `voice_join` constructs `AndroidVoiceStreamConfig` from engine state, calls `AndroidVoiceUnit::open(...)`, opens BOTH input and output streams (verified by `session_id()` being `Some(_)` and the output-stream handle being non-null), then calls `start()`. Engine state transitions are observed in order: `Idle → Opening → Running`. `voice_leave` calls `stop()` then `close()` in that order; engine state returns to `Idle`. No stream is left open after `voice_leave` (verified by a follow-up `voice_join` succeeding with a fresh session id). -- Evidence: Integration test result + logcat with engine state transition lines -- SDD-116 matrix rows satisfied: all (open/close path exercised on every matrix device) - -**SWE5-IV-022**: Verify SDD-108 audio-mode engagement precedes SDD-113 effect binding (forward) and effects release precedes mode restore (reverse). - -- Source SAD: SAD-077, SAD-081, SAD-085 -- Source SDD: SDD-108, SDD-113, SDD-115 (sequencing) -- Source SRS: SRS-208, SRS-212 -- Verification method: Integration test instrumented with ordered event sink (timestamped events for `mode_engage`, `stream_open`, `effect_attach`, `start`, `stop`, `effect_release`, `stream_close`, `mode_restore`) -- Pass criteria: On `voice_join`, the recorded order is exactly `FGS_start → stream_open → mode_engage → effect_attach → start`. On `voice_leave`, the recorded order is exactly `stop → effect_release → mode_restore → stream_close → FGS_stop` per SDD-115 item 3 (reverse-order teardown). Any deviation fails the case. Test repeats 3 rapid join/leave cycles to surface refcount or sequencing races. -- Evidence: Integration test result + event-sink dump -- SDD-116 matrix rows satisfied: all - -**SWE5-IV-023**: Verify SDD-115 full lifecycle sequencing forward and reverse. - -- Source SAD: SAD-077, SAD-081 -- Source SDD: SDD-107, SDD-108, SDD-111, SDD-113, SDD-115 -- Source SRS: SRS-208, SRS-210, SRS-212, SRS-215 -- Verification method: Instrumented integration test on physical device -- Pass criteria: Forward sequence: `FGS_start → streams_open → mode_engage → effects_bind → start_capture+playback`. Reverse sequence: `stop → effects_release → mode_restore → streams_close → FGS_stop`. Test asserts strict ordering AND that no event from one step occurs before the previous step completes (no overlap). Test re-runs across at least one API 28 device and one API 34 device to cover the FGS-type tightening branch. -- Evidence: Integration test result + ordered event log -- SDD-116 matrix rows satisfied: API 28 row, API 31 row, API 34 row - -**SWE5-IV-024**: Verify audio-focus loss handling. - -- Source SAD: SAD-077, SAD-081, SAD-085 -- Source SDD: SDD-115 (audio focus event response) -- Source SRS: SRS-208, SRS-215 -- Verification method: Integration test using a controllable secondary audio source (test app that requests focus with the three loss kinds) -- Pass criteria: `AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK` → capture and playback continue at unchanged level (Chanora does not duck itself; voice content is exempt per SDD-115). `AUDIOFOCUS_LOSS_TRANSIENT` → capture is paused (no frames produced upstream) and playback is paused; on focus regain, both resume without `voice_leave`/`voice_join`. `AUDIOFOCUS_LOSS` (permanent) → the session is left cleanly (effects released, mode restored, streams closed) and the user is surfaced an "audio focus lost" state; no auto-rejoin. -- Evidence: Integration test result + logcat -- SDD-116 matrix rows satisfied: at least API 31 + API 34 rows - -**SWE5-IV-025**: Verify `ErrorDisconnected` callback marshals to tokio task and triggers reopen without blocking the callback thread. - -- Source SAD: SAD-077, SAD-081 -- Source SDD: SDD-111 (error/disconnect callback via bounded channel/watch), SDD-115 (recovery on disconnect) -- Source SRS: SRS-210, SRS-215 -- Verification method: Integration test injecting a forced disconnect (e.g. unplug Bluetooth headset mid-session, or invoke an Oboe error-callback fault injection point) -- Pass criteria: The Oboe `onErrorBeforeClose` / `onErrorAfterClose` callback path enqueues a message onto the bounded channel and returns within the callback's documented latency budget (assert: callback returns in < 5 ms). Reopen is performed on a tokio task on the engine runtime, not on the callback thread (verified by thread-id capture in test). Reopen completes (`voice_join` round-trip on the new device route) within 2 s. The callback never holds a lock during reopen. -- Evidence: Integration test result + thread-id capture log -- SDD-116 matrix rows satisfied: all (regression surface) - -**SWE5-IV-026**: Verify permission-denied `voice_join` reports listen-only and does NOT start the foreground service for capture. - -- Source SAD: SAD-077 -- Source SDD: SDD-106, SDD-107, SDD-111, SDD-115 -- Source SRS: SRS-209, SRS-215 -- Verification method: Integration test with `RECORD_AUDIO` denied via permission test double -- Pass criteria: `voice_join` opens the output (playback) stream and engine state becomes `RunningListenOnly`. `AndroidVoiceForegroundService` is NOT started with `foregroundServiceType="microphone"` for capture (the service may still run as a non-mic FGS for playback longevity per SDD-107 policy — if SDD-107 declines this, the FGS is not started at all). Backend reports `capture_state = ListenOnly`. No `AndroidVoiceUnit` input stream is opened. UI badge reflects listen-only. On runtime permission grant, the engine performs an internal upgrade to full duplex without process restart and without losing the playback stream. Cross-link: builds on SWE5-IV-017. -- Evidence: Integration test result + logcat + UI screenshot -- SDD-116 matrix rows satisfied: API 28 row, API 34 row (FGS-type tightening branch) - -| Architecture / Design Area | SWE.5 Coverage | -|---|---| -| SAD-077, SAD-081 (mobile voice audio backend allocation) | SWE5-IV-021 through SWE5-IV-026 | -| SDD-111, SDD-112, SDD-113, SDD-115 | SWE5-IV-021 through SWE5-IV-026 | -| SDD-116 (device matrix coverage entry points) | SWE5-IV-021, SWE5-IV-023 | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-18 | Added Android P0 software-integration items SWE5-IV-016..SWE5-IV-020 covering JNI+FGS, permission+FGS+listen-only fallback, FGS+audio-mode round-trip, BackIntentService + Flutter route stack, and AAB build pipeline (bundletool + ABI splits). | -| 0.9.5 | 2026-05-18 | Added Android voice audio backend integration items SWE5-IV-021..SWE5-IV-026 covering MobileVoiceAudioBackend trait + engine wiring (SDD-111), SDD-108↔SDD-113 ordering and reverse-order teardown (SDD-115), full lifecycle sequencing across SDD-107/108/111/113, audio-focus loss handling, ErrorDisconnected callback marshaling, and permission-denied listen-only fallback. Cross-links: SWE5-IV-017 extended by SWE5-IV-026 (listen-only fallback). | diff --git a/docs/verification/swe6-software-verification-plan.md b/docs/verification/swe6-software-verification-plan.md deleted file mode 100644 index dd62ec8..0000000 --- a/docs/verification/swe6-software-verification-plan.md +++ /dev/null @@ -1,400 +0,0 @@ - -# Chanora SWE.6 Software Verification Plan - -**Document type:** Software Verification / Software Qualification Test Plan -**Process alignment:** ASPICE SWE.6 Software Verification -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Verification object:** Fully integrated Chanora software -**Direct source layer:** SRS - -**Repo path:** `docs/verification/swe6-software-verification-plan.md` --- - -## 1. Purpose - -This document defines the software verification strategy for Chanora. It verifies that the fully integrated software satisfies the Software Requirements Specification. - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD - -> SWE.6 Software Verification -``` - -SWE.6 verifies against SRS. It does not replace SWE.4 unit verification or SWE.5 software integration verification. - -## 2. Software Verification Strategy - -| Verification type | Purpose | -|---|---| -| Functional software tests | Verify integrated software behavior against SRS | -| Non-functional software tests | Verify performance, accessibility, security, diagnostics, localization, and reliability requirements | -| Platform software tests | Verify integrated software behavior on target platforms | -| Regression tests | Confirm changes did not break previously verified software requirements | -| Release-scope test selection | Select tests according to target release content | -| Summary reporting | Communicate software verification status | - -## 3. Software Verification Measures - -**SWE6-SV-001**: Verify server connection flow. - -- Source SRS: SRS-001 through SRS-030 -- Verification method: End-to-end software test -- Pass criteria: User can connect to a compatible server with configured connection data. -- Evidence: Software verification result - -**SWE6-SV-002**: Verify channel tree, client list, and server state display. - -- Source SRS: SRS-031 through SRS-060 -- Verification method: End-to-end software test -- Pass criteria: Channel and client state is displayed and updates after server events. -- Evidence: Software verification result - -**SWE6-SV-003**: Verify voice send and receive. - -- Source SRS: SRS-061 through SRS-090 -- Verification method: Audio software verification test -- Pass criteria: User can transmit and receive voice under supported conditions. -- Evidence: Software verification result - -**SWE6-SV-004**: Verify push-to-talk, mute, deaf, and voice status. - -- Source SRS: SRS-061 through SRS-090, SRS-156 -- Verification method: End-to-end software test -- Pass criteria: Voice controls perform expected software behavior and display correct state. -- Evidence: Software verification result - -**SWE6-SV-005**: Verify local storage and secure storage behavior. - -- Source SRS: SRS-091 through SRS-110 -- Verification method: Software security and persistence test -- Pass criteria: Non-secret data persists through approved storage and secrets use secure storage boundaries. -- Evidence: Software verification result - -**SWE6-SV-006**: Verify diagnostics and redacted export behavior. - -- Source SRS: SRS-111 through SRS-124, SRS-177, SRS-178 -- Verification method: Software verification test, audit -- Pass criteria: Diagnostic export requires user action and redacts sensitive data while preserving safe Unicode content. -- Evidence: Software verification result, audit record - -**SWE6-SV-007**: Verify deployment-sensitive software behavior. - -- Source SRS: SRS-125 through SRS-134 -- Verification method: Release build verification -- Pass criteria: Release build metadata, packaging behavior, and platform declarations are consistent with software requirements. -- Evidence: Release verification result - -**SWE6-SV-008**: Verify traceability and documentation controls. - -- Source SRS: SRS-135 through SRS-143, SRS-180 through SRS-183 -- Verification method: Documentation verification -- Pass criteria: SRS, SAD, and SDD direct-source rules pass validation. -- Evidence: Traceability report - -**SWE6-SV-009**: Verify Material 3 and Chanora Design System behavior. - -- Source SRS: SRS-144 through SRS-150 -- Verification method: UI software verification, review -- Pass criteria: Integrated app uses Material 3 baseline and Chanora semantic tokens without feature-screen hardcoding. -- Evidence: Software verification result - -**SWE6-SV-010**: Verify adaptive layouts. - -- Source SRS: SRS-151 through SRS-156 -- Verification method: UI software verification -- Pass criteria: Compact, medium, and expanded layouts preserve connection status and primary voice controls. -- Evidence: Software verification result - -**SWE6-SV-011**: Verify accessibility behavior. - -- Source SRS: SRS-157 through SRS-161 -- Verification method: Accessibility verification -- Pass criteria: Critical controls expose semantics, non-color-only state cues, focus behavior, and text-scale resilience. -- Evidence: Accessibility verification result - -**SWE6-SV-012**: Verify platform behavior. - -- Source SRS: SRS-162 through SRS-164 -- Verification method: Platform software verification -- Pass criteria: Insets, safe areas, keyboard, Android back behavior, and iOS platform behavior operate as specified. -- Evidence: Platform verification result - -**SWE6-SV-013**: Verify localization and fallback behavior. - -- Source SRS: SRS-165 through SRS-169 -- Verification method: Localization software verification -- Pass criteria: Product strings are externalized, English baseline exists, additional locales can be added, and fallback is deterministic. -- Evidence: Localization verification result - -**SWE6-SV-014**: Verify Unicode and server-content behavior. - -- Source SRS: SRS-170 through SRS-176 -- Verification method: Internationalization software verification -- Pass criteria: Server content is preserved, displayed without translation, UTF-8 is used internally, and locale-aware formatting works. -- Evidence: Internationalization verification result - -**SWE6-SV-015**: Verify software architecture and detailed design traceability controls. - -- Source SRS: SRS-180 through SRS-184 -- Verification method: Documentation/tooling verification -- Pass criteria: SAD derives from SRS and SDD derives from SAD; initialization sequence is verified. -- Evidence: Traceability validation result - -## 4. Regression Strategy - -Regression test selection shall consider: - -- changed SRS item -- changed feature -- changed architecture component -- changed detailed design unit -- changed platform behavior -- changed localization or Unicode handling -- changed diagnostics or redaction -- changed audio behavior -- changed protocol adapter behavior - -## 5. Traceability Matrix - -| SRS Range | SWE.6 Coverage | -|---|---| -| SRS-001 through SRS-030 | SWE6-SV-001 | -| SRS-031 through SRS-060 | SWE6-SV-002 | -| SRS-061 through SRS-090 | SWE6-SV-003, SWE6-SV-004 | -| SRS-091 through SRS-110 | SWE6-SV-005 | -| SRS-111 through SRS-124 | SWE6-SV-006 | -| SRS-125 through SRS-134 | SWE6-SV-007 | -| SRS-135 through SRS-143 | SWE6-SV-008 | -| SRS-144 through SRS-150 | SWE6-SV-009 | -| SRS-151 through SRS-156 | SWE6-SV-010 | -| SRS-157 through SRS-161 | SWE6-SV-011 | -| SRS-162 through SRS-164 | SWE6-SV-012 | -| SRS-165 through SRS-169 | SWE6-SV-013 | -| SRS-170 through SRS-176 | SWE6-SV-014 | -| SRS-177 through SRS-184 | SWE6-SV-006, SWE6-SV-015 | - -## 6. Result Reporting - -Software verification results shall be summarized in a software verification summary report including: - -- release scope -- selected software verification measures -- skipped measures and rationale -- platform/environment used -- pass/fail status -- nonconformances -- regression scope -- residual risks -- release recommendation - -## 7. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial SWE.6 software verification plan derived from SRS v0.5. | - ---- - -## 8. Platform Decision Software Verification Addendum - -**SWE6-SV-016**: Verify platform baseline, release SDK gates, single connection MVP scope, audio defaults, storage/bridge policy, and diagnostics/crash reporting policy. - -- Source SRS: SRS-185 through SRS-194 -- Verification method: Software verification, release inspection, security/privacy review -- Pass criteria: Integrated software and release configuration satisfy the accepted product decisions. -- Evidence: Software verification result, release inspection record - -| SRS Range | SWE.6 Coverage | -|---|---| -| SRS-185 through SRS-194 | SWE6-SV-016 | - -**SWE6-SV-017**: Verify integrated software behaviour for desktop Push-to-Talk against SRS-195 through SRS-203. - -- Source SRS: SRS-195, SRS-196, SRS-197, SRS-198, SRS-199, SRS-200, SRS-201, SRS-202, SRS-203 -- Verification method: Software verification test (end-to-end) on Windows, macOS, GNOME-on-Wayland reference hosts -- Pass criteria: PTT trait abstraction is platform-agnostic from the caller's perspective; reported capability level equals live runtime behaviour; Windows ladder degrades correctly when Raw Input is denied; macOS Global ↔ Focused toggles with permission state changes; Linux honours portal availability; mouse-side-button binding works where the backend exposes it; `capture_active` and `transmit_active` are independently observable; diagnostic export contains zero raw key data; missed-key-up watchdog clears `transmit_active` after the configured timeout. -- Evidence: SWE.6 test report - -| SRS Range | SWE.6 Coverage | -|---|---| -| SRS-185 through SRS-194 | SWE6-SV-016 | -| SRS-195 through SRS-203 | SWE6-SV-017 | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT software-verification item SWE6-SV-017 covering end-to-end SRS-195..203 verification across Windows, macOS, and GNOME-on-Wayland Linux reference hosts. | - - -## 9. Android P0 Software Verification Addendum - -**SWE6-SV-018**: Verify Android voice foreground service satisfies SRS-111. - -- Source SRS: SRS-111 -- Verification method: Device-level software-qualification test on API 28 floor device + mid-tier + current target (per `docs/verification/android-p0-acceptance.md` TC-3) -- Pass criteria: While connected to a voice channel the foreground service runs with `foregroundServiceType="microphone"` (API 30+) and a non-dismissible notification; mic capture and playback continue with the screen off for ≥ 10 minutes without being killed; service stops cleanly on disconnect. -- Evidence: Device test log + screen-recording -- Cross-link (added in 0.9.5): SRS-215 device-matrix expansion is covered by SWE6-SV-030. SWE6-SV-018 remains the single-device baseline; SWE6-SV-030 collects per-SDD-116-row evidence. - -**SWE6-SV-019**: Verify RECORD_AUDIO request timing and listen-only fallback satisfy SRS-209. - -- Source SRS: SRS-209 -- Source SysRS: SysRS-306 -- Verification method: Device-level test (android-p0-acceptance.md TC-2) -- Pass criteria: The mic permission is requested at the user gesture that first needs it (not at app launch); denial drops capture but keeps playback open (listen-only); permanently-denied state opens the system settings deep-link instead of re-prompting; re-grant re-enables capture without process restart. -- Evidence: Device test log - -**SWE6-SV-020**: Verify Android in-call audio mode round-trip satisfies SRS-208. - -- Source SRS: SRS-208 -- Source SysRS: SysRS-305 -- Verification method: Device-level test with `dumpsys audio` (android-p0-acceptance.md TC-6) -- Pass criteria: Pre-join mode is recorded; during voice session mode is `MODE_IN_COMMUNICATION`; on leave/disconnect prior mode is restored exactly. No permanent mode lock across multiple sessions. No crash if a Bluetooth headset is connected/disconnected mid-session (P0 minimum). -- Evidence: Device test log + dumpsys traces - -**SWE6-SV-021**: Verify Android back navigation satisfies SRS-163. - -- Source SRS: SRS-163 -- Verification method: Device-level test (android-p0-acceptance.md TC-11 + TC-12) on API 28, an API ≤ 32 device, and an API 33+ device. -- Pass criteria: Modal-first close; one-pop-per-press; home-route back backgrounds; PTT-active ignores back. Predictive-back animation present on API 33+ and absent on pre-33 with identical end behaviour. -- Evidence: Device test log + screen-recording - -**SWE6-SV-022**: Verify Android minimum API satisfies SRS-187 and DEC-004. - -- Source SRS: SRS-187 -- Source SysRS: SysRS-288 -- Verification method: Manifest inspection + install attempt on API 28 device -- Pass criteria: Merged manifest declares `minSdkVersion = 28`. Install on API 28 succeeds. Install attempt on API 27 simulator/device is rejected with a clean error. -- Evidence: Manifest dump + install logs - -**SWE6-SV-023**: Verify Android Play target API and AAB packaging satisfy SRS-119 and SRS-188. - -- Source SRS: SRS-119, SRS-188 -- Verification method: AAB inspection + Play Console upload to Internal Testing (android-p0-acceptance.md TC-13) -- Pass criteria: `targetSdkVersion` matches the currently-required Play target per SRS-188; release artifact is an AAB (not a bare APK) per SRS-119; Play Console accepts the bundle; signing key is the CI release key. -- Evidence: AAB dump + Play Console acceptance screenshot - -**SWE6-SV-024**: Verify Android PTT capability badge reports `L0Focused` per SAD-086 / SDD-110. - -- Source SRS: SRS-208 (mode boundary), SRS-209 -- Verification method: Device-level UI test (android-p0-acceptance.md TC-4 + TC-10) -- Pass criteria: Capability badge shows `L0Focused` with Android-specific explanatory copy. No global hotkey is bound. Backgrounding the app stops PTT transitions from being delivered. -- Evidence: UI screenshot + log - -| SRS Range | SWE.6 Coverage | -|---|---| -| SRS-111 | SWE6-SV-018 | -| SRS-119 | SWE6-SV-023 | -| SRS-163 | SWE6-SV-021 | -| SRS-187 | SWE6-SV-022 | -| SRS-188 | SWE6-SV-023 | -| SRS-208 | SWE6-SV-020, SWE6-SV-024 | -| SRS-209 | SWE6-SV-019, SWE6-SV-024 | - - -### Android voice audio backend qualification items (SRS-210..SRS-215, SDD-111..SDD-116 wave) - -**SWE6-SV-025**: Verify SRS-210 mouth-to-ear latency target per device-class on the SDD-116 device matrix. - -- Source SRS: SRS-210 -- Source SDD: SDD-111, SDD-112, SDD-116 -- Verification method: Glass-to-glass acoustic measurement on each SDD-116 matrix device (API 28, API 31, API 34; at least one Pixel + one Samsung). See "Glass-to-glass latency measurement procedure" below. -- Pass criteria: On devices where `achieved_performance_mode() == LowLatency` the measured mouth-to-ear latency is **≤ 150 ms** (median of 20 samples, 95th percentile ≤ 180 ms). On devices where the achieved mode is `None`/`PowerSaving` the measured latency is **≤ 250 ms** (median of 20 samples, 95th percentile ≤ 300 ms). Tier classification is derived from the SWE4-UV-051 unit-level mapping evaluated against the per-device `achieved_performance_mode` from SWE6-SV-026. -- Evidence: Per-device measurement log (CSV: device, API, achieved_mode, sample_index, latency_ms) + reference audio recording for spot-check + acceptance form rows TC-17, TC-18 -- SDD-116 matrix rows satisfied: all (one row per device) - -**SWE6-SV-026**: Verify SRS-211 input preset achieved value recorded per device. - -- Source SRS: SRS-211 -- Source SDD: SDD-112 (`achieved_input_preset()`), SDD-116 -- Verification method: Device-level test reading the backend's diagnostics export after `voice_join` -- Pass criteria: For each SDD-116 matrix device the diagnostics record one of `{VoiceCommunication, VoicePerformance, Generic}` and that value is consistent with the fallback ladder verified by SWE4-UV-048. `VoiceCommunication` is preferred and any deviation must be accompanied by a recorded fallback rationale (e.g. preset rejected by OEM stack). No device reports an unrecorded/unknown preset. -- Evidence: Per-device diagnostics export -- SDD-116 matrix rows satisfied: all - -**SWE6-SV-027**: Verify SRS-212 hardware AEC engagement (and NS/AGC where supported) per device. - -- Source SRS: SRS-212 -- Source SDD: SDD-113, SDD-116 -- Verification method: Device-level test inspecting backend diagnostics + audible regression check (echo audibility) under speakerphone-routed playback -- Pass criteria: For each matrix device the diagnostics record per-effect engagement: `{aec: hw|sw|unavailable, ns: hw|sw|unavailable, agc: hw|sw|unavailable}`. Where `AcousticEchoCanceler.isAvailable()` returns true the recorded value MUST be `hw`. Where it returns false the recorded value MUST be `sw` (software fallback per SDD-113 item 5) — never silent. Audible echo evaluation (test sequence: 10 s of speakerphone playback with mic open at conversational distance) yields no operator-perceptible echo on at least one Pixel device and at least one Samsung device. -- Evidence: Per-device diagnostics export + audible-check operator note -- SDD-116 matrix rows satisfied: all (AEC/NS/AGC availability column) - -**SWE6-SV-028**: Verify SRS-213 output usage and content type achieved per device. - -- Source SRS: SRS-213 -- Source SDD: SDD-112 (`achieved_output_usage`, `achieved_output_content_type`), SDD-116 -- Verification method: Device-level test reading backend diagnostics; cross-checked with `dumpsys media.audio_flinger` where queryable -- Pass criteria: For each matrix device the diagnostics record `achieved_output_usage == VoiceCommunication` AND `achieved_output_content_type == Speech`. Where `dumpsys` exposes the stream attributes, the dump corroborates. Mismatch fails the case. Also verifies the in-call routing side-effect: volume slider during the session adjusts the call-volume stream, not media volume (operator check on at least one device). -- Evidence: Per-device diagnostics export + dumpsys excerpt + operator volume-routing note -- SDD-116 matrix rows satisfied: all - -**SWE6-SV-029**: Verify SRS-214 sharing mode achieved per device. - -- Source SRS: SRS-214 -- Source SDD: SDD-112 (`achieved_sharing_mode`), SDD-116 -- Verification method: Device-level test reading backend diagnostics on each matrix device -- Pass criteria: For each matrix device the diagnostics record `achieved_sharing_mode ∈ {Exclusive, Shared}`. The requested value is always `Exclusive`; deviation to `Shared` is acceptable and must be recorded with no operational regression (assert: no callback errors in the first 60 s of the session when the achieved mode is `Shared`). The aggregate device-matrix table in the test report cross-tabulates `requested vs achieved` per device. -- Evidence: Per-device diagnostics export -- SDD-116 matrix rows satisfied: all - -**SWE6-SV-030**: Verify SRS-215 background mic capture under foreground-service-type=microphone per device. - -- Source SRS: SRS-215 -- Source SDD: SDD-107, SDD-114 (manifest declarations), SDD-115 (FGS-first sequencing), SDD-116 -- Verification method: Device-level test (extends SWE6-SV-018 / android-p0-acceptance.md TC-3) executed on each SDD-116 matrix device -- Pass criteria: With the screen off (device locked or screen timed out) for ≥ 10 minutes the input stream remains open AND frames continue to be produced by the AAudio input (verified by a periodic per-minute frame-count probe in the diagnostics) on every matrix device. On API 34 devices the FGS-type is `microphone` (verified by `dumpsys activity services` excerpt). No `ForegroundServiceDidNotStartInTimeException` or `MissingForegroundServiceTypeException` in logcat. Cross-link annotation: this item extends SWE6-SV-018 with per-matrix-row evidence; SWE6-SV-018 remains the single-device baseline and SWE6-SV-030 is the device-matrix expansion. -- Evidence: Per-device test log + dumpsys excerpt + frame-count probe export -- SDD-116 matrix rows satisfied: all - -| SRS Range | SWE.6 Coverage | -|---|---| -| SRS-210 | SWE6-SV-025 | -| SRS-211 | SWE6-SV-026 | -| SRS-212 | SWE6-SV-027 | -| SRS-213 | SWE6-SV-028 | -| SRS-214 | SWE6-SV-029 | -| SRS-215 | SWE6-SV-018 (single-device baseline), SWE6-SV-030 (device-matrix expansion) | - -#### Glass-to-glass latency measurement procedure (SWE6-SV-025) - -Mouth-to-ear (glass-to-glass) latency for SRS-210 shall be measured end-to-end across the Android device under test acting as the speaker AND a second Android device (or reference Linux host) acting as the listener, both joined to a controlled test TeamSpeak 3 server on the same LAN (no internet hop; LAN RTT must be measured and recorded separately, and subtracted as a baseline only if > 5 ms). - -Measurement setup: - -1. Connect the DUT and the reference listener device to the test server. The DUT is the talker; the reference is the listener. -2. Drive a short acoustic impulse (a 1 kHz tone burst, 20 ms duration, or a click track) into the DUT microphone from a controlled acoustic source (small loudspeaker at fixed distance, OR a wired line-in adapter where the DUT supports one). -3. Capture the listener device's loudspeaker output with a reference microphone connected to a stereo audio interface; the same audio interface ALSO captures the source impulse on the second channel via a hardwired tap from the impulse generator. Both channels are recorded into a single stereo WAV at ≥ 48 kHz, 16-bit minimum. -4. Latency is the time delta between the impulse-onset sample on channel A (source tap) and the impulse-onset sample on channel B (listener loudspeaker capture), expressed in milliseconds. Onset detection: first sample exceeding 10× the RMS noise floor of the preceding 100 ms. -5. Required precision: ≤ 1 ms (achievable at 48 kHz with single-sample onset detection). The measurement tool is unspecified; any DAW, `sox`, or custom script that meets the precision requirement is acceptable. The script and raw WAV files are part of the evidence and shall be archived. -6. Per-device run: 20 impulses spaced ≥ 2 s apart. Record median and 95th percentile. -7. Baseline subtraction: LAN one-way latency to the test server is measured (e.g. via ICMP / TS3 control-channel ping) and recorded but NOT subtracted from the SRS-210 result, because SRS-210's "mouth-to-ear" definition includes the network hop on a representative network. The LAN result is the ceiling case; WAN regression is out of scope for SRS-210 on this matrix. -8. Operator notes record: DUT model, Android API, `achieved_performance_mode`, `achieved_sharing_mode`, `achieved_input_preset`, headset/loudspeaker routing, ambient noise estimate, ambient temperature only if extreme. - -This procedure is reproducible without proprietary fixtures. A loopback-cable-only variant (DUT line-out → DUT line-in on a single device with a wired headset adapter) is acceptable as a screening test but is NOT sufficient for SRS-210 sign-off because it does not exercise the network path. - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-18 | Added Android P0 software-qualification items SWE6-SV-018..SWE6-SV-024 mapped to SRS-111, SRS-119, SRS-163, SRS-187, SRS-188, SRS-208, SRS-209; cross-linked to `docs/verification/android-p0-acceptance.md` test cases. | -| 0.9.5 | 2026-05-18 | Added Android voice audio backend software-qualification items SWE6-SV-025..SWE6-SV-030 covering SRS-210 (latency tier per SDD-116 matrix, with glass-to-glass measurement procedure), SRS-211 (input preset achieved), SRS-212 (hardware AEC engagement + software fallback evidence), SRS-213 (output usage/content type achieved), SRS-214 (sharing mode achieved), SRS-215 (FGS-hosted background capture per matrix row). Annotated SWE6-SV-018 with cross-link to SWE6-SV-030 (device-matrix expansion). | diff --git a/docs/verification/sys4-system-integration-verification-plan.md b/docs/verification/sys4-system-integration-verification-plan.md deleted file mode 100644 index 3e1ce6b..0000000 --- a/docs/verification/sys4-system-integration-verification-plan.md +++ /dev/null @@ -1,303 +0,0 @@ - -# Chanora SYS.4 System Integration and Integration Verification Plan - -**Document type:** System Integration and Integration Verification Plan -**Process alignment:** ASPICE SYS.4 System Integration and Integration Verification -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora -**Verification object:** Integrated application system elements -**Direct source layer:** SysDes - -**Repo path:** `docs/verification/sys4-system-integration-verification-plan.md` --- - -## 1. Purpose - -This document defines the system integration and integration verification strategy for the Chanora application system. It verifies that the system elements defined by SysDes are integrated and interact according to the system architecture. - -```text -SysRS -> SysDes -> SYS.4 System Integration Verification -``` - -SYS.4 verifies system architecture integration. It does not replace SWE.4, SWE.5, or SWE.6. - -## 2. System Integration Scope - -System elements include: - -- User/operator interaction -- Client device hardware -- Operating system services -- Network environment -- External compatible voice server -- Chanora application container -- Flutter UI -- Rust Core -- Protocol adapter -- Audio subsystem -- Platform adapters -- Storage -- Secure storage -- Diagnostics -- Deployment environment -- Localization and UI/UX architecture elements - -## 3. System Integration Strategy - -| Integration step | System elements | Purpose | -|---|---|---| -| SYS4-INT-001 | Chanora app + OS permissions | Verify microphone, notification, secure storage, lifecycle, and permission integration | -| SYS4-INT-002 | Chanora app + audio hardware | Verify input/output device integration and route changes | -| SYS4-INT-003 | Chanora app + network environment | Verify connection behavior, reconnect, and failure presentation | -| SYS4-INT-004 | Chanora app + external compatible server | Verify channels, clients, voice, and text behavior with real or representative server | -| SYS4-INT-005 | Flutter UI + platform services | Verify safe areas, system bars, keyboard, and platform navigation behavior | -| SYS4-INT-006 | Rust Core + external protocol server | Verify protocol integration at system level | -| SYS4-INT-007 | Diagnostics + user export target | Verify diagnostic export workflow at system level | -| SYS4-INT-008 | Deployment artifact + target OS | Verify packaged application launches and uses required services | -| SYS4-INT-009 | Localization + server multilingual content | Verify multilingual product UI and server-provided content handling | -| SYS4-INT-010 | Full application system | Verify integrated behavior across supported platform classes | - -## 4. System Integration Verification Measures - -**SYS4-SIV-001**: Verify OS permission integration. - -- Source SysDes: SysDes-048 through SysDes-058, SysDes-118 -- Verification method: Platform system integration test -- Pass criteria: Required permissions, lifecycle behavior, safe areas, keyboard behavior, and platform navigation behavior integrate with the application. -- Evidence: System integration test result - -**SYS4-SIV-002**: Verify audio hardware integration. - -- Source SysDes: SysDes-059 through SysDes-074 -- Verification method: Audio system integration test -- Pass criteria: Audio capture, playback, route change handling, and processing feature availability work with supported devices. -- Evidence: System integration test result - -**SYS4-SIV-003**: Verify network environment integration. - -- Source SysDes: SysDes-075 through SysDes-087 -- Verification method: Network system integration test -- Pass criteria: Connection, recoverable network loss, reconnect, and user-safe errors work under defined network conditions. -- Evidence: System integration test result - -**SYS4-SIV-004**: Verify external compatible server integration. - -- Source SysDes: SysDes-088 through SysDes-101 -- Verification method: Server system integration test -- Pass criteria: Server connection, channel list, client list, voice, text, and disconnect behavior integrate correctly. -- Evidence: System integration test result - -**SYS4-SIV-005**: Verify application functional system integration. - -- Source SysDes: SysDes-102 through SysDes-120 -- Verification method: System integration test -- Pass criteria: User-visible workflows operate across UI, Rust Core, protocol, state, audio, storage, and diagnostics elements. -- Evidence: System integration test result - -**SYS4-SIV-006**: Verify protocol system integration. - -- Source SysDes: SysDes-121 through SysDes-128 -- Verification method: System integration test with compatible server -- Pass criteria: Protocol adapter integrates with Rust Core and external compatible server without exposing protocol internals to UI. -- Evidence: System integration test result - -**SYS4-SIV-007**: Verify state synchronization system integration. - -- Source SysDes: SysDes-129 through SysDes-132 -- Verification method: System integration test -- Pass criteria: Snapshot, delta, reconnect, event ordering, and UI update behavior operate together. -- Evidence: System integration test result - -**SYS4-SIV-008**: Verify storage and security system integration. - -- Source SysDes: SysDes-001 through SysDes-132 -- Verification method: Security and system integration test -- Pass criteria: Bookmarks, settings, secure storage, redaction, and privacy constraints integrate correctly. -- Evidence: System integration test result, audit record - -**SYS4-SIV-009**: Verify diagnostics and operations system integration. - -- Source SysDes: SysDes-001 through SysDes-132 -- Verification method: System integration test -- Pass criteria: Logs, redaction, diagnostics, export, and support workflow operate as an integrated capability. -- Evidence: System integration test result - -**SYS4-SIV-010**: Verify non-functional system behavior. - -- Source SysDes: SysDes-001 through SysDes-132 -- Verification method: Performance and reliability system integration test -- Pass criteria: Responsiveness, audio latency, memory growth controls, reconnect, and malformed-event behavior meet defined expectations. -- Evidence: System integration test result - -**SYS4-SIV-011**: Verify deployment and release environment integration. - -- Source SysDes: SysDes-001 through SysDes-132 -- Verification method: Deployment system integration test -- Pass criteria: Target platform packages install, launch, and access required OS services as expected. -- Evidence: Deployment integration result - -**SYS4-SIV-012**: Verify interface integration. - -- Source SysDes: SysDes-001 through SysDes-132 -- Verification method: Interface system integration test -- Pass criteria: User, bridge, protocol, audio, storage, secure storage, network, and diagnostic interfaces integrate correctly. -- Evidence: Interface integration result - -**SYS4-SIV-013**: Verify constraints and assumptions integration impact. - -- Source SysDes: SysDes-001 through SysDes-132 -- Verification method: Review, inspection, system integration test -- Pass criteria: Constraints and assumptions are respected or deviations are documented. -- Evidence: Review record, system integration test result - -**SYS4-SIV-014**: Verify UI/UX, Material 3, platform, and i18n system integration. - -- Source SysDes: SysDes-111 through SysDes-132 -- Verification method: System integration test -- Pass criteria: Material 3 design system, adaptive shell, accessibility, platform behavior, localization, Unicode, diagnostics localization, and traceability controls integrate correctly. -- Evidence: System integration test result - -## 5. Regression Strategy - -Regression selection shall consider: - -- changed system element -- changed software release -- changed platform adapter -- changed audio hardware support -- changed compatible server behavior -- changed network behavior -- changed deployment package -- changed localization or Unicode handling -- changed diagnostics export behavior -- changed system architecture item - -## 6. Traceability Matrix - -| SysDes Range | SYS.4 Coverage | -|---|---| -| SysDes-001 through SysDes-034 | SYS4-SIV-005, SYS4-SIV-006, SYS4-SIV-007 | -| SysDes-035 through SysDes-058 | SYS4-SIV-001 | -| SysDes-059 through SysDes-074 | SYS4-SIV-002 | -| SysDes-075 through SysDes-087 | SYS4-SIV-003 | -| SysDes-088 through SysDes-101 | SYS4-SIV-004 | -| SysDes-102 through SysDes-110 | SYS4-SIV-005 | -| SysDes-111 through SysDes-132 | SYS4-SIV-014 | -| SysDes-121 through SysDes-128 | SYS4-SIV-006 | -| SysDes-129 through SysDes-132 | SYS4-SIV-007 | -| SysDes-above-current-baseline and above | Not applicable; no such IDs exist in current SysDes baseline. | - -## 7. Result Reporting - -System integration verification results shall be summarized in a system integration verification summary report including: - -- release scope -- integrated system elements -- integration sequence -- selected verification measures -- regression scope -- platform/environment used -- pass/fail status -- nonconformances -- interface issues -- dynamic behavior issues -- residual risks -- release recommendation - -## 8. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial SYS.4 system integration and integration verification plan derived from SysDes v0.6. | - ---- - -## 9. Platform Decision System Integration Verification Addendum - -**SYS4-SIV-015**: Verify platform baseline, Apple SDK gate, Android target gate, MVP single connection, audio defaults, storage, bridge, and diagnostics privacy system integration. - -- Source SysDes: SysDes-133 through SysDes-141 -- Verification method: System integration test, release inspection, security/privacy review -- Pass criteria: System-level integration reflects accepted product decisions and release gates. -- Evidence: System integration result, release readiness evidence - -| SysDes Range | SYS.4 Coverage | -|---|---| -| SysDes-133 through SysDes-141 | SYS4-SIV-015 | - -**SYS4-SIV-016**: Verify integrated system-level desktop Push-to-Talk behaviour against SysDes-142 through SysDes-148. - -- Source SysDes: SysDes-142, SysDes-143, SysDes-144, SysDes-145, SysDes-146, SysDes-147, SysDes-148 -- Verification method: System integration verification on Windows, macOS, GNOME-on-Wayland reference hosts -- Pass criteria: Platform PTT Backend layer is the only surface generating PTT state transitions; `PttCapabilityLevel` and `backend_id` propagate from backend through Rust Core through bridge to Flutter UI without modification; `transmit_active` and `capture_active` are observably independent at the system boundary; diagnostics sanitizer rejects raw key payloads; UI capability badge matches the active capability; release readiness record carries the live-measurement evidence per RR-PTT-001..008. -- Evidence: SYS.4 verification report - -| SysDes Range | SYS.4 Coverage | -|---|---| -| SysDes-133 through SysDes-141 | SYS4-SIV-015 | -| SysDes-142 through SysDes-148 | SYS4-SIV-016 | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | - - -## Baseline Candidate 0.9.3 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.3 | 2026-05-15 | Added desktop PTT system-integration verification item SYS4-SIV-016 covering SysDes-142..148 across Windows, macOS, and GNOME-on-Wayland Linux reference hosts. | - - -## 10. Android P0 System Integration Verification Addendum - -SYS4-SIV-015 (Platform Decision gate) is strengthened to require the -Android-specific evidence below. Two new SYS.4 entries are added. - -**SYS4-SIV-015 (strengthened — Android target gate)**: In addition to -the original platform-baseline checks, the Android target gate now -requires: - -- A boot + connect + voice-channel run on a physical Android 9 (API 28) device per DEC-004 / SysRS-288. -- AAB upload acceptance on the Play Console Internal Testing track (or `bundletool` equivalent) per SRS-119 / SRS-188. -- Foreground service surviving lock-screen for ≥ 10 minutes per SRS-111. -- AudioManager mode snapshot/restore verified via `dumpsys audio` per SRS-208 / SysRS-305. -- Evidence: System integration result + Play Console acceptance record + dumpsys traces. - -**SYS4-SIV-017**: Verify Android in-call audio mode round-trip with Bluetooth SCO route awareness. - -- Source SysDes: SysDes-133 through SysDes-148 (Android-specific subset), SysRS-305 -- Source SRS: SRS-208 -- Verification method: System integration test on a physical Android device with at least one Bluetooth headset -- Pass criteria: Pre-session `AudioManager.mode` is captured; voice session sets `MODE_IN_COMMUNICATION`; disconnect restores the prior mode. Bluetooth headset connect/disconnect during a session does not crash the app and does not lock the audio route permanently (P0 minimum). Full SCO-route correctness is logged as a P1 follow-up. -- Evidence: Device test log + dumpsys + Bluetooth-event log - -**SYS4-SIV-018**: Verify Android AAB install via Play Internal Track or bundletool. - -- Source SysDes: SysDes-133 through SysDes-148 (Android-specific subset) -- Source SRS: SRS-119, SRS-187, SRS-188 -- Verification method: Release-pipeline integration test -- Pass criteria: The exact AAB produced by the release CI job is accepted by Play Console Internal Testing (or by `bundletool install-apks --connected-device`). The installed app boots on an API 28 device and a current-target-API device. Signing key fingerprint matches the CI release-key fingerprint. ABI splits exist for `{arm64-v8a, armeabi-v7a, x86_64}`. -- Evidence: Play Console acceptance screenshot + bundletool report + adb install log - -| SysDes Range | SYS.4 Coverage | -|---|---| -| SysDes-133 through SysDes-148 (Android subset) | SYS4-SIV-015 (strengthened), SYS4-SIV-017, SYS4-SIV-018 | - - -## Baseline Candidate 0.9.4 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.4 | 2026-05-18 | Strengthened SYS4-SIV-015 Android target gate (API 28 boot, FGS lock-screen longevity, AudioManager round-trip, Play AAB acceptance) and added SYS4-SIV-017 (in-call mode + Bluetooth SCO awareness) and SYS4-SIV-018 (AAB install via Play Internal Track / bundletool). | diff --git a/docs/verification/verification-master-plan.md b/docs/verification/verification-master-plan.md deleted file mode 100644 index fed024d..0000000 --- a/docs/verification/verification-master-plan.md +++ /dev/null @@ -1,83 +0,0 @@ - -# Chanora Verification Master Plan - -**Document type:** Verification Master Plan -**Version:** 0.9.2 -**Status:** Baseline Candidate -**Language:** English -**Product:** Chanora - -**Repo path:** `docs/verification/verification-master-plan.md` --- - -## 1. Purpose - -This document defines how Chanora verification documents relate to the engineering hierarchy. - -Core engineering hierarchy: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -``` - -Verification work products are downstream evidence-producing artifacts and do not replace the hierarchy. - -## 2. Verification Layers - -| Process | Verification target | Direct verification source | Purpose | -|---|---|---|---| -| SWE.4 | Software units | SDD | Verify software units against detailed design | -| SWE.5 | Integrated software elements | SAD and SDD | Verify software architecture integration, interfaces, dynamic behavior, and component interaction | -| SWE.6 | Fully integrated software | SRS | Verify integrated software satisfies software requirements | -| SYS.4 | Integrated application system elements | SysDes | Verify system elements integrate according to system architecture | - -## 3. Verification Flow - -```text -SDD -> SWE.4 Unit Verification -SAD + SDD -> SWE.5 Software Integration Verification -SRS -> SWE.6 Software Verification -SysDes -> SYS.4 System Integration Verification -``` - -## 4. Regression Rule - -A change in any design or requirement artifact shall trigger impact analysis for the corresponding verification layer: - -| Changed artifact | Verification impact | -|---|---| -| SDD | SWE.4 and SWE.5 impact analysis | -| SAD | SDD, SWE.5, and possibly SWE.4 impact analysis | -| SRS | SAD, SDD, SWE.6, and related lower-level verification impact analysis | -| SysDes | SRS/SAD/SDD impact analysis and SYS.4 impact analysis | -| SysRS | SysDes/SRS/SAD/SDD impact analysis and system/software verification impact analysis | - -## 5. Required Verification Reports - -| Report | Source | -|---|---| -| Unit Verification Summary Report | SWE.4 | -| Software Integration Verification Summary Report | SWE.5 | -| Software Verification Summary Report | SWE.6 | -| System Integration Verification Summary Report | SYS.4 | -| Regression Verification Report | Any affected verification layer | -| Problem Resolution Report | Failed verification requiring defect handling | - -## 6. Change History - -| Version | Date | Description | -|---|---|---| -| 0.1.0 | 2026-05-14 | Initial verification master plan covering SWE.4, SWE.5, SWE.6, and SYS.4. | - - -## Baseline Candidate 0.9.1 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. | - - -## Baseline Candidate 0.9.2 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. | diff --git a/docs/verification/windows-p0-acceptance.md b/docs/verification/windows-p0-acceptance.md deleted file mode 100644 index 48099c5..0000000 --- a/docs/verification/windows-p0-acceptance.md +++ /dev/null @@ -1,246 +0,0 @@ -# Windows P0 acceptance — human-must test cases (v1.0.0-rc.8) - -This document captures the human-side verification pass for the -Windows P0 ship of Chanora. Automated tests (cargo + flutter -analyze + windows-smoke.cmd) sign off the mechanical side; this -checklist signs off the user-experience side. A failure on any -row blocks the rc.8 tag. - -Source: this checklist supersedes the inline plan in the -conversation that produced the v1.0.0-rc.8 baseline. The auto-test -sign-off lives in this document's "Auto-test sign-off" section. - - -## 0. Pre-flight - -| # | Step | Expected | -|---|---|---| -| 0.1 | RDP into `100.84.219.45` as `admin` / `jkorisno1` | Desktop visible | -| 0.2 | Wipe stale install: delete `%LOCALAPPDATA%\app.chanora\` and `%APPDATA%\app.chanora\` if they exist | First-launch from clean state | -| 0.3 | Launch `C:\Users\admin\chanora\apps\chanora_flutter\build\windows\x64\runner\Release\chanora_flutter.exe` | Window opens, no crash | -| 0.4 | Open About / version label | Shows **`v1.0.0-rc.8`** (not rc.1) | -| 0.5 | Open `C:\Users\admin\AppData\Local\app.chanora\chanora_flutter\logs\chanora.log` | Contains `bridge initialised`, `log file path …`, `identity store initialised`, `bookmark store initialised`. File size <1 MB. | - - -## TC-1: Connect + identity persistence (DEC-006, SRS-201) - -| # | Step | Expected | -|---|---|---| -| 1.1 | Enter `cn.teamspeak.app` (or your own test server), nickname, blank password | "Connect" button enabled | -| 1.2 | Click Connect | Server snapshot appears: channel tree on left, client list visible | -| 1.3 | Note the connected server name + the channel tree | Tree is sorted (parents above children); no duplicate roots | -| 1.4 | Disconnect, reconnect with the same nickname | Server-visible UID is the same as previous session (identity persisted) | -| 1.5 | Disconnect | Returns to connect form, no error | - - -## TC-2: Voice channel join (SRS-204, SDD-094) - -| # | Step | Expected | -|---|---|---| -| 2.1 | After connecting, observe the UI | **No "Start audio" button anywhere** | -| 2.2 | Click a non-default voice channel in the tree | Voice Bar widget appears at top | -| 2.3 | Voice Bar shows: channel-name pill on left, speaker-mute + mic-mute on right, mode badge ("PTT"), capability badge — expected `L2GlobalHoldToTalk (raw-input)` or `L3GlobalWithMouseButtons (raw-input)` after a successful Raw Input register | All five visible; capability NOT `L0Focused` on this Win 11 host | -| 2.4 | Tap a different voice channel | Voice Bar's channel-name pill updates to the new channel; other clients see us move | -| 2.5 | There is **no** "Leave voice" button | TS3 model: you are always in *some* channel | - - -## TC-3: PTT mode press / release (SDD-088, SDD-096, SAD-083) - -| # | Step | Expected | -|---|---|---| -| 3.1 | In a voice channel, click the gear "Voice settings" | Dialog opens with three mode radio rows (PTT selected, Voice activity disabled "Coming soon"), bind-key button, release-tail slider at 200 ms | -| 3.2 | Click "Bind PTT key", press Space, observe Captured value, click Save | "Captured: **Space**" (not blank); after Save the Voice Bar's PTT line reads **"PTT: Space"** + release tail value | -| 3.3 | Press and hold Space, watch the stats line | Within ~100 ms: **"Mic on"** appears; level meter goes active | -| 3.4 | Release Space | After ~200 ms: **"Mic off"** appears; level meter returns to idle | -| 3.5 | Repeat 3.3–3.4 ten times rapidly | Each press toggles Mic on/off; no stuck-on state | -| 3.6 | Hold Space for 60 seconds continuously while saying something | **Mic stays on the entire time** (watchdog is disabled per DEC-031; no mid-sentence cut-off) | -| 3.7 | Alt-tab to another application, press Space (no mouse focus on chanora) | Mic on toggles even though chanora is not focused (verifies L2/L3 global path); other clients hear you | - - -## TC-4: Release tail (SDD-096, SRS-206) - -| # | Step | Expected | -|---|---|---| -| 4.1 | Open Voice settings, slide release tail to 0 ms, save | Slider shows "0 ms" | -| 4.2 | Hold Space briefly then release | "Mic off" appears within ~100 ms of release | -| 4.3 | Set release tail to 500 ms, save | Slider shows "500 ms" | -| 4.4 | Hold Space briefly then release | "Mic on" persists for ~500 ms after release, then "Mic off" | -| 4.5 | Set release tail back to 200 ms | Slider shows "200 ms" | - - -## TC-5: Continuous mode (SAD-083, SRS-205, regression: DEC-031) - -| # | Step | Expected | -|---|---|---| -| 5.1 | Open Voice settings → select "Continuous" radio → Save | Mode badge reads "Continuous"; **no "PTT: …" line**; **no release-tail line**; **no capability badge** (all PTT-only surfaces hidden) | -| 5.2 | Observe the stats line | "Mic on" immediately and **stays on** indefinitely | -| 5.3 | Wait 60 seconds continuously | **Mic stays on** the whole time (the old bug — watchdog disabling Continuous after 30 s — must not reproduce) | -| 5.4 | Switch back to PTT mode | Mode badge reads "PTT: Space"; PTT-only lines reappear; Mic off (no key held) | - - -## TC-6: Mic mute toggle (SRS-207, regression: log spam) - -| # | Step | Expected | -|---|---|---| -| 6.1 | In Continuous mode, click the mic-mute icon | Icon toggles to crossed-out; Mic shows off immediately | -| 6.2 | Have a second client check our status | Other client sees a microphone-off icon next to your nickname | -| 6.3 | Wait 30 seconds while muted, then check log file size | `chanora.log` stays <500 KB (no "Sending audio while muted" flood) | -| 6.4 | Click mic-mute again to unmute | Icon clears; Mic returns to on | -| 6.5 | In PTT mode with key held, click mic-mute | Mic immediately goes off mid-press; key release is ignored as long as muted | -| 6.6 | Unmute, key still held | Mic returns to on | - - -## TC-7: Speaker mute (server-broadcast) - -| # | Step | Expected | -|---|---|---| -| 7.1 | Have a second client talk to you | You hear them | -| 7.2 | Click speaker-mute (headset icon) | Icon toggles; their voice is silent | -| 7.3 | Other client checks our status | They see a headset-off icon next to our nickname | -| 7.4 | Click speaker-mute again | Voice returns | - - -## TC-8: Binding persistence across restart (SDD-095) - -| # | Step | Expected | -|---|---|---| -| 8.1 | Bind PTT to F10 → Save | Voice Bar shows "PTT: F10" | -| 8.2 | Close the app entirely | Window dismissed | -| 8.3 | Relaunch | Connect form appears | -| 8.4 | Connect + join a voice channel | Voice Bar shows **"PTT: F10"** (binding survived restart) | -| 8.5 | Press F10 | Mic on | - - -## TC-9: Binding before voice-join (SDD-094 follow-up) - -| # | Step | Expected | -|---|---|---| -| 9.1 | Wipe storage again (steps 0.2) | Clean state | -| 9.2 | Launch, connect, but do not join a voice channel yet | Channel tree visible | -| 9.3 | Open Voice settings, bind a key, Save | No `audio not started` error | -| 9.4 | Join a voice channel | Voice Bar reflects the binding | - - -## TC-10: No-permission channel rejection (issue 3 from rc.7 review) - -| # | Step | Expected | -|---|---|---| -| 10.1 | Identify a channel where your account lacks join permission | Server tree shows it as locked or similar | -| 10.2 | Tap it | After ~1.5 s, **red error banner** appears: "channel move rejected by server (no permission, wrong password, or channel full)" | -| 10.3 | Voice Bar's channel-name pill does **not** update | We did NOT join the channel locally | -| 10.4 | Other clients confirm we are NOT in the requested channel | Server-side reality matches the error banner | - - -## TC-11: Reconnect (real disconnect, not transient blip) - -| # | Step | Expected | -|---|---|---| -| 11.1 | Connect, join a voice channel | Voice Bar visible | -| 11.2 | Force a hard disconnect (server-side kick, firewall block, or `nm-cli con down` on Linux RDP host) | UI shows red "Connection lost" banner with a spinning indicator and reconnect attempt counter | -| 11.3 | Restore network | Reconnect succeeds; voice channel rejoined automatically; banner disappears | - - -## TC-12: Diagnostic export + privacy (DEC-027) - -| # | Step | Expected | -|---|---|---| -| 12.1 | Trigger a settings change (e.g. toggle mode) | Activity in log | -| 12.2 | Trigger the diagnostic export (if a button exists) or copy `%LOCALAPPDATA%\app.chanora\chanora_flutter\logs\chanora.log` | Multi-line text | -| 12.3 | Read it — privacy invariant | Contains `capability_level`, `backend_id`, `bound_input_class` (`keyboard` / `mouse-side-button`); **does NOT** contain any `vk`, `scan_code`, `keysym`, the actual key label, or any timing sequence of presses | -| 12.4 | File size at end of session | <5 MB (rotation: previous session is at `chanora.log.1`; the one before at `chanora.log.2`) | - - -## TC-13: PTT bind dialog labels (regression) - -| # | Step | Expected | -|---|---|---| -| 13.1 | Open binding dialog | Initial state: "Captured: " is blank or shows a placeholder | -| 13.2 | Press Space | "Captured: **Space**" (not blank — the rc.7 regression) | -| 13.3 | Press Enter | "Captured: Enter" | -| 13.4 | Press Tab | "Captured: Tab" | -| 13.5 | Press A | "Captured: A" | -| 13.6 | Press F12 | "Captured: F12" | -| 13.7 | Press Shift alone | Captured field unchanged (modifier-only press ignored) | -| 13.8 | Press a mouse side button (Mouse4 / Back) | "Captured: mouse-side-button:8" | - - -## TC-14: Capability badge gating - -| # | Step | Expected | -|---|---|---| -| 14.1 | In PTT mode | Capability badge visible (`L2GlobalHoldToTalk (raw-input)` or similar) | -| 14.2 | Switch to Continuous mode | **Capability badge disappears** (no info-icon, no level label) | -| 14.3 | Switch to "Voice activity (coming soon)" | Cannot select (disabled); confirms the radio row is non-interactive | - - -## TC-15: Indicator label (regression) - -| # | Step | Expected | -|---|---|---| -| 15.1 | In any mode, look at the stats line | Reads "Mic on" / "Mic off" (mode-neutral); **not** "PTT on" / "PTT off" | - - -## Auto-test sign-off - -These rows do not require human interaction. The values are filled -in from CI / local invocation. - -| Layer | Result on Linux | Result on Korean Win 11 | -|---|---|---| -| `cargo check --workspace` | clean | clean | -| `cargo test --workspace --lib` | 80 / 0 / 3 | 126 / 0 / 1 | -| `flutter analyze` | clean (6 pre-existing Radio.groupValue infos) | n/a | -| `python3 tools/validate_docs.py` | strict layered sourcing OK; pre-existing 35-filename warning | n/a | -| `tools/windows-smoke.cmd` | n/a | exit 0 | - -The Windows host runs 44 more tests than Linux because of the -`#[cfg(target_os = "windows")]`-gated PTT-backend, dispatcher, and -full-chain tests in `crates/chanora_audio/src/ptt_backends/windows.rs` -and `core/chanora_core/src/ptt.rs::windows_full_chain_tests`. - - -## Sign-off form - -``` -chanora v1.0.0-rc.8 — Windows P0 acceptance -Host: Korean Win 11 (HP LAPTOP-37KAQO05, ko-KR locale) -Tester: ______________________ -Date: ______________________ -Build: chanora_flutter.exe @ ______________________ - chanora_bridge.dll @ ______________________ - data\app.so @ ______________________ - -TC-1 Connect + identity persistence [ pass / fail ] notes: -TC-2 Voice channel join [ pass / fail ] notes: -TC-3 PTT press / release [ pass / fail ] notes: -TC-4 Release tail [ pass / fail ] notes: -TC-5 Continuous mode [ pass / fail ] notes: -TC-6 Mic mute [ pass / fail ] notes: -TC-7 Speaker mute [ pass / fail ] notes: -TC-8 Binding persistence across restart [ pass / fail ] notes: -TC-9 Binding before voice-join [ pass / fail ] notes: -TC-10 No-permission channel rejection [ pass / fail ] notes: -TC-11 Reconnect [ pass / fail ] notes: -TC-12 Diagnostic export + privacy [ pass / fail ] notes: -TC-13 PTT bind dialog labels [ pass / fail ] notes: -TC-14 Capability badge gating [ pass / fail ] notes: -TC-15 Indicator label [ pass / fail ] notes: - -Overall result: [ rc.8 PASS / rc.8 FAIL ] -Sign: ______________________ -``` - - -## Known gaps (not blockers) - -- **macOS / iOS / Linux** P0 acceptance is NOT covered here; this - document is Windows-only. Tagging rc.8 ships Linux from a separate - pass and remains Windows-gated for macOS / iOS / Android. -- **VAD** (`TransmitMode::VoiceActivity`) is intentionally disabled - per DEC-030 (deferred to P1). UI shows it as a "Coming soon" radio - row. -- **Missed-key-up watchdog** is disabled on P0 per DEC-031 (long PTT - speech would have been cut off at 30 s). P1 reintroduces a - redesigned variant. -- **Audio level meter** is binary (`pttActive` only). Real RMS meter - is a P1 follow-up.