From bba6273af737185abe587ac696c073a220e3173c Mon Sep 17 00:00:00 2001 From: Edison Jwa Date: Sat, 13 Jun 2026 03:32:33 +0900 Subject: [PATCH] refactor: restructure docs as submodule, add dev-docs/ and AGENTS.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move ASPICE docs to chanoraapp/docs submodule at docs/ - Move development docs to dev-docs/ (superpowers, offline-knowledge, impl-mapping) - Add AGENTS.md with project conventions for AI agents - Add impl-mapping.md (SAD component → source file mapping) - Archive completed plans to dev-docs/superpowers/plans/_archived/ - Remove AGENTS.md from .gitignore (now tracked) --- .gitignore | 1 - .gitmodules | 3 + AGENTS.md | 111 + dev-docs/impl-mapping.md | 40 + .../implementation-status-2026-05-28.md | 0 .../offline-knowledge/README.md | 0 .../offline-knowledge/coverage-analysis.md | 0 .../offline-knowledge/doc-quality-analysis.md | 0 .../offline-knowledge/docs-code-mismatch.md | 0 .../docs-link-not-covered.md | 0 .../offline-knowledge/docs-out-of-date.md | 0 .../offline-knowledge/function-inventory.md | 0 .../offline-knowledge/link-coverage-report.md | 0 .../reviews/coverage-analysis-review.md | 0 .../reviews/coverage-docquality-review.md | 0 .../reviews/doc-quality-review.md | 0 .../reviews/docs-code-mismatch-review.md | 0 .../reviews/docs-link-not-covered-review.md | 0 .../reviews/docs-out-of-date-review.md | 0 .../reviews/external-docs-review.md | 0 .../reviews/external-index-review.md | 0 .../reviews/final-fixes-review.md | 0 .../reviews/function-inventory-review.md | 0 .../reviews/link-coverage-review.md | 0 .../reviews/link-reports-review.md | 0 .../reviews/mismatch-outofdate-review.md | 0 {docs => dev-docs}/release/ios-build.md | 0 ...026-05-28-chanora-server-prefetch-crate.md | 0 .../2026-05-28-server-resolution-prefetch.md | 0 .../plans/2026-06-06-chat-panel-switching.md | 0 .../plans/2026-06-08-core-internal-split.md | 0 ...2026-06-08-maintainability-continuation.md | 0 .../plans/2026-06-13-documentation-site.md | 1486 +++ .../_archived}/2026-05-29-dv-evidence-pack.md | 0 .../2026-05-29-finish-dv-document-tree.md | 0 ...05-29-state-sync-ui-settings-validation.md | 0 .../2026-05-29-swe2-swe3-baselines.md | 0 ...28-chanora-server-prefetch-crate-design.md | 0 ...05-28-server-resolution-prefetch-design.md | 0 ...tate-sync-ui-settings-validation-design.md | 0 ...26-06-05-adaptive-3-panel-layout-design.md | 0 ...-08-maintainability-continuation-design.md | 0 .../2026-06-09-poke-without-message-design.md | 0 .../2026-06-13-documentation-site-design.md | 472 + docs | 1 + docs/architecture/desktop-ptt-architecture.md | 43 - docs/architecture/file-transfer-design.md | 737 -- .../file-transfer-implementation-plan.md | 1315 -- docs/architecture/file-transfer-research.md | 770 -- docs/architecture/sad.md | 190 - docs/architecture/sdd.md | 161 - docs/architecture/sysdes.md | 21 - docs/governance/baseline-approval-record.md | 32 - .../baseline-candidate-validation-report.md | 38 - docs/governance/decision-impact-assessment.md | 18 - docs/governance/document-index.md | 36 - docs/governance/document-naming-convention.md | 33 - docs/governance/document-review-report.md | 37 - .../git-commit-message-convention.md | 21 - .../maintainability-review-2026-06-08.md | 99 - docs/governance/path-migration-map.md | 18 - docs/governance/product-decision-register.md | 25 - .../repo-format-validation-report.md | 22 - docs/governance/traceability-matrix.md | 73 - docs/i18n/localization-architecture.md | 44 - .../legal/trademark-and-attribution-review.md | 47 - docs/material3-guideline.md | 93 - .../external/respeak-overview.md | 280 - .../external/teaspeak-overview.md | 392 - docs/offline-knowledge/external/yatqa-de.md | 348 - docs/offline-knowledge/external/yatqa-en.md | 348 - docs/privacy/privacy-policy.md | 51 - .../aspice-swe2-swe3-integration-note.md | 28 - docs/references/external-references.md | 21 - docs/release/dv-waiver-register.md | 36 - docs/release/platform-release-policy.md | 26 - .../release-readiness-go-nogo-record.md | 105 - docs/requirements/srs.md | 22 - docs/requirements/sysrs.md | 22 - .../dependency-and-supply-chain-report.md | 43 - .../diagnostic-redaction-audit-report.md | 31 - docs/security/flutter-license-inventory.md | 5477 -------- docs/security/license-inventory.md | 10970 ---------------- docs/security/secure-storage-audit-report.md | 31 - .../security-privacy-legal-guideline.md | 63 - docs/security/threat-model.md | 33 - docs/srs.md | 2850 ---- docs/sysdes.md | 3047 ----- docs/sysrs.md | 2014 --- docs/ui-ux/adaptive-layout-platform-guide.md | 27 - docs/ui-ux/material3-component-catalog.md | 38 - docs/ui-ux/material3-design-tokens.md | 21 - docs/ui-ux/material3-guideline.md | 8 - .../swe4-unit-verification-plan.md | 60 - ...-software-integration-verification-plan.md | 71 - .../swe6-software-verification-plan.md | 62 - ...s4-system-integration-verification-plan.md | 58 - docs/verification/verification-master-plan.md | 91 - 98 files changed, 2113 insertions(+), 30548 deletions(-) create mode 100644 AGENTS.md create mode 100644 dev-docs/impl-mapping.md rename {docs => dev-docs}/implementation-status-2026-05-28.md (100%) rename {docs => dev-docs}/offline-knowledge/README.md (100%) rename {docs => dev-docs}/offline-knowledge/coverage-analysis.md (100%) rename {docs => dev-docs}/offline-knowledge/doc-quality-analysis.md (100%) rename {docs => dev-docs}/offline-knowledge/docs-code-mismatch.md (100%) rename {docs => dev-docs}/offline-knowledge/docs-link-not-covered.md (100%) rename {docs => dev-docs}/offline-knowledge/docs-out-of-date.md (100%) rename {docs => dev-docs}/offline-knowledge/function-inventory.md (100%) rename {docs => dev-docs}/offline-knowledge/link-coverage-report.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/coverage-analysis-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/coverage-docquality-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/doc-quality-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/docs-code-mismatch-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/docs-link-not-covered-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/docs-out-of-date-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/external-docs-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/external-index-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/final-fixes-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/function-inventory-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/link-coverage-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/link-reports-review.md (100%) rename {docs => dev-docs}/offline-knowledge/reviews/mismatch-outofdate-review.md (100%) rename {docs => dev-docs}/release/ios-build.md (100%) rename {docs => dev-docs}/superpowers/plans/2026-05-28-chanora-server-prefetch-crate.md (100%) rename {docs => dev-docs}/superpowers/plans/2026-05-28-server-resolution-prefetch.md (100%) rename {docs => dev-docs}/superpowers/plans/2026-06-06-chat-panel-switching.md (100%) rename {docs => dev-docs}/superpowers/plans/2026-06-08-core-internal-split.md (100%) rename {docs => dev-docs}/superpowers/plans/2026-06-08-maintainability-continuation.md (100%) create mode 100644 dev-docs/superpowers/plans/2026-06-13-documentation-site.md rename {docs/superpowers/plans => dev-docs/superpowers/plans/_archived}/2026-05-29-dv-evidence-pack.md (100%) rename {docs/superpowers/plans => dev-docs/superpowers/plans/_archived}/2026-05-29-finish-dv-document-tree.md (100%) rename {docs/superpowers/plans => dev-docs/superpowers/plans/_archived}/2026-05-29-state-sync-ui-settings-validation.md (100%) rename {docs/superpowers/plans => dev-docs/superpowers/plans/_archived}/2026-05-29-swe2-swe3-baselines.md (100%) rename {docs => dev-docs}/superpowers/specs/2026-05-28-chanora-server-prefetch-crate-design.md (100%) rename {docs => dev-docs}/superpowers/specs/2026-05-28-server-resolution-prefetch-design.md (100%) rename {docs => dev-docs}/superpowers/specs/2026-05-29-state-sync-ui-settings-validation-design.md (100%) rename {docs => dev-docs}/superpowers/specs/2026-06-05-adaptive-3-panel-layout-design.md (100%) rename {docs => dev-docs}/superpowers/specs/2026-06-08-maintainability-continuation-design.md (100%) rename {docs => dev-docs}/superpowers/specs/2026-06-09-poke-without-message-design.md (100%) create mode 100644 dev-docs/superpowers/specs/2026-06-13-documentation-site-design.md create mode 160000 docs delete mode 100644 docs/architecture/desktop-ptt-architecture.md delete mode 100644 docs/architecture/file-transfer-design.md delete mode 100644 docs/architecture/file-transfer-implementation-plan.md delete mode 100644 docs/architecture/file-transfer-research.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/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/maintainability-review-2026-06-08.md delete mode 100644 docs/governance/path-migration-map.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/traceability-matrix.md delete mode 100644 docs/i18n/localization-architecture.md delete mode 100644 docs/legal/trademark-and-attribution-review.md delete mode 100644 docs/material3-guideline.md delete mode 100644 docs/offline-knowledge/external/respeak-overview.md delete mode 100644 docs/offline-knowledge/external/teaspeak-overview.md delete mode 100644 docs/offline-knowledge/external/yatqa-de.md delete mode 100644 docs/offline-knowledge/external/yatqa-en.md 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/dv-waiver-register.md delete mode 100644 docs/release/platform-release-policy.md delete mode 100644 docs/release/release-readiness-go-nogo-record.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.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/srs.md delete mode 100644 docs/sysdes.md delete mode 100644 docs/sysrs.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/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 diff --git a/.gitignore b/.gitignore index e8fde8c..900044b 100644 --- a/.gitignore +++ b/.gitignore @@ -125,7 +125,6 @@ opencode.json /apps/chanora_flutter/macos/Frameworks/ .opencode/ .omo/ -AGENTS.md Screenshot 2026-05-17 at 22.23.07.png # Xcode archive / export bundles (generated by Product > Archive > Distribute) diff --git a/.gitmodules b/.gitmodules index fd080c9..f49ef9d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "silero-coreml"] path = silero-coreml url = git@github.com:chanoraapp/silero-coreml.git +[submodule "docs"] + path = docs + url = git@github.com:chanoraapp/docs.git diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..55e0c59 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,111 @@ +# AGENTS.md — Chanora Project Conventions + +## Project Overview + +Chanora is a cross-platform voice client (Flutter + Rust) targeting TeamSpeak-compatible servers. The project follows ASPICE engineering processes with full traceability from system requirements through verification. + +## Repository Structure + +``` +chanora/ ← Code repo (this one) +├── docs/ → chanoraapp/docs ← Git submodule: ASPICE docs, Docusaurus doc site +├── dev-docs/ ← Local-only development docs +│ ├── superpowers/ ← AI agent specs and plans +│ │ ├── specs/ ← Feature/design specs (active) +│ │ └── plans/ ← Implementation plans (active) +│ │ └── _archived/ ← Completed plans +│ ├── offline-knowledge/ ← Doc maintenance tools, link coverage +│ ├── implementation-status-* ← Code state snapshots +│ └── release/ios-build.md ← Operational build instructions +├── apps/chanora_flutter/ ← Flutter application +├── core/chanora_core/ ← Rust core API + orchestration +├── crates/ ← Rust crates (protocol, audio, state, etc.) +└── dev-docs/impl-mapping.md ← SAD component → source file mapping +``` + +## Documentation Two-Repo Model + +**`docs/` is a git submodule** pointing to the `chanoraapp/docs` repository. It serves a Docusaurus doc site with ASPICE traceability. It is NOT a local directory you can freely create files in. + +### What lives where + +| Content | Location | Reason | +|---|---|---| +| SysRS, SysDes, SRS, SAD, SDD | `docs/` (submodule) | ASPICE baselines, served on doc site | +| Verification plans (SWE.4/5/6, SYS.4) | `docs/` (submodule) | ASPICE verification evidence | +| Governance, traceability, decision register | `docs/` (submodule) | ASPICE governance | +| Security, privacy, legal | `docs/` (submodule) | Stakeholder-facing | +| UI/UX guidelines, i18n architecture | `docs/` (submodule) | Design references | +| Feature specs and implementation plans | `dev-docs/superpowers/` | Code-coupled, agent working files | +| Link coverage, doc quality analysis | `dev-docs/offline-knowledge/` | Maintenance tools | +| Implementation status snapshots | `dev-docs/` | Code state tracking | +| Source file path references | `dev-docs/impl-mapping.md` | Developer convenience, not ASPICE | + +### Rules for agents + +1. **Never create or edit files in `docs/`** without understanding it's a submodule. Changes there require committing in the `chanoraapp/docs` repo first, then updating the submodule pointer in this repo. + +2. **ASPICE documents do not contain code file paths.** ASPICE traces requirement IDs (e.g., `SysRS-233`, `SRS-045`, `SDD-MOD-009`), not source file paths. If you need to map a component to its source, use or update `dev-docs/impl-mapping.md`. + +3. **Specs and plans go in `dev-docs/superpowers/`.** Follow the naming convention: `YYYY-MM-DD--design.md` for specs, `YYYY-MM-DD-.md` for plans. + +4. **Completed plans move to `_archived/`.** Once a plan is fully implemented and verified, move it to `dev-docs/superpowers/plans/_archived/`. + +5. **Doc site uses Docusaurus.** The `chanoraapp/docs` repo uses Docusaurus 3.10 (Meta-maintained). Do not add MkDocs, mdBook, or other doc site generators. + +## ASPICE Traceability Chain + +```text +SysRS → SysDes → SRS → SAD (SWE.2) → SDD (SWE.3) → Verification + ↓ ↓ + SWE.4 (unit) SWE.4/5/6/SYS.4 +``` + +- Requirement IDs are the traceability mechanism, not file paths. +- Every downstream document must reference upstream IDs it traces from. +- Verification plans map to their upstream design/requirements level: + - SYS.4 ← SysDes, SysRS + - SWE.5 ← SAD (SWE.2) + - SWE.4 ← SDD (SWE.3) + - SWE.6 ← SRS +- Requirement IDs should be added to doc front matter `tags:` for traceability browsing. + +## Code Architecture + +| Component | Location | Responsibility | +|---|---|---| +| Flutter app shell | `apps/chanora_flutter/` | UI, Material 3, navigation, localization | +| Rust core | `core/chanora_core/` | Session orchestration, bridge events | +| Protocol adapter | `crates/chanora_protocol/` | TeamSpeak protocol via tsclientlib | +| State sync | `crates/chanora_state/` | Snapshots, deltas, reducers | +| Audio subsystem | `crates/chanora_audio/` | Capture, DSP, Opus, PTT | +| Storage | `crates/chanora_storage/` | Bookmarks, identity, encryption | +| Diagnostics | `crates/chanora_diagnostics/` | Redaction, logs, export | +| Resolver | `crates/chanora_resolver/` | SRV/TSDNS/DNS resolution | +| Prefetch | `crates/chanora_prefetch/` | Resolution warming, TTL cache | +| Bridge | `crates/chanora_bridge/` | Flutter/Rust typed DTO boundary | +| Cache | `crates/chanora_cache/` | Avatar/icon blob cache | + +## Coding Conventions + +- **Rust:** Follow workspace `Cargo.toml` structure. Run `cargo check`, `cargo clippy`, `cargo test` before committing. +- **Flutter:** Run `flutter analyze`, `flutter test` before committing. +- **No code comments** unless explicitly requested. +- **Git commits:** Follow convention in `docs/governance/git-commit-message-convention.md` (accessible via submodule). +- **Bridge boundary:** Flutter must not directly depend on protocol-library internals. All cross-boundary communication goes through `chanora_bridge` typed DTOs. + +## Verification Commands + +```bash +cargo check && cargo clippy && cargo test +cd apps/chanora_flutter && flutter analyze && flutter test +``` + +## Important References + +- Traceability matrix: `docs/governance/traceability-matrix.md` +- Decision register: `docs/governance/product-decision-register.md` +- Security guidelines: `docs/security/security-privacy-legal-guideline.md` +- Release readiness: `docs/release/release-readiness-go-nogo-record.md` +- Doc site repo: `chanoraapp/docs` (Docusaurus) +- Doc site local preview: `cd docs && npm run start` diff --git a/dev-docs/impl-mapping.md b/dev-docs/impl-mapping.md new file mode 100644 index 0000000..ddc0d64 --- /dev/null +++ b/dev-docs/impl-mapping.md @@ -0,0 +1,40 @@ +# SAD Component → Source File Mapping + +**Purpose:** Developer convenience mapping from ASPICE architecture components to source file locations. This is NOT an ASPICE document — it's a lookup for developers. + +## Component Mapping + +| SAD Component | Source Location | +|---|---| +| Flutter app shell | `apps/chanora_flutter/lib/main.dart`, services, widgets | +| Flutter service layer | `apps/chanora_flutter/lib/services/` | +| Flutter widget layer | `apps/chanora_flutter/lib/widgets/` | +| Bridge layer | `crates/chanora_bridge/src/api.rs`, `apps/chanora_flutter/lib/src/rust/` | +| Rust core | `core/chanora_core/src/lib.rs`, `events.rs`, `network_diagnostics.rs`, `ptt.rs` | +| Protocol adapter | `crates/chanora_protocol/src/` | +| State sync | `crates/chanora_state/src/lib.rs`, `channel_join.rs` | +| Audio subsystem | `crates/chanora_audio/src/` | +| Storage | `crates/chanora_storage/src/lib.rs` | +| Diagnostics | `crates/chanora_diagnostics/src/lib.rs` | +| Resolution and prefetch | `crates/chanora_resolver/src/lib.rs`, `crates/chanora_prefetch/src/lib.rs`, `prefetch_debouncer.dart` | +| Build and release hooks | `.github/workflows/`, `tools/`, platform project files | + +## SDD Module Mapping + +| SDD Module | Source Location | +|---|---| +| SDD-MOD-001 Flutter app bootstrap | `apps/chanora_flutter/lib/services/app_bootstrap.dart`, `main.dart` | +| SDD-MOD-002 Connect UI | `apps/chanora_flutter/lib/widgets/connect_widgets.dart` | +| SDD-MOD-003 Snapshot and channel UI | `snapshot_view.dart`, `snapshot_state_mapper.dart`, `channel_spacer.dart` | +| SDD-MOD-004 Chat UI | `chat_views.dart`, `bbcode_text.dart` | +| SDD-MOD-005 Voice UI | `voice_bar.dart`, `voice_compact.dart`, `voice_settings*.dart`, `voice_level_meter.dart`, `ptt_capability_badge.dart` | +| SDD-MOD-006 Platform services | `android_permissions_service.dart`, `ios_permissions_service.dart`, `audio_lifecycle_service.dart`, `back_intent_*`, `link_trust_service.dart` | +| SDD-MOD-007 Bridge API | `crates/chanora_bridge/src/api.rs`, generated Dart/Rust bridge files | +| SDD-MOD-008 Rust core supervisor | `core/chanora_core/src/lib.rs`, `events.rs`, `network_diagnostics.rs`, `ptt.rs` | +| SDD-MOD-009 Protocol adapter | `crates/chanora_protocol/src/` | +| SDD-MOD-010 State sync | `crates/chanora_state/src/lib.rs`, `channel_join.rs` | +| SDD-MOD-011 Audio subsystem | `crates/chanora_audio/src/` | +| SDD-MOD-012 Storage | `crates/chanora_storage/src/lib.rs` | +| SDD-MOD-013 Diagnostics | `crates/chanora_diagnostics/src/lib.rs` | +| SDD-MOD-014 Resolution and prefetch | `crates/chanora_resolver/src/lib.rs`, `crates/chanora_prefetch/src/lib.rs`, `prefetch_debouncer.dart` | +| SDD-MOD-015 Build and release hooks | `.github/workflows/`, `tools/`, platform project files | diff --git a/docs/implementation-status-2026-05-28.md b/dev-docs/implementation-status-2026-05-28.md similarity index 100% rename from docs/implementation-status-2026-05-28.md rename to dev-docs/implementation-status-2026-05-28.md diff --git a/docs/offline-knowledge/README.md b/dev-docs/offline-knowledge/README.md similarity index 100% rename from docs/offline-knowledge/README.md rename to dev-docs/offline-knowledge/README.md diff --git a/docs/offline-knowledge/coverage-analysis.md b/dev-docs/offline-knowledge/coverage-analysis.md similarity index 100% rename from docs/offline-knowledge/coverage-analysis.md rename to dev-docs/offline-knowledge/coverage-analysis.md diff --git a/docs/offline-knowledge/doc-quality-analysis.md b/dev-docs/offline-knowledge/doc-quality-analysis.md similarity index 100% rename from docs/offline-knowledge/doc-quality-analysis.md rename to dev-docs/offline-knowledge/doc-quality-analysis.md diff --git a/docs/offline-knowledge/docs-code-mismatch.md b/dev-docs/offline-knowledge/docs-code-mismatch.md similarity index 100% rename from docs/offline-knowledge/docs-code-mismatch.md rename to dev-docs/offline-knowledge/docs-code-mismatch.md diff --git a/docs/offline-knowledge/docs-link-not-covered.md b/dev-docs/offline-knowledge/docs-link-not-covered.md similarity index 100% rename from docs/offline-knowledge/docs-link-not-covered.md rename to dev-docs/offline-knowledge/docs-link-not-covered.md diff --git a/docs/offline-knowledge/docs-out-of-date.md b/dev-docs/offline-knowledge/docs-out-of-date.md similarity index 100% rename from docs/offline-knowledge/docs-out-of-date.md rename to dev-docs/offline-knowledge/docs-out-of-date.md diff --git a/docs/offline-knowledge/function-inventory.md b/dev-docs/offline-knowledge/function-inventory.md similarity index 100% rename from docs/offline-knowledge/function-inventory.md rename to dev-docs/offline-knowledge/function-inventory.md diff --git a/docs/offline-knowledge/link-coverage-report.md b/dev-docs/offline-knowledge/link-coverage-report.md similarity index 100% rename from docs/offline-knowledge/link-coverage-report.md rename to dev-docs/offline-knowledge/link-coverage-report.md diff --git a/docs/offline-knowledge/reviews/coverage-analysis-review.md b/dev-docs/offline-knowledge/reviews/coverage-analysis-review.md similarity index 100% rename from docs/offline-knowledge/reviews/coverage-analysis-review.md rename to dev-docs/offline-knowledge/reviews/coverage-analysis-review.md diff --git a/docs/offline-knowledge/reviews/coverage-docquality-review.md b/dev-docs/offline-knowledge/reviews/coverage-docquality-review.md similarity index 100% rename from docs/offline-knowledge/reviews/coverage-docquality-review.md rename to dev-docs/offline-knowledge/reviews/coverage-docquality-review.md diff --git a/docs/offline-knowledge/reviews/doc-quality-review.md b/dev-docs/offline-knowledge/reviews/doc-quality-review.md similarity index 100% rename from docs/offline-knowledge/reviews/doc-quality-review.md rename to dev-docs/offline-knowledge/reviews/doc-quality-review.md diff --git a/docs/offline-knowledge/reviews/docs-code-mismatch-review.md b/dev-docs/offline-knowledge/reviews/docs-code-mismatch-review.md similarity index 100% rename from docs/offline-knowledge/reviews/docs-code-mismatch-review.md rename to dev-docs/offline-knowledge/reviews/docs-code-mismatch-review.md diff --git a/docs/offline-knowledge/reviews/docs-link-not-covered-review.md b/dev-docs/offline-knowledge/reviews/docs-link-not-covered-review.md similarity index 100% rename from docs/offline-knowledge/reviews/docs-link-not-covered-review.md rename to dev-docs/offline-knowledge/reviews/docs-link-not-covered-review.md diff --git a/docs/offline-knowledge/reviews/docs-out-of-date-review.md b/dev-docs/offline-knowledge/reviews/docs-out-of-date-review.md similarity index 100% rename from docs/offline-knowledge/reviews/docs-out-of-date-review.md rename to dev-docs/offline-knowledge/reviews/docs-out-of-date-review.md diff --git a/docs/offline-knowledge/reviews/external-docs-review.md b/dev-docs/offline-knowledge/reviews/external-docs-review.md similarity index 100% rename from docs/offline-knowledge/reviews/external-docs-review.md rename to dev-docs/offline-knowledge/reviews/external-docs-review.md diff --git a/docs/offline-knowledge/reviews/external-index-review.md b/dev-docs/offline-knowledge/reviews/external-index-review.md similarity index 100% rename from docs/offline-knowledge/reviews/external-index-review.md rename to dev-docs/offline-knowledge/reviews/external-index-review.md diff --git a/docs/offline-knowledge/reviews/final-fixes-review.md b/dev-docs/offline-knowledge/reviews/final-fixes-review.md similarity index 100% rename from docs/offline-knowledge/reviews/final-fixes-review.md rename to dev-docs/offline-knowledge/reviews/final-fixes-review.md diff --git a/docs/offline-knowledge/reviews/function-inventory-review.md b/dev-docs/offline-knowledge/reviews/function-inventory-review.md similarity index 100% rename from docs/offline-knowledge/reviews/function-inventory-review.md rename to dev-docs/offline-knowledge/reviews/function-inventory-review.md diff --git a/docs/offline-knowledge/reviews/link-coverage-review.md b/dev-docs/offline-knowledge/reviews/link-coverage-review.md similarity index 100% rename from docs/offline-knowledge/reviews/link-coverage-review.md rename to dev-docs/offline-knowledge/reviews/link-coverage-review.md diff --git a/docs/offline-knowledge/reviews/link-reports-review.md b/dev-docs/offline-knowledge/reviews/link-reports-review.md similarity index 100% rename from docs/offline-knowledge/reviews/link-reports-review.md rename to dev-docs/offline-knowledge/reviews/link-reports-review.md diff --git a/docs/offline-knowledge/reviews/mismatch-outofdate-review.md b/dev-docs/offline-knowledge/reviews/mismatch-outofdate-review.md similarity index 100% rename from docs/offline-knowledge/reviews/mismatch-outofdate-review.md rename to dev-docs/offline-knowledge/reviews/mismatch-outofdate-review.md diff --git a/docs/release/ios-build.md b/dev-docs/release/ios-build.md similarity index 100% rename from docs/release/ios-build.md rename to dev-docs/release/ios-build.md diff --git a/docs/superpowers/plans/2026-05-28-chanora-server-prefetch-crate.md b/dev-docs/superpowers/plans/2026-05-28-chanora-server-prefetch-crate.md similarity index 100% rename from docs/superpowers/plans/2026-05-28-chanora-server-prefetch-crate.md rename to dev-docs/superpowers/plans/2026-05-28-chanora-server-prefetch-crate.md diff --git a/docs/superpowers/plans/2026-05-28-server-resolution-prefetch.md b/dev-docs/superpowers/plans/2026-05-28-server-resolution-prefetch.md similarity index 100% rename from docs/superpowers/plans/2026-05-28-server-resolution-prefetch.md rename to dev-docs/superpowers/plans/2026-05-28-server-resolution-prefetch.md diff --git a/docs/superpowers/plans/2026-06-06-chat-panel-switching.md b/dev-docs/superpowers/plans/2026-06-06-chat-panel-switching.md similarity index 100% rename from docs/superpowers/plans/2026-06-06-chat-panel-switching.md rename to dev-docs/superpowers/plans/2026-06-06-chat-panel-switching.md diff --git a/docs/superpowers/plans/2026-06-08-core-internal-split.md b/dev-docs/superpowers/plans/2026-06-08-core-internal-split.md similarity index 100% rename from docs/superpowers/plans/2026-06-08-core-internal-split.md rename to dev-docs/superpowers/plans/2026-06-08-core-internal-split.md diff --git a/docs/superpowers/plans/2026-06-08-maintainability-continuation.md b/dev-docs/superpowers/plans/2026-06-08-maintainability-continuation.md similarity index 100% rename from docs/superpowers/plans/2026-06-08-maintainability-continuation.md rename to dev-docs/superpowers/plans/2026-06-08-maintainability-continuation.md diff --git a/dev-docs/superpowers/plans/2026-06-13-documentation-site.md b/dev-docs/superpowers/plans/2026-06-13-documentation-site.md new file mode 100644 index 0000000..25e33c7 --- /dev/null +++ b/dev-docs/superpowers/plans/2026-06-13-documentation-site.md @@ -0,0 +1,1486 @@ +# Documentation Site & ASPICE Traceability Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Create a private MkDocs Material doc site with tag-based ASPICE traceability, hosted on Cloudflare Pages with access control, served from a git submodule. + +**Architecture:** The docs repo (`chanora-docs`) is a standalone MkDocs Material project added as a git submodule at `docs/` in the code repo. A custom MkDocs plugin validates requirement ID traceability chains on every build. The code repo retains development-only docs in `dev-docs/`. + +**Tech Stack:** MkDocs Material, Python 3.12, MkDocs tags/git-revision-date-localized plugins, custom traceability plugin (~200 lines Python), GitHub Actions, Cloudflare Pages + Access, git submodules + +**Spec:** `dev-docs/superpowers/specs/2026-06-13-documentation-site-design.md` + +--- + +### Task 1: Create Docs Repo and MkDocs Configuration + +**Files:** +- Create: `mkdocs.yml` +- Create: `requirements.txt` +- Create: `pyproject.toml` +- Create: `docs/index.md` +- Create: `docs/.meta.yml` +- Create: `README.md` + +Note: This task creates the `chanora-docs` GitHub repo. The `chanora-docs` repo must be created on GitHub first (private repo), then cloned locally for these steps. + +- [ ] **Step 1: Create the private `chanora-docs` GitHub repo** + +```bash +gh repo create chanora-docs --private --description "Chanora engineering documentation with ASPICE traceability" +``` + +- [ ] **Step 2: Clone and initialize** + +```bash +git clone git@github.com:EdisonJwa/chanora-docs.git +cd chanora-docs +``` + +- [ ] **Step 3: Create `requirements.txt`** + +``` +mkdocs-material>=9.6.0 +mkdocs-git-revision-date-localized-plugin>=1.5.0 +``` + +- [ ] **Step 4: Create `pyproject.toml`** + +```toml +[project] +name = "chanora-docs" +version = "0.1.0" +description = "Chanora engineering documentation with ASPICE traceability" +requires-python = ">=3.12" +``` + +- [ ] **Step 5: Create `mkdocs.yml` with full configuration** + +```yaml +site_name: Chanora Engineering Docs +site_description: ASPICE-compliant engineering documentation with automated traceability +site_url: https://docs.chanora.dev + +repo_name: EdisonJwa/chanora-docs +repo_url: https://github.com/EdisonJwa/chanora-docs +edit_uri: edit/main/docs/ + +theme: + name: material + language: en + features: + - navigation.instant + - navigation.tracking + - navigation.tabs + - navigation.sections + - navigation.expand + - navigation.footer + - search.highlight + - search.suggest + - content.code.copy + - content.tabs.link + palette: + - media: "(prefers-color-scheme)" + toggle: + icon: material/brightness-auto + name: Switch to light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: deep purple + accent: purple + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: deep purple + accent: purple + toggle: + icon: material/brightness-4 + name: Switch to system preference + icon: + repo: fontawesome/brands/github + +plugins: + - search + - tags: + tags_allowed: + - sysrs + - sysdes + - srs + - sad + - sdd + - swe.1 + - swe.2 + - swe.3 + - swe.4 + - swe.5 + - swe.6 + - sys.4 + - requirements + - architecture + - verification + - governance + - security + - privacy + - legal + - release + - references + - ui-ux + - localization + - baseline + - draft + - candidate + - deferred + tags_file: tags.md + - git-revision-date-localized: + type: iso_date + enable_creation_date: true + - traceability: + strict: true + coverage_file: true + dashboard: true + +nav: + - Home: index.md + - Requirements: + - System Requirements (SysRS): requirements/sysrs.md + - System Design (SysDes): requirements/sysdes.md + - Software Requirements (SRS): requirements/srs.md + - Architecture & Design: + - Software Architecture (SWE.2 / SAD): architecture/sad.md + - Detailed Design (SWE.3 / SDD): architecture/sdd.md + - File Transfer Design: architecture/file-transfer-design.md + - File Transfer Research: architecture/file-transfer-research.md + - File Transfer Implementation Plan: architecture/file-transfer-implementation-plan.md + - Desktop PTT Architecture: architecture/desktop-ptt-architecture.md + - Verification: + - System Level: + - SYS.4 System Integration: verification/sys4-system-integration-verification-plan.md + - Software Integration: + - SWE.5 Software Integration: verification/swe5-software-integration-verification-plan.md + - Unit Level: + - SWE.4 Unit Verification: verification/swe4-unit-verification-plan.md + - Software Qualification: + - SWE.6 Software Verification: verification/swe6-software-verification-plan.md + - Master Plan: verification/verification-master-plan.md + - Governance: + - Document Index: governance/document-index.md + - Traceability Matrix: governance/traceability-matrix.md + - Decision Register: governance/product-decision-register.md + - Baseline Approval Record: governance/baseline-approval-record.md + - Baseline Candidate Validation: governance/baseline-candidate-validation-report.md + - Document Review Report: governance/document-review-report.md + - Document Naming Convention: governance/document-naming-convention.md + - Decision Impact Assessment: governance/decision-impact-assessment.md + - Git Commit Message Convention: governance/git-commit-message-convention.md + - Repo Format Validation: governance/repo-format-validation-report.md + - Path Migration Map: governance/path-migration-map.md + - Maintainability Review: governance/maintainability-review-2026-06-08.md + - Security & Privacy: + - Security Guidelines: security/security-privacy-legal-guideline.md + - Threat Model: security/threat-model.md + - Secure Storage Audit: security/secure-storage-audit-report.md + - Diagnostic Redaction Audit: security/diagnostic-redaction-audit-report.md + - Dependency & Supply Chain: security/dependency-and-supply-chain-report.md + - License Inventory: security/license-inventory.md + - Flutter License Inventory: security/flutter-license-inventory.md + - Privacy Policy: privacy/privacy-policy.md + - Legal Review: legal/trademark-and-attribution-review.md + - Release: + - Platform Release Policy: release/platform-release-policy.md + - Release Readiness (Go/No-Go): release/release-readiness-go-nogo-record.md + - DV Waiver Register: release/dv-waiver-register.md + - References: + - External References: references/external-references.md + - ASPICE SWE.2/SWE.3 Note: references/aspice-swe2-swe3-integration-note.md + - TeamSpeak Protocol Reference (EN): references/yatqa-en.md + - TeamSpeak Protocol Reference (DE): references/yatqa-de.md + - TeaSpeak Overview: references/teaspeak-overview.md + - ReSpeak Overview: references/respeak-overview.md + - UI/UX: + - Material 3 Guideline: ui-ux/material3-guideline.md + - Design Tokens: ui-ux/material3-design-tokens.md + - Component Catalog: ui-ux/material3-component-catalog.md + - Adaptive Layout Guide: ui-ux/adaptive-layout-platform-guide.md + - Localization: + - Localization Architecture: i18n/localization-architecture.md + +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - attr_list + - md_in_html + - tables + - toc: + permalink: true +``` + +- [ ] **Step 6: Create `docs/.meta.yml` (global defaults)** + +```yaml +status: draft +``` + +- [ ] **Step 7: Create `docs/index.md` (landing page)** + +```markdown +# Chanora Engineering Documentation + +**ASPICE-compliant engineering documentation with automated traceability** + +--- + +## Lifecycle Chain + +```text +SysRS → SysDes → SRS → SAD (SWE.2) → SDD (SWE.3) → Verification + ↓ ↓ + SWE.4 (unit) SWE.4/5/6/SYS.4 +``` + +## Quick Navigation + +- [System Requirements (SysRS)](requirements/sysrs.md) +- [System Design (SysDes)](requirements/sysdes.md) +- [Software Requirements (SRS)](requirements/srs.md) +- [Software Architecture (SAD)](architecture/sad.md) +- [Detailed Design (SDD)](architecture/sdd.md) +- [Verification Master Plan](verification/verification-master-plan.md) +- [Traceability Matrix](governance/traceability-matrix.md) +- [Document Index](governance/document-index.md) + +## Baseline Status + +| Document | Status | +|---|---| +| SysRS | Baseline | +| SysDes | Baseline | +| SRS | Baseline | +| SAD | Baseline candidate | +| SDD | Baseline candidate | +| Verification plans | Baseline candidate | +| Release readiness | No-Go | + +--- + +[View all tags →](tags.md) +``` + +- [ ] **Step 8: Create `README.md`** + +```markdown +# Chanora Engineering Docs + +ASPICE-compliant engineering documentation site for Chanora. + +## Local Development + +```bash +pip install -r requirements.txt +mkdocs serve +``` + +## Build + +```bash +mkdocs build --strict +``` + +## Traceability Validation + +```bash +python scripts/validate_traceability.py docs/ +``` + +## Deployment + +Deploys automatically to Cloudflare Pages on push to `main`. +``` + +- [ ] **Step 9: Create directory structure for docs** + +```bash +mkdir -p docs/{requirements,architecture,verification,governance,security,privacy,legal,release,references,ui-ux,i18n} +mkdir -p plugins/traceability +mkdir -p scripts +mkdir -p .github/workflows +``` + +- [ ] **Step 10: Commit** + +```bash +git add -A +git commit -m "chore: initialize MkDocs Material project with configuration and landing page" +``` + +--- + +### Task 2: Build Custom Traceability Plugin + +**Files:** +- Create: `plugins/traceability/__init__.py` +- Create: `plugins/traceability/traceability.py` +- Create: `tests/test_traceability.py` + +- [ ] **Step 1: Create plugin package init** + +```python +# plugins/traceability/__init__.py +from .traceability import TraceabilityPlugin + +def make_plugin(config, **kwargs): + return TraceabilityPlugin(config) +``` + +- [ ] **Step 2: Write the traceability plugin** + +```python +# plugins/traceability/traceability.py +"""MkDocs plugin for ASPICE requirement traceability validation.""" + +import json +import re +from collections import defaultdict +from pathlib import Path + +from mkdocs.plugins import BasePlugin +from mkdocs.structure.pages import Page + +REQUIREMENT_ID_PATTERNS = { + "sysrs": re.compile(r"SysRS-\d+"), + "sysdes": re.compile(r"SysDes-\d+"), + "srs": re.compile(r"SRS-\d+"), + "sdd_mod": re.compile(r"SDD-MOD-\d+"), + "dec": re.compile(r"DEC-\d+"), +} + +CHAINS = [ + ("sysrs", "sysdes"), + ("sysdes", "srs"), + ("srs", "sad"), + ("srs", "sdd"), + ("sad", "swe5"), + ("sdd", "swe4"), + ("srs", "swe6"), + ("sysdes", "sys4"), +] + + +class TraceabilityPlugin(BasePlugin): + config_scheme = ( + ("strict", {"type": bool, "default": True}), + ("coverage_file", {"type": bool, "default": True}), + ("dashboard", {"type": bool, "default": True}), + ) + + def __init__(self, config): + super().__init__(config) + self.defined_ids: dict[str, set[str]] = defaultdict(set) + self.referenced_ids: dict[str, set[str]] = defaultdict(set) + self.page_ids: dict[str, set[str]] = defaultdict(set) + self.page_src: dict[str, str] = {} + + def on_page_markdown(self, markdown: str, page: Page, config, files): + src_path = page.file.src_path + self.page_src[src_path] = src_path + + for pattern_name, pattern in REQUIREMENT_ID_PATTERNS.items(): + found = set(pattern.findall(markdown)) + if found: + self.page_ids[src_path].update(found) + + tags = page.meta.get("tags", []) + for tag in tags: + if isinstance(tag, str) and any( + tag.startswith(prefix) + for prefix in ["SysRS-", "SysDes-", "SRS-", "SDD-MOD-", "DEC-"] + ): + self.defined_ids[tag].add(src_path) + + for pattern_name, pattern in REQUIREMENT_ID_PATTERNS.items(): + for match in pattern.findall(markdown): + self.referenced_ids[match].add(src_path) + + return markdown + + def on_post_build(self, config): + orphans = [] + for req_id, pages in self.referenced_ids.items(): + if req_id not in self.defined_ids: + orphans.append((req_id, sorted(pages))) + + coverage = {} + for upstream, downstream in CHAINS: + upstream_ids = set() + for req_id, pages in self.defined_ids.items(): + if req_id.upper().startswith(upstream.upper()): + upstream_ids.add(req_id) + + downstream_refs = set() + for req_id, pages in self.referenced_ids.items(): + for page in pages: + if downstream in page.lower(): + downstream_refs.add(req_id) + + if upstream_ids: + covered = upstream_ids & downstream_refs + coverage[f"{upstream} -> {downstream}"] = { + "total": len(upstream_ids), + "covered": len(covered), + "percentage": round(100 * len(covered) / len(upstream_ids), 1) + if upstream_ids + else 0, + "orphaned": sorted(upstream_ids - covered), + } + + report = { + "chains": coverage, + "orphaned_references": [ + {"id": rid, "referenced_in": sorted(pages)} + for rid, pages in orphans + ], + } + + if self.config["coverage_file"]: + output_dir = Path(config["site_dir"]) + with open(output_dir / "traceability-coverage.json", "w") as f: + json.dump(report, f, indent=2) + + self._print_summary(report) + + if self.config["strict"] and (orphans or any( + c.get("orphaned") for c in coverage.values() + )): + import sys + print( + "\nERROR: Traceability validation failed. " + "Set strict: false to allow broken chains.", + file=sys.stderr, + ) + sys.exit(1) + + def _print_summary(self, report): + print("\n" + "=" * 60) + print("ASPICE Traceability Summary") + print("=" * 60) + for chain, data in report["chains"].items(): + status = "PASS" if not data["orphaned"] else "WARN" + print( + f" [{status}] {chain}: " + f"{data['covered']}/{data['total']} " + f"({data['percentage']}%)" + ) + if report["orphaned_references"]: + print(f"\n Orphaned references: {len(report['orphaned_references'])}") + for orphan in report["orphaned_references"][:10]: + print(f" - {orphan['id']} in {', '.join(orphan['referenced_in'])}") + if len(report["orphaned_references"]) > 10: + print( + f" ... and {len(report['orphaned_references']) - 10} more" + ) + print("=" * 60 + "\n") +``` + +- [ ] **Step 3: Write plugin test** + +```python +# tests/test_traceability.py +"""Tests for the traceability MkDocs plugin.""" + +import json +import tempfile +from pathlib import Path +from unittest.mock import MagicMock + +import pytest + +from traceability import TraceabilityPlugin, REQUIREMENT_ID_PATTERNS + + +def test_pattern_matches_sysrs(): + pattern = REQUIREMENT_ID_PATTERNS["sysrs"] + assert pattern.findall("This traces to SysRS-233 and SysRS-234") == [ + "SysRS-233", + "SysRS-234", + ] + + +def test_pattern_matches_srs(): + pattern = REQUIREMENT_ID_PATTERNS["srs"] + assert pattern.findall("Covers SRS-045 through SRS-053") == [ + "SRS-045", + "SRS-053", + ] + + +def test_pattern_matches_sdd_mod(): + pattern = REQUIREMENT_ID_PATTERNS["sdd_mod"] + assert pattern.findall("Module SDD-MOD-009 handles this") == ["SDD-MOD-009"] + + +def test_no_false_positives(): + pattern = REQUIREMENT_ID_PATTERNS["sysrs"] + assert pattern.findall("No requirements here") == [] + assert pattern.findall("sysrs-123 lowercase should not match") == [] + + +def test_plugin_stores_defined_ids(): + config = {"strict": False, "coverage_file": False, "dashboard": False} + plugin = TraceabilityPlugin(config) + + page = MagicMock() + page.meta = {"tags": ["SysRS-233", "swe.1", "baseline"]} + page.file.src_path = "requirements/sysrs.md" + + plugin.on_page_markdown("content", page, {}, None) + assert "SysRS-233" in plugin.defined_ids + + +def test_plugin_stores_referenced_ids(): + config = {"strict": False, "coverage_file": False, "dashboard": False} + plugin = TraceabilityPlugin(config) + + page = MagicMock() + page.meta = {"tags": ["swe.4"]} + page.file.src_path = "verification/swe4-unit-verification-plan.md" + + plugin.on_page_markdown( + "Verifies SDD-MOD-001, SDD-MOD-002, and SDD-MOD-003", + page, + {}, + None, + ) + assert "SDD-MOD-001" in plugin.referenced_ids + assert "SDD-MOD-002" in plugin.referenced_ids + assert "SDD-MOD-003" in plugin.referenced_ids +``` + +- [ ] **Step 4: Create directory structure and run tests** + +```bash +mkdir -p tests +pip install -r requirements.txt +cd plugins/traceability && python -m pytest ../../tests/test_traceability.py -v +``` + +Expected: 5 tests pass (some may fail if mkdocs is not installed in test environment — adjust imports as needed). + +- [ ] **Step 5: Commit** + +```bash +git add plugins/ tests/ +git commit -m "feat: add traceability plugin with requirement ID scanning and validation" +``` + +--- + +### Task 3: Build Standalone CI Validator + +**Files:** +- Create: `scripts/validate_traceability.py` + +- [ ] **Step 1: Write the standalone validator** + +```python +#!/usr/bin/env python3 +"""Standalone ASPICE traceability validator for CI. + +Usage: + python scripts/validate_traceability.py docs/ + +Exit codes: + 0 - All chains valid + 1 - Broken chains found +""" + +import re +import sys +from collections import defaultdict +from pathlib import Path + +REQUIREMENT_ID_PATTERNS = { + "sysrs": re.compile(r"SysRS-\d+"), + "sysdes": re.compile(r"SysDes-\d+"), + "srs": re.compile(r"SRS-\d+"), + "sdd_mod": re.compile(r"SDD-MOD-\d+"), + "dec": re.compile(r"DEC-\d+"), +} + +CHAINS = [ + ("sysrs", "sysdes"), + ("sysdes", "srs"), + ("srs", "sad"), + ("srs", "sdd"), + ("sad", "swe5"), + ("sdd", "swe4"), + ("srs", "swe6"), + ("sysdes", "sys4"), +] + + +def extract_front_matter(content: str) -> dict: + """Extract YAML front matter from markdown content.""" + if content.startswith("---"): + end = content.find("---", 3) + if end != -1: + return {"raw": content[3:end]} + return {} + + +def scan_docs(docs_dir: Path) -> dict: + """Scan all markdown files for requirement IDs.""" + defined_ids: dict[str, set[str]] = defaultdict(set) + referenced_ids: dict[str, set[str]] = defaultdict(set) + + for md_file in docs_dir.rglob("*.md"): + content = md_file.read_text(encoding="utf-8") + rel_path = str(md_file.relative_to(docs_dir)) + + # Extract tags from front matter + fm = extract_front_matter(content) + if "raw" in fm: + for line in fm["raw"].split("\n"): + if "tags:" in line: + for tag in re.findall(r"\b(?:SysRS|SysDes|SRS|SDD-MOD|DEC)-\d+", line): + defined_ids[tag].add(rel_path) + + # Find all requirement ID references in content + for pattern_name, pattern in REQUIREMENT_ID_PATTERNS.items(): + for match in pattern.findall(content): + referenced_ids[match].add(rel_path) + + return {"defined": defined_ids, "referenced": referenced_ids} + + +def validate(data: dict) -> list[dict]: + """Validate traceability chains.""" + issues = [] + + # Check for orphaned references + for req_id, pages in data["referenced"].items(): + if req_id not in data["defined"]: + issues.append({ + "type": "orphaned_reference", + "id": req_id, + "referenced_in": sorted(pages), + }) + + return issues + + +def print_report(issues: list[dict], data: dict) -> None: + """Print validation report.""" + print("=" * 60) + print("ASPICE Traceability Validation") + print("=" * 60) + + if not issues: + print(" [PASS] All requirement references have definitions") + else: + orphaned = [i for i in issues if i["type"] == "orphaned_reference"] + if orphaned: + print(f"\n [FAIL] {len(orphaned)} orphaned reference(s):") + for issue in orphaned[:20]: + print(f" - {issue['id']} referenced in {', '.join(issue['referenced_in'])}") + if len(orphaned) > 20: + print(f" ... and {len(orphaned) - 20} more") + + print("=" * 60) + + +def main(): + if len(sys.argv) < 2: + print(f"Usage: {sys.argv[0]} ", file=sys.stderr) + sys.exit(1) + + docs_dir = Path(sys.argv[1]) + if not docs_dir.is_dir(): + print(f"Error: {docs_dir} is not a directory", file=sys.stderr) + sys.exit(1) + + data = scan_docs(docs_dir) + issues = validate(data) + print_report(issues, data) + + sys.exit(1 if issues else 0) + + +if __name__ == "__main__": + main() +``` + +- [ ] **Step 2: Make script executable** + +```bash +chmod +x scripts/validate_traceability.py +``` + +- [ ] **Step 3: Create `docs/.meta.yml` and a test file to validate the script** + +```bash +mkdir -p docs/test +echo -e '---\ntags: [swe.1, SysRS-999]\n---\n\nTest doc referencing SysRS-999.' > docs/test/validation-test.md +python scripts/validate_traceability.py docs/ +``` + +Expected: Exit code 0 (SysRS-999 is defined and referenced in the same file, no orphans). + +- [ ] **Step 4: Remove test file and commit** + +```bash +rm -rf docs/test +git add scripts/ +git commit -m "feat: add standalone traceability validator for CI" +``` + +--- + +### Task 4: Set Up CI/CD Pipeline + +**Files:** +- Create: `.github/workflows/deploy.yml` +- Create: `wrangler.toml` + +- [ ] **Step 1: Create GitHub Actions workflow** + +```yaml +name: Build and Deploy Docs + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: pip + + - run: pip install -r requirements.txt + + - name: Validate traceability chains + run: python scripts/validate_traceability.py docs/ + + - name: Build doc site + run: mkdocs build --strict + + - if: github.event_name == 'push' && github.ref == 'refs/heads/main' + uses: cloudflare/wrangler-action@v3 + with: + command: pages deploy site --project-name=chanora-docs + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} +``` + +- [ ] **Step 2: Create Wrangler configuration** + +```toml +name = "chanora-docs" +compatibility_date = "2026-06-13" + +[site] +bucket = "./site" +``` + +- [ ] **Step 3: Commit** + +```bash +git add .github/ wrangler.toml +git commit -m "ci: add GitHub Actions workflow for build, validate, and Cloudflare Pages deploy" +``` + +--- + +### Task 5: Migrate ASPICE Docs to Docs Repo + +**Files:** +- Copy all ASPICE docs from `chanora/docs/` to `chanora-docs/docs/` +- Add YAML front matter to each migrated file + +Note: This task runs in the `chanora-docs` repo. The source files are in the main `chanora` repo at `chanora/docs/`. + +- [ ] **Step 1: Copy requirements docs** + +```bash +# From chanora-docs repo root: +# Copy canonical files (these ARE the docs, not path records) +cp ../chanora/docs/sysrs.md docs/requirements/sysrs.md +cp ../chanora/docs/sysdes.md docs/requirements/sysdes.md +cp ../chanora/docs/srs.md docs/requirements/srs.md +# Note: The path records (docs/requirements/sysrs.md, docs/requirements/srs.md, +# docs/architecture/sysdes.md in the original repo) are stubs pointing to canonical +# files. We don't need them in the docs repo since the canonical files are now here. +``` + +- [ ] **Step 2: Copy architecture docs** + +```bash +cp ../chanora/docs/architecture/sad.md docs/architecture/sad.md +cp ../chanora/docs/architecture/sdd.md docs/architecture/sdd.md +cp ../chanora/docs/architecture/file-transfer-design.md docs/architecture/ +cp ../chanora/docs/architecture/file-transfer-research.md docs/architecture/ +cp ../chanora/docs/architecture/file-transfer-implementation-plan.md docs/architecture/ +cp ../chanora/docs/architecture/desktop-ptt-architecture.md docs/architecture/ +# Note: docs/architecture/sysdes.md in the original repo is a path record +# pointing to docs/sysdes.md. Not needed — the canonical sysdes.md is in +# docs/requirements/sysdes.md in the docs repo. +``` + +- [ ] **Step 3: Copy verification docs** + +```bash +cp ../chanora/docs/verification/*.md docs/verification/ +``` + +- [ ] **Step 4: Copy governance docs** + +```bash +cp ../chanora/docs/governance/*.md docs/governance/ +``` + +- [ ] **Step 5: Copy security, privacy, legal docs** + +```bash +cp ../chanora/docs/security/*.md docs/security/ +cp ../chanora/docs/privacy/*.md docs/privacy/ +cp ../chanora/docs/legal/*.md docs/legal/ +``` + +- [ ] **Step 6: Copy release docs (policy, go-nogo, waiver only — NOT ios-build.md)** + +```bash +cp ../chanora/docs/release/platform-release-policy.md docs/release/ +cp ../chanora/docs/release/release-readiness-go-nogo-record.md docs/release/ +cp ../chanora/docs/release/dv-waiver-register.md docs/release/ +``` + +- [ ] **Step 7: Copy references + flatten external refs** + +```bash +cp ../chanora/docs/references/*.md docs/references/ +cp ../chanora/docs/offline-knowledge/external/yatqa-en.md docs/references/ +cp ../chanora/docs/offline-knowledge/external/yatqa-de.md docs/references/ +cp ../chanora/docs/offline-knowledge/external/teaspeak-overview.md docs/references/ +cp ../chanora/docs/offline-knowledge/external/respeak-overview.md docs/references/ +``` + +- [ ] **Step 8: Copy UI/UX, i18n, material3-guideline** + +```bash +cp ../chanora/docs/ui-ux/*.md docs/ui-ux/ +cp ../chanora/docs/i18n/*.md docs/i18n/ +# Note: docs/material3-guideline.md in the original repo is a path record +# pointing to docs/ui-ux/material3-guideline.md. Not needed — the canonical +# file is already copied above. +``` + +- [ ] **Step 9: Create section `.meta.yml` files** + +```bash +echo -e 'tags:\n - requirements\nstatus: baseline' > docs/requirements/.meta.yml +echo -e 'tags:\n - architecture\n - design\nstatus: candidate' > docs/architecture/.meta.yml +echo -e 'tags:\n - verification\nstatus: candidate' > docs/verification/.meta.yml +echo -e 'tags:\n - governance\nstatus: baseline' > docs/governance/.meta.yml +echo -e 'tags:\n - security\nstatus: candidate' > docs/security/.meta.yml +echo -e 'tags:\n - privacy\nstatus: candidate' > docs/privacy/.meta.yml +echo -e 'tags:\n - legal\nstatus: candidate' > docs/legal/.meta.yml +echo -e 'tags:\n - release\nstatus: candidate' > docs/release/.meta.yml +echo -e 'tags:\n - references\nstatus: baseline' > docs/references/.meta.yml +echo -e 'tags:\n - ui-ux\nstatus: candidate' > docs/ui-ux/.meta.yml +echo -e 'tags:\n - localization\nstatus: candidate' > docs/i18n/.meta.yml +``` + +- [ ] **Step 10: Commit all migrated files** + +```bash +git add docs/ +git commit -m "docs: migrate all ASPICE docs from chanora repo with section meta files" +``` + +--- + +### Task 6: Add Front Matter to Key ASPICE Documents + +**Files:** +- Modify: `docs/requirements/sysrs.md` +- Modify: `docs/requirements/sysdes.md` +- Modify: `docs/requirements/srs.md` +- Modify: `docs/architecture/sad.md` +- Modify: `docs/architecture/sdd.md` +- Modify: `docs/verification/*.md` +- Modify: `docs/governance/traceability-matrix.md` + +- [ ] **Step 1: Add front matter to `docs/requirements/sysrs.md`** + +Insert at the very top of the file (before the existing `# Chanora SysRS` heading): + +```yaml +--- +tags: [sysrs, requirements, swe.1, baseline] +upstream: [] +downstream: [sysdes, srs] +lifecycle: SysRS +status: baseline +--- +``` + +- [ ] **Step 2: Add front matter to `docs/requirements/sysdes.md`** + +```yaml +--- +tags: [sysdes, requirements, swe.1, baseline] +upstream: [sysrs] +downstream: [srs, sys4] +lifecycle: SysDes +status: baseline +--- +``` + +- [ ] **Step 3: Add front matter to `docs/requirements/srs.md`** + +```yaml +--- +tags: [srs, requirements, swe.1, baseline] +upstream: [sysdes, sysrs] +downstream: [sad, sdd, swe6] +lifecycle: SRS +status: baseline +--- +``` + +- [ ] **Step 4: Add front matter to `docs/architecture/sad.md`** + +```yaml +--- +tags: [sad, architecture, swe.2, candidate] +upstream: [srs] +downstream: [sdd, swe5] +lifecycle: SWE.2 +status: candidate +--- +``` + +- [ ] **Step 5: Add front matter to `docs/architecture/sdd.md`** + +```yaml +--- +tags: [sdd, architecture, swe.3, candidate] +upstream: [sad, srs] +downstream: [swe4] +lifecycle: SWE.3 +status: candidate +--- +``` + +- [ ] **Step 6: Add front matter to each verification plan** + +`docs/verification/verification-master-plan.md`: +```yaml +--- +tags: [verification, baseline] +upstream: [sysrs, sysdes, srs, sad, sdd] +downstream: [] +lifecycle: SWE.4-SWE.6 +status: candidate +--- +``` + +`docs/verification/swe4-unit-verification-plan.md`: +```yaml +--- +tags: [swe.4, verification, candidate] +upstream: [sdd] +downstream: [] +lifecycle: SWE.3 → SWE.4 +status: candidate +--- +``` + +`docs/verification/swe5-software-integration-verification-plan.md`: +```yaml +--- +tags: [swe.5, verification, candidate] +upstream: [sad] +downstream: [] +lifecycle: SWE.2 → SWE.5 +status: candidate +--- +``` + +`docs/verification/swe6-software-verification-plan.md`: +```yaml +--- +tags: [swe.6, verification, candidate] +upstream: [srs] +downstream: [] +lifecycle: SRS → SWE.6 +status: candidate +--- +``` + +`docs/verification/sys4-system-integration-verification-plan.md`: +```yaml +--- +tags: [sys.4, verification, candidate] +upstream: [sysdes, sysrs] +downstream: [] +lifecycle: SysDes → SYS.4 +status: candidate +--- +``` + +- [ ] **Step 7: Add front matter to `docs/governance/traceability-matrix.md`** + +```yaml +--- +tags: [governance, baseline] +upstream: [sysrs, sysdes, srs, sad, sdd] +downstream: [] +lifecycle: traceability +status: candidate +--- +``` + +- [ ] **Step 8: Commit** + +```bash +git add docs/ +git commit -m "docs: add ASPICE lifecycle front matter to key documents" +``` + +--- + +### Task 7: Create Tags Index Page and Validate Build + +**Files:** +- Create: `docs/tags.md` + +- [ ] **Step 1: Create `docs/tags.md`** + +```markdown +# Tag Index + +Browse all documentation by tag. Click any tag to see all pages that carry it. + + +``` + +- [ ] **Step 2: Install dependencies and build locally** + +```bash +pip install -r requirements.txt +mkdocs build --strict +``` + +Expected: Build succeeds, `site/` directory contains rendered HTML, `site/traceability-coverage.json` exists. + +- [ ] **Step 3: Run standalone validator** + +```bash +python scripts/validate_traceability.py docs/ +``` + +Expected: Exit code 0 if all referenced IDs have definitions. Any broken chains will be reported. + +- [ ] **Step 4: Check the generated coverage file** + +```bash +cat site/traceability-coverage.json +``` + +Expected: JSON with chain coverage percentages and orphan list (if any). + +- [ ] **Step 5: Commit** + +```bash +git add docs/tags.md +git commit -m "docs: add tags index page for traceability browsing" +``` + +- [ ] **Step 6: Push to GitHub** + +```bash +git push origin main +``` + +--- + +### Task 8: Restructure Code Repo — Create dev-docs/ + +**Files:** +- Create: `dev-docs/superpowers/specs/` (directory) +- Create: `dev-docs/superpowers/plans/_archived/` (directory) +- Create: `dev-docs/offline-knowledge/reviews/` (directory) +- Create: `dev-docs/release/` (directory) + +Note: This task runs in the main `chanora` code repo. + +- [ ] **Step 1: Create dev-docs directory structure** + +```bash +mkdir -p dev-docs/superpowers/plans/_archived +mkdir -p dev-docs/superpowers/specs +mkdir -p dev-docs/offline-knowledge/reviews +mkdir -p dev-docs/release +``` + +- [ ] **Step 2: Move superpowers specs** + +```bash +mv docs/superpowers/specs/* dev-docs/superpowers/specs/ +``` + +- [ ] **Step 3: Move active plans** + +```bash +mv docs/superpowers/plans/2026-05-28-server-resolution-prefetch.md dev-docs/superpowers/plans/ +mv docs/superpowers/plans/2026-05-28-chanora-server-prefetch-crate.md dev-docs/superpowers/plans/ +mv docs/superpowers/plans/2026-06-06-chat-panel-switching.md dev-docs/superpowers/plans/ +mv docs/superpowers/plans/2026-06-08-core-internal-split.md dev-docs/superpowers/plans/ +mv docs/superpowers/plans/2026-06-08-maintainability-continuation.md dev-docs/superpowers/plans/ +``` + +- [ ] **Step 4: Move completed plans to archive** + +```bash +mv docs/superpowers/plans/2026-05-29-finish-dv-document-tree.md dev-docs/superpowers/plans/_archived/ +mv docs/superpowers/plans/2026-05-29-dv-evidence-pack.md dev-docs/superpowers/plans/_archived/ +mv docs/superpowers/plans/2026-05-29-swe2-swe3-baselines.md dev-docs/superpowers/plans/_archived/ +mv docs/superpowers/plans/2026-05-29-state-sync-ui-settings-validation.md dev-docs/superpowers/plans/_archived/ +``` + +- [ ] **Step 5: Move offline-knowledge (minus external/)** + +```bash +mv docs/offline-knowledge/coverage-analysis.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/doc-quality-analysis.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/link-coverage-report.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/docs-code-mismatch.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/docs-link-not-covered.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/docs-out-of-date.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/function-inventory.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/README.md dev-docs/offline-knowledge/ +mv docs/offline-knowledge/reviews/* dev-docs/offline-knowledge/reviews/ +``` + +- [ ] **Step 6: Move implementation status and ios-build** + +```bash +mv docs/implementation-status-2026-05-28.md dev-docs/ +mv docs/release/ios-build.md dev-docs/release/ +``` + +- [ ] **Step 7: Remove now-empty directories** + +```bash +rm -rf docs/superpowers +rm -rf docs/offline-knowledge +rm -f docs/implementation-status-2026-05-28.md +``` + +- [ ] **Step 8: Commit** + +```bash +git add -A +git commit -m "refactor: move development docs to dev-docs/ directory" +``` + +--- + +### Task 9: Add Git Submodule and Remove Original Docs + +**Files:** +- Modify: `.gitmodules` (created by git submodule add) +- Remove: `docs/` directory contents (replaced by submodule) + +Note: This task runs in the main `chanora` code repo. + +- [ ] **Step 1: Remove original docs/ contents (keeping the directory)** + +```bash +# Back up any remaining files first +ls docs/ +# Remove everything except what was already moved +rm -rf docs/architecture docs/governance docs/i18n docs/implementation-status-2026-05-28.md docs/legal docs/material3-guideline.md docs/offline-knowledge docs/privacy docs/references docs/release docs/requirements docs/security docs/srs.md docs/superpowers docs/sysdes.md docs/sysrs.md docs/ui-ux docs/verification +``` + +- [ ] **Step 2: Verify docs/ is empty** + +```bash +ls -la docs/ +``` + +Expected: Empty directory (or only hidden files like `.gitkeep`). + +- [ ] **Step 3: Add chanora-docs as submodule** + +```bash +git submodule add git@github.com:EdisonJwa/chanora-docs.git docs +``` + +Expected: Creates `.gitmodules` file and `docs/` directory with submodule content. + +- [ ] **Step 4: Verify submodule is working** + +```bash +ls docs/ +``` + +Expected: Contents of the chanora-docs repo (mkdocs.yml, docs/, plugins/, etc.). + +- [ ] **Step 5: Commit** + +```bash +git add .gitmodules docs +git commit -m "chore: add chanora-docs as git submodule at docs/" +``` + +--- + +### Task 10: Write AGENTS.md and Update Cross-References + +**Files:** +- Create: `AGENTS.md` +- Modify: `README.md` (update doc path references) +- Create: `dev-docs/impl-mapping.md` + +Note: This task runs in the main `chanora` code repo. + +- [ ] **Step 1: Write `AGENTS.md`** + +```markdown +# AGENTS.md — Chanora Project Conventions + +## Project Overview + +Chanora is a cross-platform voice client (Flutter + Rust) targeting TeamSpeak-compatible servers. The project follows ASPICE engineering processes with full traceability from system requirements through verification. + +## Repository Structure + +``` +chanora/ ← Code repo (this one) +├── docs/ → chanora-docs ← Git submodule: ASPICE docs, doc site source +├── dev-docs/ ← Local-only development docs +│ ├── superpowers/ ← AI agent specs and plans +│ │ ├── specs/ ← Feature/design specs (active) +│ │ └── plans/ ← Implementation plans (active) +│ │ └── _archived/ ← Completed plans +│ ├── offline-knowledge/ ← Doc maintenance tools, link coverage +│ ├── implementation-status-* ← Code state snapshots +│ └── release/ios-build.md ← Operational build instructions +├── apps/chanora_flutter/ ← Flutter application +├── core/chanora_core/ ← Rust core API + orchestration +├── crates/ ← Rust crates (protocol, audio, state, etc.) +└── dev-docs/impl-mapping.md ← SAD component → source file mapping +``` + +## Documentation Two-Repo Model + +**`docs/` is a git submodule** pointing to the separate `chanora-docs` repository. It is NOT a local directory you can freely create files in. + +### What lives where + +| Content | Location | Reason | +|---|---|---| +| SysRS, SysDes, SRS, SAD, SDD | `docs/` (submodule) | ASPICE baselines, served on doc site | +| Verification plans (SWE.4/5/6, SYS.4) | `docs/` (submodule) | ASPICE verification evidence | +| Governance, traceability, decision register | `docs/` (submodule) | ASPICE governance | +| Security, privacy, legal | `docs/` (submodule) | Stakeholder-facing | +| UI/UX guidelines, i18n architecture | `docs/` (submodule) | Design references | +| Feature specs and implementation plans | `dev-docs/superpowers/` | Code-coupled, agent working files | +| Link coverage, doc quality analysis | `dev-docs/offline-knowledge/` | Maintenance tools | +| Implementation status snapshots | `dev-docs/` | Code state tracking | +| Source file path references | `dev-docs/impl-mapping.md` | Developer convenience, not ASPICE | + +### Rules for agents + +1. **Never create or edit files in `docs/`** without understanding it's a submodule. Changes there require committing in the `chanora-docs` repo first, then updating the submodule pointer in this repo. + +2. **ASPICE documents do not contain code file paths.** ASPICE traces requirement IDs (e.g., `SysRS-233`, `SRS-045`, `SDD-MOD-009`), not source file paths. If you need to map a component to its source, use or update `dev-docs/impl-mapping.md`. + +3. **Specs and plans go in `dev-docs/superpowers/`.** Follow the naming convention: `YYYY-MM-DD--design.md` for specs, `YYYY-MM-DD-.md` for plans. + +4. **Completed plans move to `_archived/`.** Once a plan is fully implemented and verified, move it to `dev-docs/superpowers/plans/_archived/`. + +## ASPICE Traceability Chain + +```text +SysRS → SysDes → SRS → SAD (SWE.2) → SDD (SWE.3) → Verification + ↓ ↓ + SWE.4 (unit) SWE.4/5/6/SYS.4 +``` + +- Requirement IDs are the traceability mechanism, not file paths. +- Every downstream document must reference upstream IDs it traces from. +- Verification plans map to their upstream design/requirements level: + - SYS.4 ← SysDes, SysRS + - SWE.5 ← SAD (SWE.2) + - SWE.4 ← SDD (SWE.3) + - SWE.6 ← SRS + +## Code Architecture + +| Component | Location | Responsibility | +|---|---|---| +| Flutter app shell | `apps/chanora_flutter/` | UI, Material 3, navigation, localization | +| Rust core | `core/chanora_core/` | Session orchestration, bridge events | +| Protocol adapter | `crates/chanora_protocol/` | TeamSpeak protocol via tsclientlib | +| State sync | `crates/chanora_state/` | Snapshots, deltas, reducers | +| Audio subsystem | `crates/chanora_audio/` | Capture, DSP, Opus, PTT | +| Storage | `crates/chanora_storage/` | Bookmarks, identity, encryption | +| Diagnostics | `crates/chanora_diagnostics/` | Redaction, logs, export | +| Resolver | `crates/chanora_resolver/` | SRV/TSDNS/DNS resolution | +| Prefetch | `crates/chanora_prefetch/` | Resolution warming, TTL cache | +| Bridge | `crates/chanora_bridge/` | Flutter/Rust typed DTO boundary | +| Cache | `crates/chanora_cache/` | Avatar/icon blob cache | + +## Coding Conventions + +- **Rust:** Follow workspace `Cargo.toml` structure. Run `cargo check`, `cargo clippy`, `cargo test` before committing. +- **Flutter:** Run `flutter analyze`, `flutter test` before committing. +- **No code comments** unless explicitly requested. +- **Git commits:** Follow convention in `docs/governance/git-commit-message-convention.md` (accessible via submodule). +- **Bridge boundary:** Flutter must not directly depend on protocol-library internals. All cross-boundary communication goes through `chanora_bridge` typed DTOs. + +## Verification Commands + +```bash +cargo check && cargo clippy && cargo test +cd apps/chanora_flutter && flutter analyze && flutter test +``` + +## Important References + +- Traceability matrix: `docs/governance/traceability-matrix.md` +- Decision register: `docs/governance/product-decision-register.md` +- Security guidelines: `docs/security/security-privacy-legal-guideline.md` +- Release readiness: `docs/release/release-readiness-go-nogo-record.md` +``` + +- [ ] **Step 2: Create `dev-docs/impl-mapping.md`** + +```markdown +# SAD Component → Source File Mapping + +**Purpose:** Developer convenience mapping from ASPICE architecture components to source file locations. This is NOT an ASPICE document — it's a lookup for developers. + +## Component Mapping + +| SAD Component | Source Location | +|---|---| +| Flutter app shell | `apps/chanora_flutter/lib/main.dart`, services, widgets | +| Flutter service layer | `apps/chanora_flutter/lib/services/` | +| Flutter widget layer | `apps/chanora_flutter/lib/widgets/` | +| Bridge layer | `crates/chanora_bridge/src/api.rs`, `apps/chanora_flutter/lib/src/rust/` | +| Rust core | `core/chanora_core/src/lib.rs`, `events.rs`, `network_diagnostics.rs`, `ptt.rs` | +| Protocol adapter | `crates/chanora_protocol/src/` | +| State sync | `crates/chanora_state/src/lib.rs`, `channel_join.rs` | +| Audio subsystem | `crates/chanora_audio/src/` | +| Storage | `crates/chanora_storage/src/lib.rs` | +| Diagnostics | `crates/chanora_diagnostics/src/lib.rs` | +| Resolution and prefetch | `crates/chanora_resolver/src/lib.rs`, `crates/chanora_prefetch/src/lib.rs`, `prefetch_debouncer.dart` | +| Build and release hooks | `.github/workflows/`, `tools/`, platform project files | + +## SDD Module Mapping + +| SDD Module | Source Location | +|---|---| +| SDD-MOD-001 Flutter app bootstrap | `apps/chanora_flutter/lib/services/app_bootstrap.dart`, `main.dart` | +| SDD-MOD-002 Connect UI | `apps/chanora_flutter/lib/widgets/connect_widgets.dart` | +| SDD-MOD-003 Snapshot and channel UI | `snapshot_view.dart`, `snapshot_state_mapper.dart`, `channel_spacer.dart` | +| SDD-MOD-004 Chat UI | `chat_views.dart`, `bbcode_text.dart` | +| SDD-MOD-005 Voice UI | `voice_bar.dart`, `voice_compact.dart`, `voice_settings*.dart`, `voice_level_meter.dart`, `ptt_capability_badge.dart` | +| SDD-MOD-006 Platform services | `android_permissions_service.dart`, `ios_permissions_service.dart`, `audio_lifecycle_service.dart`, `back_intent_*`, `link_trust_service.dart` | +| SDD-MOD-007 Bridge API | `crates/chanora_bridge/src/api.rs`, generated Dart/Rust bridge files | +| SDD-MOD-008 Rust core supervisor | `core/chanora_core/src/lib.rs`, `events.rs`, `network_diagnostics.rs`, `ptt.rs` | +| SDD-MOD-009 Protocol adapter | `crates/chanora_protocol/src/` | +| SDD-MOD-010 State sync | `crates/chanora_state/src/lib.rs`, `channel_join.rs` | +| SDD-MOD-011 Audio subsystem | `crates/chanora_audio/src/` | +| SDD-MOD-012 Storage | `crates/chanora_storage/src/lib.rs` | +| SDD-MOD-013 Diagnostics | `crates/chanora_diagnostics/src/lib.rs` | +| SDD-MOD-014 Resolution and prefetch | `crates/chanora_resolver/src/lib.rs`, `crates/chanora_prefetch/src/lib.rs`, `prefetch_debouncer.dart` | +| SDD-MOD-015 Build and release hooks | `.github/workflows/`, `tools/`, platform project files | +``` + +- [ ] **Step 3: Update README.md doc path references** + +Replace any remaining references to old `docs/` paths (like `docs/superpowers/`) with `dev-docs/superpowers/`. Use grep to find all references: + +```bash +grep -n "docs/superpowers\|docs/implementation-status\|docs/offline-knowledge" README.md +``` + +Update any found references to point to `dev-docs/`. + +- [ ] **Step 4: Commit** + +```bash +git add AGENTS.md dev-docs/impl-mapping.md README.md +git commit -m "docs: add AGENTS.md and impl-mapping.md, update README references" +``` + +--- + +### Task 11: Update .gitignore and Verify Final State + +**Files:** +- Modify: `.gitignore` + +- [ ] **Step 1: Verify submodule status** + +```bash +git submodule status +``` + +Expected: Shows chanora-docs commit hash. + +- [ ] **Step 2: Verify docs/ contains submodule content** + +```bash +ls docs/mkdocs.yml +``` + +Expected: File exists. + +- [ ] **Step 3: Verify dev-docs/ structure** + +```bash +find dev-docs -type f -name '*.md' | sort +``` + +Expected: All local-only docs present. + +- [ ] **Step 4: Verify no stale docs/ files remain outside submodule** + +```bash +git status +``` + +Expected: No untracked files in `docs/` outside the submodule pointer. + +- [ ] **Step 5: Final commit if needed** + +```bash +git add -A +git commit -m "chore: finalize documentation repo restructure" +``` diff --git a/docs/superpowers/plans/2026-05-29-dv-evidence-pack.md b/dev-docs/superpowers/plans/_archived/2026-05-29-dv-evidence-pack.md similarity index 100% rename from docs/superpowers/plans/2026-05-29-dv-evidence-pack.md rename to dev-docs/superpowers/plans/_archived/2026-05-29-dv-evidence-pack.md diff --git a/docs/superpowers/plans/2026-05-29-finish-dv-document-tree.md b/dev-docs/superpowers/plans/_archived/2026-05-29-finish-dv-document-tree.md similarity index 100% rename from docs/superpowers/plans/2026-05-29-finish-dv-document-tree.md rename to dev-docs/superpowers/plans/_archived/2026-05-29-finish-dv-document-tree.md diff --git a/docs/superpowers/plans/2026-05-29-state-sync-ui-settings-validation.md b/dev-docs/superpowers/plans/_archived/2026-05-29-state-sync-ui-settings-validation.md similarity index 100% rename from docs/superpowers/plans/2026-05-29-state-sync-ui-settings-validation.md rename to dev-docs/superpowers/plans/_archived/2026-05-29-state-sync-ui-settings-validation.md diff --git a/docs/superpowers/plans/2026-05-29-swe2-swe3-baselines.md b/dev-docs/superpowers/plans/_archived/2026-05-29-swe2-swe3-baselines.md similarity index 100% rename from docs/superpowers/plans/2026-05-29-swe2-swe3-baselines.md rename to dev-docs/superpowers/plans/_archived/2026-05-29-swe2-swe3-baselines.md diff --git a/docs/superpowers/specs/2026-05-28-chanora-server-prefetch-crate-design.md b/dev-docs/superpowers/specs/2026-05-28-chanora-server-prefetch-crate-design.md similarity index 100% rename from docs/superpowers/specs/2026-05-28-chanora-server-prefetch-crate-design.md rename to dev-docs/superpowers/specs/2026-05-28-chanora-server-prefetch-crate-design.md diff --git a/docs/superpowers/specs/2026-05-28-server-resolution-prefetch-design.md b/dev-docs/superpowers/specs/2026-05-28-server-resolution-prefetch-design.md similarity index 100% rename from docs/superpowers/specs/2026-05-28-server-resolution-prefetch-design.md rename to dev-docs/superpowers/specs/2026-05-28-server-resolution-prefetch-design.md diff --git a/docs/superpowers/specs/2026-05-29-state-sync-ui-settings-validation-design.md b/dev-docs/superpowers/specs/2026-05-29-state-sync-ui-settings-validation-design.md similarity index 100% rename from docs/superpowers/specs/2026-05-29-state-sync-ui-settings-validation-design.md rename to dev-docs/superpowers/specs/2026-05-29-state-sync-ui-settings-validation-design.md diff --git a/docs/superpowers/specs/2026-06-05-adaptive-3-panel-layout-design.md b/dev-docs/superpowers/specs/2026-06-05-adaptive-3-panel-layout-design.md similarity index 100% rename from docs/superpowers/specs/2026-06-05-adaptive-3-panel-layout-design.md rename to dev-docs/superpowers/specs/2026-06-05-adaptive-3-panel-layout-design.md diff --git a/docs/superpowers/specs/2026-06-08-maintainability-continuation-design.md b/dev-docs/superpowers/specs/2026-06-08-maintainability-continuation-design.md similarity index 100% rename from docs/superpowers/specs/2026-06-08-maintainability-continuation-design.md rename to dev-docs/superpowers/specs/2026-06-08-maintainability-continuation-design.md diff --git a/docs/superpowers/specs/2026-06-09-poke-without-message-design.md b/dev-docs/superpowers/specs/2026-06-09-poke-without-message-design.md similarity index 100% rename from docs/superpowers/specs/2026-06-09-poke-without-message-design.md rename to dev-docs/superpowers/specs/2026-06-09-poke-without-message-design.md diff --git a/dev-docs/superpowers/specs/2026-06-13-documentation-site-design.md b/dev-docs/superpowers/specs/2026-06-13-documentation-site-design.md new file mode 100644 index 0000000..fd44d02 --- /dev/null +++ b/dev-docs/superpowers/specs/2026-06-13-documentation-site-design.md @@ -0,0 +1,472 @@ +# Documentation Site & ASPICE Traceability System Design + +**Date:** 2026-06-13 +**Status:** Approved design for implementation +**Scope:** Docusaurus doc site, git submodule separation, tag-based ASPICE traceability with custom validation plugin, Cloudflare Pages hosting with access control + +## 1. Purpose + +Replace the current flat markdown documentation tree with a browseable, searchable, access-controlled doc site that serves three audiences: developers, ASPICE assessors, and non-technical stakeholders. Introduce automated traceability enforcement that validates the ASPICE requirement chain on every build. + +## 2. Current State + +- 65+ markdown files in `docs/` with no sidebar, no search, no visual hierarchy +- ASPICE traceability maintained in manual markdown tables (`traceability-matrix.md`) +- Cross-references are backtick-quoted paths in prose, not clickable links +- Link coverage report found 2 broken links + 5 broken path references +- No CI enforcement of traceability integrity +- No access control — docs only viewable via GitHub repo browsing or local clone + +## 3. Design Decisions + +| Decision | Choice | Rationale | +|---|---|---| +| Repo structure | Git submodule (`docs/` → `chanora-docs` repo) | Cleaner separation, access control, CI independence, separate versioning | +| Doc site generator | Docusaurus | Meta-maintained, full plugin API, built-in tags and versioning, active ecosystem | +| Traceability mechanism | Tag-based + custom Docusaurus plugin | Tags for browsing, plugin for automated chain validation and coverage reports | +| Hosting | Cloudflare Pages | Free tier, global CDN, auto-deploy from CI | +| Access control | Cloudflare Access | Free for up to 50 users, email-based auth, SSO support | +| Code path references in docs | Remove from ASPICE docs, move to `impl-mapping.md` | ASPICE traces requirement IDs, not file paths. Code paths are developer convenience | +| Provenance records | Deferred | Completed ASPICE-related plans archived in `dev-docs/superpowers/plans/_archived/` for now | + +## 4. Repo Structure + +### 4.1 Docs submodule (`chanora-docs` repo) + +``` +chanora-docs/ +├── mkdocs.yml +├── requirements.txt +├── pyproject.toml +├── docs/ +│ ├── index.md +│ ├── .meta.yml +│ ├── requirements/ +│ │ ├── .meta.yml +│ │ ├── sysrs.md +│ │ ├── sysdes.md +│ │ └── srs.md +│ ├── architecture/ +│ │ ├── .meta.yml +│ │ ├── sad.md +│ │ ├── sdd.md +│ │ ├── file-transfer-design.md +│ │ ├── file-transfer-research.md +│ │ ├── file-transfer-implementation-plan.md +│ │ └── desktop-ptt-architecture.md +│ ├── verification/ +│ │ ├── .meta.yml +│ │ ├── verification-master-plan.md +│ │ ├── swe4-unit-verification-plan.md +│ │ ├── swe5-software-integration-verification-plan.md +│ │ ├── swe6-software-verification-plan.md +│ │ └── sys4-system-integration-verification-plan.md +│ ├── governance/ +│ │ ├── .meta.yml +│ │ ├── document-index.md +│ │ ├── traceability-matrix.md +│ │ ├── product-decision-register.md +│ │ ├── baseline-approval-record.md +│ │ ├── baseline-candidate-validation-report.md +│ │ ├── document-review-report.md +│ │ ├── document-naming-convention.md +│ │ ├── decision-impact-assessment.md +│ │ ├── git-commit-message-convention.md +│ │ ├── repo-format-validation-report.md +│ │ ├── path-migration-map.md +│ │ └── maintainability-review-2026-06-08.md +│ ├── security/ +│ │ ├── .meta.yml +│ │ ├── security-privacy-legal-guideline.md +│ │ ├── threat-model.md +│ │ ├── secure-storage-audit-report.md +│ │ ├── diagnostic-redaction-audit-report.md +│ │ ├── dependency-and-supply-chain-report.md +│ │ ├── license-inventory.md +│ │ └── flutter-license-inventory.md +│ ├── privacy/ +│ │ └── privacy-policy.md +│ ├── legal/ +│ │ └── trademark-and-attribution-review.md +│ ├── release/ +│ │ ├── platform-release-policy.md +│ │ ├── release-readiness-go-nogo-record.md +│ │ └── dv-waiver-register.md +│ ├── references/ +│ │ ├── aspice-swe2-swe3-integration-note.md +│ │ ├── external-references.md +│ │ ├── yatqa-en.md (moved from offline-knowledge/external/) +│ │ ├── yatqa-de.md (moved from offline-knowledge/external/) +│ │ ├── teaspeak-overview.md (moved from offline-knowledge/external/) +│ │ └── respeak-overview.md (moved from offline-knowledge/external/) +│ ├── ui-ux/ +│ │ ├── material3-guideline.md +│ │ ├── material3-design-tokens.md +│ │ ├── material3-component-catalog.md +│ │ └── adaptive-layout-platform-guide.md +│ ├── i18n/ +│ │ └── localization-architecture.md +│ └── tags.md +├── plugins/ +│ └── traceability/ +│ ├── __init__.py +│ └── traceability.py +├── scripts/ +│ └── validate_traceability.py +├── .github/ +│ └── workflows/ +│ └── deploy.yml +├── wrangler.toml +└── README.md +``` + +### 4.2 Code repo local files + +``` +chanora/ +├── docs/ → chanora-docs (submodule) +├── dev-docs/ +│ ├── superpowers/ +│ │ ├── specs/ +│ │ │ ├── 2026-05-28-server-resolution-prefetch-design.md +│ │ │ ├── 2026-05-28-chanora-server-prefetch-crate-design.md +│ │ │ ├── 2026-05-29-state-sync-ui-settings-validation-design.md +│ │ │ ├── 2026-06-05-adaptive-3-panel-layout-design.md +│ │ │ ├── 2026-06-08-maintainability-continuation-design.md +│ │ │ ├── 2026-06-09-poke-without-message-design.md +│ │ │ └── 2026-06-13-documentation-site-design.md +│ │ └── plans/ +│ │ ├── _archived/ +│ │ │ ├── 2026-05-29-finish-dv-document-tree.md +│ │ │ ├── 2026-05-29-dv-evidence-pack.md +│ │ │ ├── 2026-05-29-swe2-swe3-baselines.md +│ │ │ └── 2026-05-29-state-sync-ui-settings-validation.md +│ │ ├── 2026-05-28-server-resolution-prefetch.md +│ │ ├── 2026-05-28-chanora-server-prefetch-crate.md +│ │ ├── 2026-06-06-chat-panel-switching.md +│ │ ├── 2026-06-08-core-internal-split.md +│ │ └── 2026-06-08-maintainability-continuation.md +│ ├── offline-knowledge/ +│ │ ├── coverage-analysis.md +│ │ ├── doc-quality-analysis.md +│ │ ├── link-coverage-report.md +│ │ └── reviews/ +│ ├── implementation-status-2026-05-28.md +│ ├── release/ios-build.md +│ └── impl-mapping.md +├── apps/, crates/, core/ +├── AGENTS.md +└── README.md +``` + +## 5. Docusaurus Configuration + +### 5.1 Site configuration (`docusaurus.config.js`) + +```js +module.exports = { + title: 'Chanora Engineering Docs', + tagline: 'ASPICE-compliant engineering documentation with automated traceability', + url: 'https://docs.chanora.dev', + baseUrl: '/', + organizationName: 'chanoraapp', + projectName: 'docs', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + i18n: { defaultLocale: 'en', locales: ['en'] }, + themes: ['@docusaurus/theme-classic'], + plugins: [ + './plugins/traceability', + ], + themeConfig: { + navbar: { + title: 'Chanora Docs', + items: [ + { type: 'doc', position: 'left', label: 'Requirements', docId: 'requirements/sysrs' }, + { type: 'doc', position: 'left', label: 'Architecture', docId: 'architecture/sad' }, + { type: 'doc', position: 'left', label: 'Verification', docId: 'verification/verification-master-plan' }, + { type: 'doc', position: 'left', label: 'Governance', docId: 'governance/document-index' }, + { type: 'doc', position: 'left', label: 'Security', docId: 'security/security-privacy-legal-guideline' }, + { type: 'doc', position: 'left', label: 'Release', docId: 'release/platform-release-policy' }, + { type: 'doc', position: 'left', label: 'References', docId: 'references/external-references' }, + { type: 'doc', position: 'left', label: 'UI/UX', docId: 'ui-ux/material3-guideline' }, + { type: 'tags' }, + ], + }, + footer: { + style: 'dark', + links: [ + { title: 'Docs', items: [ + { label: 'Requirements', to: '/docs/requirements/sysrs' }, + { label: 'Architecture', to: '/docs/architecture/sad' }, + { label: 'Verification', to: '/docs/verification/verification-master-plan' }, + ]}, + { title: 'Governance', items: [ + { label: 'Traceability Matrix', to: '/docs/governance/traceability-matrix' }, + { label: 'Decision Register', to: '/docs/governance/product-decision-register' }, + { label: 'Document Index', to: '/docs/governance/document-index' }, + ]}, + ], + }, + prism: { theme: prismThemes.github, darkTheme: prismThemes.dracula }, + }, +}; +``` + +### 5.2 Sidebar (`sidebars.js`) + +```js +module.exports = { + requirements: [ + 'requirements/sysrs', + 'requirements/sysdes', + 'requirements/srs', + ], + architecture: [ + 'architecture/sad', + 'architecture/sdd', + 'architecture/file-transfer-design', + 'architecture/file-transfer-research', + 'architecture/file-transfer-implementation-plan', + 'architecture/desktop-ptt-architecture', + ], + verification: [ + { + type: 'category', + label: 'System Level', + items: ['verification/sys4-system-integration-verification-plan'], + }, + { + type: 'category', + label: 'Software Integration', + items: ['verification/swe5-software-integration-verification-plan'], + }, + { + type: 'category', + label: 'Unit Level', + items: ['verification/swe4-unit-verification-plan'], + }, + { + type: 'category', + label: 'Software Qualification', + items: ['verification/swe6-software-verification-plan'], + }, + 'verification/verification-master-plan', + ], + governance: [ + 'governance/document-index', + 'governance/traceability-matrix', + 'governance/product-decision-register', + 'governance/baseline-approval-record', + 'governance/baseline-candidate-validation-report', + 'governance/document-review-report', + 'governance/document-naming-convention', + 'governance/decision-impact-assessment', + 'governance/git-commit-message-convention', + 'governance/repo-format-validation-report', + 'governance/path-migration-map', + 'governance/maintainability-review-2026-06-08', + ], + security: [ + 'security/security-privacy-legal-guideline', + 'security/threat-model', + 'security/secure-storage-audit-report', + 'security/diagnostic-redaction-audit-report', + 'security/dependency-and-supply-chain-report', + 'security/license-inventory', + 'security/flutter-license-inventory', + 'privacy/privacy-policy', + 'legal/trademark-and-attribution-review', + ], + release: [ + 'release/platform-release-policy', + 'release/release-readiness-go-nogo-record', + 'release/dv-waiver-register', + ], + references: [ + 'references/external-references', + 'references/aspice-swe2-swe3-integration-note', + 'references/yatqa-en', + 'references/yatqa-de', + 'references/teaspeak-overview', + 'references/respeak-overview', + ], + uiux: [ + 'ui-ux/material3-guideline', + 'ui-ux/material3-design-tokens', + 'ui-ux/material3-component-catalog', + 'ui-ux/adaptive-layout-platform-guide', + 'i18n/localization-architecture', + ], +}; +``` + +## 6. Tag-Based Traceability + +### 6.1 Front matter schema + +Every document includes YAML front matter: + +```yaml +--- +tags: [swe.2, architecture, SRS-003, SRS-008, SRS-016] +upstream: [srs, sysdes] # Custom metadata for traceability plugin +downstream: [sdd, swe4, swe5] # Custom metadata for traceability plugin +lifecycle: SWE.2 # Custom metadata for traceability plugin +status: baseline # Custom metadata for traceability plugin +--- +``` + +The `tags` field is consumed by the MkDocs Material tags plugin for browsing. The `upstream`, `downstream`, `lifecycle`, and `status` fields are custom metadata consumed by the traceability plugin for chain validation. + +### 6.2 Tag categories + +| Tag pattern | Purpose | Example | +|---|---|---| +| `swe.1` through `swe.6`, `sys.4` | ASPICE lifecycle stage | Every doc gets at least one | +| `sysrs`, `sysdes`, `srs`, `sad`, `sdd` | Document type | Identifies the doc in the chain | +| `requirements`, `architecture`, `verification`, `governance` | Section category | For filtering | +| `SysRS-233`, `SRS-045`, `SDD-MOD-009` | Requirement/module IDs | Traceability links | +| `baseline`, `draft`, `candidate` | Document status | Assessor visibility | +| `dec-012`, `dec-020` | Decision register refs | Cross-ref to governance | + +### 6.3 Section defaults via `.meta.yml` + +```yaml +# docs/verification/.meta.yml +tags: [verification] +status: candidate +``` + +### 6.4 Verification page trace mappings + +| Verification plan | Upstream traces | Tags | +|---|---|---| +| SYS.4 System Integration | SysDes, SysRS | `[sys.4, verification, SysDes-102, SysDes-103, ...]` | +| SWE.5 Software Integration | SAD (SWE.2) | `[swe.5, verification, sad-component-bridge, ...]` | +| SWE.4 Unit Verification | SDD (SWE.3) | `[swe.4, verification, SDD-MOD-001, ...]` | +| SWE.6 Software Verification | SRS | `[swe.6, verification, SRS-128, ...]` | + +## 7. Custom Traceability Plugin + +### 7.1 Location + +`plugins/traceability/traceability.py` — MkDocs plugin, ~200 lines Python. + +### 7.2 Behavior + +On `on_page_markdown` event: +- Scan each page for requirement ID patterns: `SysRS-\d+`, `SysDes-\d+`, `SRS-\d+`, `SDD-MOD-\d+`, `DEC-\d+` +- Build an in-memory traceability graph: upstream ID → downstream document → verification plan + +On `on_post_build` event: +- Validate every requirement ID referenced downstream exists in its source document +- Validate every upstream document ID has at least one downstream allocation +- Flag orphaned references (IDs mentioned but never defined) +- Verify bidirectional completeness + +### 7.3 Outputs + +- `traceability-coverage.json` — machine-readable coverage report with chain completeness percentages +- Console output with pass/fail summary +- Traceability dashboard page with coverage table and broken chain details +- Build failure (`sys.exit(1)`) on broken chains when `strict: true` + +### 7.4 Standalone CI validator + +`scripts/validate_traceability.py` — same validation logic, runnable without MkDocs build: + +``` +python scripts/validate_traceability.py docs/ +``` + +Exit code 0 = all chains valid. Exit code 1 = broken chains with details on stderr. + +## 8. Hosting & Deployment + +### 8.1 Architecture + +``` +chanora-docs repo → push to main → GitHub Actions + → validate_traceability.py + → mkdocs build --strict + → Cloudflare Pages (via Wrangler) + → Cloudflare Access policy (email-based auth) +``` + +### 8.2 CI workflow + +On pull request: build + validate only (no deploy). +On push to main: build + validate + deploy to Cloudflare Pages. + +### 8.3 Cloudflare Access policy + +- Free tier for up to 50 users +- Email-based authentication with optional Google/GitHub SSO +- One-time PIN for external assessors +- Access rules: allow company emails, specific assessor emails; block all others + +## 9. Migration Plan + +### 9.1 Code path reference cleanup + +SAD and SDD currently list file paths (`crates/chanora_protocol/src/`) in component tables. These references will be: +- Replaced with component/module IDs only in the docs submodule +- Preserved in `dev-docs/impl-mapping.md` in the code repo for developer convenience + +### 9.2 File moves + +| From (code repo) | To | Action | +|---|---|---| +| `docs/sysrs.md` | docs submodule | Move + add front matter | +| `docs/sysdes.md` | docs submodule | Move + add front matter | +| `docs/srs.md` | docs submodule | Move + add front matter | +| `docs/requirements/*` | docs submodule | Move (path records) | +| `docs/architecture/*` | docs submodule | Move + cleanup code paths | +| `docs/verification/*` | docs submodule | Move + add front matter | +| `docs/governance/*` | docs submodule | Move + add front matter | +| `docs/security/*` | docs submodule | Move + add front matter | +| `docs/privacy/*` | docs submodule | Move | +| `docs/legal/*` | docs submodule | Move | +| `docs/release/policy+go-nogo+waiver` | docs submodule | Move | +| `docs/references/*` | docs submodule | Move | +| `docs/ui-ux/*` | docs submodule | Move | +| `docs/i18n/*` | docs submodule | Move | +| `docs/material3-guideline.md` | docs submodule | Move | +| `docs/offline-knowledge/external/*` | docs submodule `references/` (flattened) | Move + rename | +| `docs/superpowers/*` | `dev-docs/superpowers/` | Move | +| `docs/offline-knowledge/` (remaining) | `dev-docs/offline-knowledge/` | Move | +| `docs/implementation-status-*` | `dev-docs/` | Move | +| `docs/release/ios-build.md` | `dev-docs/release/` | Move | + +### 9.3 Cross-reference updates + +All backtick path references (`docs/srs.md`) should become markdown links (`[SRS](../srs.md)` or `[SRS](srs.md)`) for both GitHub and MkDocs rendering. + +### 9.4 Post-migration + +- Remove `docs/` contents from code repo +- Add `chanora-docs` as git submodule at `docs/` +- Create `dev-docs/` directory with local-only files +- Update README references to new paths +- Write `AGENTS.md` with new conventions +- Update `opencode.json` or `.opencode/` references + +## 10. AGENTS.md + +An `AGENTS.md` file will be written at the code repo root documenting: +- The two-repo model (docs/ as submodule, dev-docs/ as local) +- What content goes where +- ASPICE traceability chain and rules +- Code architecture overview +- Verification commands +- Agent working conventions (no edits in docs/ without submodule awareness) + +## 11. Deferred Items + +| Item | Reason | When | +|---|---|---| +| Document provenance records | Convert completed ASPICE plans into provenance evidence | Follow-up task | +| Custom MkDocs traceability plugin | Core feature, built during implementation | Phase 1 | +| Cloudflare Pages + Access setup | Requires account creation, domain config | During deployment | +| `impl-mapping.md` creation | Extract code paths from SAD/SDD during migration | During migration | diff --git a/docs b/docs new file mode 160000 index 0000000..4443239 --- /dev/null +++ b/docs @@ -0,0 +1 @@ +Subproject commit 44432399edb76a255582c20fbf53965fef4e84fd diff --git a/docs/architecture/desktop-ptt-architecture.md b/docs/architecture/desktop-ptt-architecture.md deleted file mode 100644 index 9cd6b92..0000000 --- a/docs/architecture/desktop-ptt-architecture.md +++ /dev/null @@ -1,43 +0,0 @@ -# Chanora Desktop Push-to-Talk Architecture - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Related documents:** `docs/architecture/sad.md`, `docs/architecture/sdd.md`, `docs/release/dv-waiver-register.md` - -## 1. Purpose - -This document records the desktop push-to-talk architecture advertised by the README and connects it to the SWE.2/SWE.3 baselines. - -## 2. Architecture Summary - -Desktop PTT is implemented as a platform-capability feature. The application must detect the active backend, expose the resulting `PttCapabilityLevel`, and avoid claiming global PTT support when the runtime falls back to focused-input behavior. - -## 3. Platform Backends - -| Platform | Backend strategy | Release claim rule | -|---|---|---| -| Windows | Raw Input first, low-level keyboard hook fallback, focused fallback if unavailable | Claim only the detected runtime capability | -| macOS | Event Tap where permission and OS policy allow; focused fallback otherwise | Claim Global PTT only with permission/backend evidence | -| Linux | Freedesktop GlobalShortcuts portal where available; focused fallback otherwise | State portal/fallback behavior clearly | - -## 4. Safety Rules - -| Rule | Purpose | -|---|---| -| Missed-key-up watchdog clears transmit after timeout | Prevents stuck transmit when an OS suppresses key-up | -| Capability is surfaced to UI and release record | Prevents over-claiming platform support | -| Mouse side-button support is platform-dependent | Avoids blocking release on Linux portal limitations | -| Focused fallback remains available | Preserves usable PTT when global backends are unavailable | - -## 5. Verification Handoff - -| Evidence | Required result | -|---|---| -| Per-platform smoke | Active backend and fallback behavior recorded | -| UI inspection | PTT capability badge matches runtime backend | -| Release readiness | Release notes mirror actual capability per platform | -| Safety test | Watchdog prevents stuck transmit after missed key-up | - -## 6. DV Conclusion - -The desktop PTT architecture is documented for DV navigation. Public release claims still require per-platform PTT evidence attached to the release-readiness record. diff --git a/docs/architecture/file-transfer-design.md b/docs/architecture/file-transfer-design.md deleted file mode 100644 index 4184f44..0000000 --- a/docs/architecture/file-transfer-design.md +++ /dev/null @@ -1,737 +0,0 @@ -# File Transfer Design - -**Date:** 2026-06-10 -**Status:** Draft for review -**Scope:** Download files from TeamSpeak-compatible servers via the native client protocol, starting with avatars and icons. -**Direct upstream source:** `docs/architecture/sad.md` (SAD-067, SDD-MOD-009) - -## 1. Goal - -Chanora needs to download files stored on TeamSpeak-compatible servers. The most visible use cases are client avatars and server/channel/client icons. The file transfer mechanism is also used for channel file browser features, but this document scopes the initial design to avatar and icon retrieval only. - -This document describes: - -- How the TeamSpeak file transfer protocol works. -- How `tsclientlib` exposes it. -- How Chanora should integrate it following the existing protocol adapter pattern. -- How the result flows through the bridge to the Flutter UI layer. - -Upload, channel file browsing, and file deletion are explicitly out of scope for the initial implementation. - -## 2. Protocol Background - -### 2.1 Two-Phase Transfer - -TeamSpeak file transfer is a two-phase process: - -1. **Command phase** — The client sends a command over the main encrypted UDP connection to request a transfer token (`ftkey`). -2. **Transfer phase** — The client opens a separate TCP connection to the server's file transfer port (default `30033`) and sends the `ftkey` to authenticate the transfer. Raw bytes flow over this TCP stream. - -### 2.2 Relevant ServerQuery Commands - -| Command | Direction | Purpose | -|---|---|---| -| `ftinitdownload` | Client → Server | Initialize a download. Returns `ftkey`, `port`, `size`. | -| `ftgetfileinfo` | Client → Server | Get metadata for one or more files. | -| `ftgetfilelist` | Client → Server | List files in a channel's file repository. | -| `ftinitupload` | Client → Server | Initialize an upload. | -| `ftlist` | Client → Server | List active file transfers. | -| `ftstop` | Client → Server | Stop a running transfer. | -| `ftdeletefile` | Client → Server | Delete a file. | -| `ftcreatedir` | Client → Server | Create a directory. | -| `ftrenamefile` | Client → Server | Rename or move a file. | - -Initial scope uses only `ftinitdownload` and `ftgetfileinfo`. - -### 2.3 File Paths - -Files are addressed by a path scoped to a channel ID (`cid`): - -- `cid=0` — Server-level file repository. Avatars and icons live here. -- `cid=N` (non-zero) — Channel-specific file repository. - -Avatar path: `/avatar_` where `` is derived from the client's unique identifier (UID). Each byte of the base64-decoded UID is split into two nibbles, and each nibble maps to a letter `a` through `p` (0→a, 1→b, ..., 15→p). - -Icon path: `/icon_` where `` is the icon's signed 64-bit integer ID. If negative, treat as unsigned for the path. - -### 2.4 `ftinitdownload` Command - -``` -ftinitdownload clientftfid={id} name={path} cid={channelId} cpw={password} seekpos={seek} proto=0 -``` - -Parameters: - -| Parameter | Type | Description | -|---|---|---| -| `clientftfid` | `u16` | Arbitrary client-side transfer ID. | -| `name` | `string` | File path, e.g. `/avatar_abcdef`. | -| `cid` | `ChannelId` | Channel scope (0 = server). | -| `cpw` | `string` | Channel password. Empty for server-level. | -| `seekpos` | `u64` | Resume offset. 0 for a fresh download. | -| `proto` | `u8` | Protocol version. Always 0. | - -Server response: - -| Field | Type | Description | -|---|---|---| -| `clientftfid` | `u16` | Echo of the client transfer ID. | -| `serverftfid` | `u16` | Server-side transfer ID. | -| `ftkey` | `string` | One-time transfer key (hex). | -| `port` | `u16` | File transfer TCP port (usually 30033). | -| `size` | `u64` | File size in bytes. | -| `proto` | `u8` | Protocol version echo. | -| `ip` | `string` (optional) | Override IP for the TCP connection. | - -### 2.5 TCP Transfer - -After receiving the `ftkey`, the client: - -1. Opens a TCP connection to `server_ip:port`. -2. Sends `ftkey` followed by a newline. -3. Reads exactly `size` bytes of raw file data. -4. Closes the TCP connection. - -### 2.6 Permissions - -File transfer requires the following permissions on the server: - -| Permission | Needed for | -|---|---| -| `i_ft_file_download_power` | Downloading files. | -| `i_ft_needed_file_download_power` | Required download power on the channel/server. | -| `b_ft_ignore_password` | Bypassing channel passwords (not needed for avatars). | - -Avatar downloads typically require only basic download power because avatars are in the server-level repository (`cid=0`), which is generally accessible. - -### 2.7 Avatar Detection - -When a client connects or updates, the server sends `client_flag_avatar` as a string (the avatar hash). If non-empty, the client has an avatar. The avatar is downloaded from `/avatar_` where `` is computed from the client's UID (not from the hash string itself — the hash is just a presence indicator). - -## 3. tsclientlib Support - -`tsclientlib` implements file transfer natively. The library handles the entire command + TCP flow internally: - -### 3.1 Public API - -```rust -// tsclientlib/src/lib.rs (relevant signatures) -impl Connection { - pub fn download_file( - &mut self, - channel_id: ChannelId, - path: &str, - channel_password: Option<&str>, - seek_position: Option, - ) -> Result; - - pub fn upload_file( - &mut self, - channel_id: ChannelId, - path: &str, - channel_password: Option<&str>, - size: u64, - overwrite: bool, - resume: bool, - ) -> Result; -} -``` - -`download_file` sends the `ftinitdownload` command and returns a `FiletransferHandle(u16)` immediately. The actual transfer completes asynchronously. - -### 3.2 Stream Items - -The connection's event stream emits: - -| StreamItem | When | Data | -|---|---|---| -| `StreamItem::FileDownload(FileDownloadResult)` | Server responds with `ftkey`; TCP connected and `ftkey` written | `{ size: u64, stream: TcpStream }` | -| `StreamItem::FileUpload(FileUploadResult)` | Upload ready | `{ seek_position: u64, stream: TcpStream }` | -| `StreamItem::FiletransferFailed(FiletransferHandle, Error)` | Transfer failed | Handle + error | - -When `FileDownload` fires, tsclientlib has already: - -1. Sent `ftinitdownload` over the encrypted UDP command channel. -2. Received the `ftkey`, `port`, and `size` from the server. -3. Opened a TCP connection to `server:port`. -4. Written the `ftkey` to the TCP socket. - -The `TcpStream` in `FileDownloadResult` is ready to read; Chanora only needs to read exactly `size` bytes. - -### 3.3 Avatar Helper - -`tsproto-types` provides `Uid::as_avatar()` which computes the avatar filename from a UID. Chanora's existing `uid_to_avatar_path()` in `adapter.rs` does the same thing independently. - -### 3.4 Doc-Comment Examples - -tsclientlib's source contains usage examples in doc comments: - -```rust -/// Download an icon: -/// con.download_file(ChannelId(0), &format!("/icon_{}", icon_id), None, None) - -/// Upload an avatar: -/// con.upload_file(ChannelId(0), "/avatar", None, data.len() as u64, true, false) -``` - -## 4. Architecture Integration - -### 4.1 Existing Pattern - -The protocol adapter (`crates/chanora_protocol`) uses a single tokio task that owns the `tsclientlib::Connection`. All operations follow this pattern: - -1. Define a `Request` enum variant with parameters and a `oneshot::Sender` for the reply. -2. Send the request through the `mpsc` channel to the connection task. -3. The connection task calls tsclientlib and resolves the oneshot. - -File transfer fits this pattern exactly. The only difference is that the result arrives asynchronously via `StreamItem::FileDownload` rather than immediately from the command call. - -### 4.2 Design - -The file transfer integration adds: - -1. **`Request` variants** for file download. -2. **A pending-downloads map** (`HashMap`) in the connection task, mirroring the existing `pending_moves` pattern. -3. **`StreamItem::FileDownload` and `StreamItem::FiletransferFailed`** handling in the event loop. -4. **New DTOs** for file transfer results. -5. **Convenience methods** on `ProtocolClient` for avatar and icon downloads. - -### 4.3 Layer Responsibilities - -| Layer | Responsibility | -|---|---| -| `chanora_protocol` | Call `tsclientlib::download_file`, track pending transfers, read `TcpStream`, return bytes. No tsclientlib types leak. | -| `chanora_core` | Orchestrate when to download (e.g., on profile fetch or on avatar cache miss). | -| `chanora_bridge` | Expose typed `download_avatar` / `download_icon` commands to Flutter. | -| Flutter UI | Call bridge, display with `Image.memory()`. Cache in memory/image cache. | - -### 4.4 Error Mapping - -File transfer errors map to the existing `ProtocolError` variants: - -| tsclientlib error | ProtocolError | -|---|---| -| Permission denied (TS3 error code) | `ServerRejected { code, message }` | -| File not found | `ServerRejected { code, message }` | -| Network/TCP failure | `Backend(String)` | -| Timeout | `Timeout` | -| Connection lost mid-transfer | `Lost(String)` | - -## 5. Detailed Design - -### 5.1 New Types in `dto.rs` - -```rust -/// A downloaded file's raw content and metadata. -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct DownloadedFile { - /// Raw file bytes. - pub data: Vec, - /// The server path that was requested. - pub path: String, - /// Channel ID the file was downloaded from. - pub channel_id: u64, -} -``` - -### 5.2 New Request Variants in `adapter.rs` - -```rust -enum Request { - // ... existing variants ... - - /// Download a file from the server's file repository. - DownloadFile { - /// Channel ID. 0 for server-level (avatars, icons). - channel_id: u64, - /// File path, e.g. "/avatar_abcdef" or "/icon_12345". - path: String, - /// Channel password. None for server-level files. - channel_password: Option, - /// Reply channel for the result. - reply: oneshot::Sender>, - }, -} -``` - -### 5.3 Pending Downloads Map - -```rust -type PendingDownloads = HashMap; - -struct PendingDownload { - path: String, - channel_id: u64, - reply: oneshot::Sender>, -} -``` - -### 5.4 Event Loop Handling - -In the connection task's main loop, add handling for file transfer stream items: - -```rust -// In handle_non_audio_stream_item or in the main loop: -StreamItem::FileDownload(result) => { - // result: FileDownloadResult { size, stream } - // Look up the handle in pending_downloads - // Use tokio::io::AsyncReadExt::read_exact to read 'size' bytes - // Resolve the oneshot with DownloadedFile -} -StreamItem::FiletransferFailed(handle, error) => { - // Look up the handle in pending_downloads - // Resolve the oneshot with ProtocolError::Backend -} -``` - -The TCP read from the `TcpStream` is an async operation. Since the connection task already runs in a tokio context, the read can be done inline. However, for large files this would block the main event loop. Two approaches: - -**Option A: Read inline (simple, good for small files like avatars)** - -Avatars are typically under 100 KB. Reading them inline in the event loop is acceptable and avoids complexity. - -**Option B: Spawn a reader task** - -For future channel-file-browser support with potentially large files, spawn a separate tokio task that reads the stream and sends the result back. - -**Recommendation:** Start with Option A. The initial scope is avatars and icons (small files). Refactor to Option B when channel file browsing is implemented. - -### 5.5 Request Handling - -When the connection task receives `Request::DownloadFile`: - -```rust -Ok(Request::DownloadFile { channel_id, path, channel_password, reply }) => { - let ts_channel_id = TsChannelId(channel_id); - match con.download_file(ts_channel_id, &path, channel_password.as_deref(), None) { - Ok(handle) => { - pending_downloads.insert(handle, PendingDownload { - path, - channel_id, - reply, - }); - } - Err(e) => { - let _ = reply.send(Err(ProtocolError::Backend( - format!("download_file init: {e}") - ))); - } - } -} -``` - -### 5.6 Public API on `ProtocolClient` - -```rust -impl ProtocolClient { - /// Download a file from the server's file repository. - /// `channel_id` 0 means server-level (avatars, icons). - pub async fn download_file( - &self, - channel_id: u64, - path: String, - channel_password: Option, - ) -> Result { - let (tx, rx) = oneshot::channel(); - self.tx - .send(Request::DownloadFile { channel_id, path, channel_password, reply: tx }) - .await - .map_err(|_| ProtocolError::Lost("connection task is gone".to_string()))?; - rx.await - .map_err(|_| ProtocolError::Lost("download_file reply dropped".to_string()))? - } - - /// Download a client's avatar image. Returns raw image bytes. - /// Pass the `avatar_path` from `ClientProfile`. - pub async fn download_avatar( - &self, - avatar_path: String, - ) -> Result { - self.download_file(0, avatar_path, None).await - } - - /// Download a server, channel, or client icon by its icon ID. - pub async fn download_icon( - &self, - icon_id: i64, - ) -> Result { - let unsigned_id = icon_id as u64; - let path = format!("/icon_{}", unsigned_id); - self.download_file(0, path, None).await - } -} -``` - -### 5.7 Exports in `lib.rs` - -```rust -pub use dto::DownloadedFile; -``` - -### 5.8 Bridge Layer - -In `crates/chanora_bridge/src/api.rs`, add: - -```rust -pub async fn download_avatar(&self, avatar_path: String) -> Result, BridgeError> { - self.protocol - .download_avatar(avatar_path) - .await - .map(|file| file.data) - .map_err(BridgeError::Protocol) -} -``` - -### 5.9 Flutter Integration - -Flutter side: - -1. Call `clientProfile()` to get `ClientProfile` (already exists). -2. Check if `avatarPath` is non-empty. -3. Call bridge `downloadAvatar(avatarPath)` to get `Uint8List`. -4. Display with `Image.memory(bytes)`. - -Caching strategy: - -- In-memory: Use Flutter's standard `ImageCache` or a simple `Map` keyed by avatar path. -- Disk: Consider caching to local storage for offline display. This is a follow-up decision, not MVP scope. -- The avatar path already encodes the UID, so it can serve as a cache key. - -## 6. Avatar Path Computation - -Chanora already has this implemented in `adapter.rs`: - -```rust -fn uid_to_avatar_path(uid_b64: &str) -> String { - let decoded = BASE64_STANDARD.decode(uid_b64).unwrap_or_default(); - let mut rendered = String::with_capacity(decoded.len() * 2); - for byte in decoded { - rendered.push((b'a' + (byte >> 4)) as char); - rendered.push((b'a' + (byte & 0x0f)) as char); - } - rendered -} -``` - -This maps each nibble to `a` through `p` (0→a, 1→b, ..., 15→p), matching the canonical TeamSpeak implementation. - -The full avatar path is constructed as: - -```rust -let avatar_path = if client.avatar_hash.is_empty() || unique_id.is_empty() { - String::new() -} else { - format!("/avatar_{}", uid_to_avatar_path(&unique_id)) -}; -``` - -This is already correct and used in `ClientProfile.avatar_path`. No changes needed. - -## 7. Threading and Concurrency - -| Concern | Design | -|---|---| -| TCP read blocking the event loop | For avatar/icon sizes (< 100 KB typically), inline async read is acceptable. Spawn a reader task for larger files when channel file browsing is added. | -| Multiple concurrent downloads | `pending_downloads` is a HashMap keyed by `FiletransferHandle`. Multiple downloads can be in flight simultaneously. tsclientlib assigns unique handles. | -| Download timeout | Add a deadline to pending downloads (e.g., 30 seconds). Sweep expired entries similar to the existing `pending_moves` sweep. | -| Cancellation on disconnect | When the connection task exits, all pending oneshot senders are dropped, which resolves the caller's await with a `RecvError`. The caller maps this to `ProtocolError::Lost`. | - -## 8. Diagnostic and Security Considerations - -### 8.1 Diagnostic Redaction - -- File transfer paths may contain user-identifying information (UID-derived avatar names). These should be registered for diagnostic redaction if they appear in log output. -- File contents (avatar images) must not appear in log output or diagnostic exports. - -### 8.2 Security - -- The `ftkey` is a one-time token and must not be logged. -- TCP file transfer connections are not encrypted. This is a TeamSpeak protocol limitation, not a Chanora design choice. Avatar data is public (visible to anyone on the server), so the risk is acceptable. -- File download does not require secrets beyond the existing authenticated connection. - -### 8.3 Privacy - -- Avatar downloads reveal to the server that the user is viewing a specific client's avatar. This is inherent in the protocol. -- Chanora should not download avatars proactively for all clients. Download only when the UI needs to display a specific avatar (lazy/on-demand). - -## 9. Out of Scope - -The following are explicitly deferred: - -- File upload (avatar upload, channel file upload). -- Channel file browser (listing, creating directories, deleting, renaming). -- Resumable downloads (seek position > 0). -- File transfer progress reporting. -- myTeamSpeak avatar resolution (the `client_myteamspeak_avatar` field). -- In-memory hot cache in Rust (Flutter's `ImageCache` handles decoded image caching; add Rust-side layer only if profiling shows need). -- Upload, file browser, and channel file management. - -## 10. Cache Architecture - -### 10.1 Layer Ownership - -| Layer | Responsibility | Storage | -|---|---|---| -| `chanora_protocol` | Download raw bytes from server. No caching logic. | None | -| `chanora_cache` | Content-addressed blob store backed by `cacache`: crash-safe writes, SSRI integrity verification, key validation, eviction, clear. Separate crate from `chanora_storage`. | Platform cache directory | -| `chanora_core` | Session-aware cache orchestration: check freshness, coalesce requests, rate-limit downloads, persist to disk via `chanora_cache`. | Delegates to `chanora_cache` | -| `chanora_bridge` | Expose typed `download_avatar` / `clear_file_cache` / `file_cache_size` to Flutter. | None | -| Flutter | Display via `Image.memory`. Standard `ImageCache` for hot memory caching. Evict from `ImageCache` when hash changes. | In-memory only | - -### 10.2 Why Separate `chanora_cache` Crate - -`chanora_cache` is a separate crate from `chanora_storage` for three reasons: - -1. **Different durability semantics.** `chanora_storage` holds identity, bookmarks, and connection profiles — data the user explicitly created. `chanora_cache` holds downloaded blobs that are fully reconstructible from the server. Losing the cache is an inconvenience, not data loss. -2. **Different backup semantics.** Cache should be excluded from backups; persistent storage should be included. Platform conventions (iOS `Library/Caches/` vs `Library/Application Support/`) reflect this distinction. -3. **Different directory placement.** Cache lives in the platform's cache directory (OS may evict under storage pressure on mobile). Persistent storage lives in the support directory. - -The cache wraps the `cacache` crate for production-tested crash safety and integrity verification. It does not share `chanora_storage`'s crate or directory, and does not reimplement cacache's atomic write or content-addressing logic. - -### 10.3 Why Hybrid (Rust Disk + Flutter Memory) - -- Flutter's built-in `ImageCache` is an LRU in-memory cache (default 1000 images / 100 MiB). It handles hot display caching automatically when you use `MemoryImage`. -- Flutter has no built-in disk cache. `cached_network_image` / `flutter_cache_manager` are designed for HTTP URLs, not custom binary protocol data. -- Rust already owns the protocol, the connection state, and the anti-flood budget. Putting disk cache here avoids a feedback loop across the bridge. - -### 10.4 Cache Storage - -`chanora_cache` wraps the `cacache` crate for its on-disk storage. The physical layout is managed by `cacache`: - -``` -/chanora/ - blobs/ ← cacache content store root - content-v2/ ← content-addressed by SHA-512 - / - data ← raw blob bytes - tmp/ ← temp files (in-flight writes) - index-v2/ ← entry index (key → content mapping) -``` - -Chanora's `BlobCache` maps protocol keys to `cacache` string keys: - -| Protocol key | cacache key | Example | -|---|---|---| -| Avatar MD5 | `"av_"` | `"av_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"` | -| Icon CRC32 | `"ic_"` | `"ic_123456789"` | - -**Why `cacache`:** - -1. **Crash safety.** Production-tested atomic writes (temp → rename). Handles partial writes, power loss, crash mid-write. No custom crash safety code to maintain. -2. **Integrity verification.** SSRI integrity check on every `read()`. Detects corruption, bit rot, partial writes automatically. Better than custom "delete on read failure". -3. **Content dedup.** Same bytes stored once regardless of key. Same avatar on two servers = stored once automatically. -4. **Less code to maintain.** ~120 LOC wrapper vs ~200 LOC custom implementation. Crash safety and integrity are the hard parts — `cacache` owns them. - -**Why no `` subdirectory:** The protocol uses content-addressed identifiers. `client_flag_avatar` is the MD5 of the avatar bytes — a given avatar hash always maps to the same bytes regardless of which server the user is on. Same avatar on two servers = same content = stored once by `cacache`. This is a deliberate dedup advantage over per-server namespacing. - -**Why no metadata sidecars:** Content is immutable (a given hash always maps to the same bytes). `cacache` manages its own entry index with timestamps. No custom metadata files needed. - -**Key validation rules:** - -| Prefix | Key format | Validation | -|---|---|---| -| `av_` | `av_<32 hex chars>` | MD5 is exactly 32 hex characters | -| `ic_` | `ic_<1-10 digit number>` | CRC32 unsigned, 0–4294967295 | - -Keys failing validation are rejected at the `BlobCache` API boundary. This prevents path traversal or malformed filenames on disk. - -**Platform paths** (Flutter passes the base directory into Rust at startup, matching the existing `initStorage` pattern): - -| Platform | Cache directory | -|---|---| -| Android | `context.cacheDir/chanora/` (via `getCacheDir()`) | -| iOS | `Library/Caches/chanora/` (via `getApplicationCacheDirectory()`) | -| macOS | `~/Library/Caches/chanora/` | -| Windows | `%LOCALAPPDATA%/chanora/cache/` | -| Linux | `$XDG_CACHE_HOME/chanora/` or `~/.cache/chanora/` | - -Flutter already resolves platform-specific paths. The same `getApplicationCacheDirectory()` call that is available in `path_provider` across all Chanora target platforms should be used. This follows the existing pattern where `app_bootstrap.dart` calls `getApplicationSupportDirectory()` for persistent storage; avatar/icon cache uses the cache-equivalent directory instead. - -The cache init call is separate from storage init: - -```rust -// Bridge init (Flutter calls these at startup) -pub fn init_storage(support_dir: String) -> Result<(), BridgeError>; // existing -pub fn init_cache(cache_dir: String) -> Result<(), BridgeError>; // new -``` - -### 10.5 Cache Freshness Strategy - -The `client_flag_avatar` field on each client is the authoritative freshness signal: - -``` -On connect / on client list update: - For each visible client with non-empty avatar_hash: - cache_key = "av_" - if cacache entry exists for "av_": - use cached file (zero downloads) - else: - enqueue download for avatar_path with expected hash = avatar_hash - -On avatar_hash change for a client: - The new hash produces a different cacache key. - The old entry remains until eviction or manual clear. - The new file is downloaded on demand. -``` - -This means: - -- **First connect:** No cache hits. Downloads happen lazily as the UI requests avatars. -- **Reconnect to same server:** All avatars hit cache instantly (hashes match keys). Zero downloads. -- **User changes avatar:** New hash = new cache key. Old entry becomes orphan. New file downloads on next UI request. -- **Same user on different server:** Same avatar hash = same cached file. Cross-server dedup for free. - -### 10.6 Anti-Flood and Download Timing - -TeamSpeak servers enforce anti-flood rate limiting. Downloading all avatars eagerly on connect would trigger it on servers with many users. - -**Strategy: lazy + throttled prefetch** - -| Phase | What | Rate | -|---|---|---| -| Connect settle (first 2-5 s) | Do nothing. Let the initial state snapshot and channel tree arrive. | — | -| After settle | UI requests avatars for visible clients in the current channel. These trigger downloads one at a time. | Max 1-2 concurrent downloads per server | -| Channel switch | UI requests avatars for newly visible clients. | Same throttle | -| Background prefetch (optional, future) | Low-priority downloads for clients in adjacent channels. | 1 request per 500 ms | - -**Anti-flood handling:** - -- If the server responds with an anti-flood error (TS3 error code `0x0701` = `client_could_not_be_banned` / flood-related), back off the download queue. -- Implement a simple semaphore in `chanora_core`: max 1-2 concurrent downloads. -- If a download gets a flood error, pause the queue for 5 seconds, then resume at reduced rate. - -### 10.7 Retry on Failure - -| Failure type | Strategy | -|---|---| -| Transient (network timeout, TCP reset) | Retry with exponential backoff: 5 s, 30 s, 2 min, 10 min. Cap at 10 min. | -| Server flood limit hit | Pause queue 5 s, then resume at reduced rate. Do not count as a per-file retry. | -| Permission denied (no download power) | Do not retry. Record negative cache entry. Only retry if hash changes. | -| File not found (avatar removed) | Do not retry. Record negative cache entry. Clear when hash changes or becomes empty. | -| Connection lost | All pending downloads fail. On reconnect, cache check runs fresh with current hashes. | - -**Negative cache:** In-memory `HashMap` with 5-minute TTL. Keys like `"av_"` or `"ic_"` that received permanent errors are stored with an expiry. On lookup, expired entries are treated as absent. Cleared entirely on reconnect. - -### 10.8 Request Coalescing - -Multiple UI widgets may request the same avatar simultaneously (e.g., channel list + chat view + client info sheet). - -**Pattern:** In `chanora_core`'s `FileTransferService`, maintain an in-flight map: - -```rust -HashMap, FileTransferError>>> -``` - -- First request: start download, store handle. -- Subsequent requests for same key: await the same handle. -- When handle completes: write to cache, wake all waiters, remove from map. - -### 10.9 Cache Eviction and Size Limits - -**MVP approach:** - -- No automatic size-based eviction in MVP. Avatars are small (typically 10-100 KB). Even 1000 avatars = ~50-100 MB. -- Rely on platform cache directory semantics (OS may evict under storage pressure on mobile). -- Old hash files accumulate but are harmless. - -**Post-MVP:** - -- `BlobCache::evict(max_bytes)` — walk `cacache::ls()` entries, sort by timestamp (oldest first), delete until total size < `max_bytes`. `cacache` manages timestamps internally. No metadata sidecars needed. -- Or simpler: `BlobCache::evict_older_than(duration)` — delete entries with timestamp older than N days. -- Call on startup and periodically (e.g., every 24 hours or on app resume). - -### 10.10 User-Initiated Cache Clear - -Add a bridge method: - -```rust -pub fn clear_file_cache(&self) -> Result<(), BridgeError> { - // Delete the entire blobs/ directory contents - // Flutter evicts all avatar/icon-related entries from ImageCache -} - -pub fn file_cache_size(&self) -> Result { - // Walk blobs/ and sum file sizes -} -``` - -Flutter side: - -```dart -// In settings or storage management UI: -onPressed: () async { - await api.clearFileCache(); - PaintingBinding.instance.imageCache.clear(); -} -``` - -This should be exposed in the app's settings UI under a "Clear cache" or "Storage management" section. - -### 10.11 Storage Clear Across Servers - -Since the cache is flat with content-addressed keys (no server namespacing): - -- Connecting to a different server does not conflict — same avatar hash = same file. -- Avatars unique to the old server remain cached. If a user on the new server has the same avatar (same hash), it hits cache instantly (cross-server dedup). -- Cache clear removes all cached data regardless of which server it came from. - -### 10.12 Flutter Display Strategy - -**Option A: Bytes across bridge (simpler, recommended for MVP)** - -Rust returns `Vec` across the bridge. Flutter uses `Image.memory(bytes)`. - -```dart -final bytes = await api.downloadAvatar(clientUid: uid); -if (bytes != null && bytes.isNotEmpty) { - return Image.memory(Uint8List.fromList(bytes)); -} else { - return CircleAvatar(child: Text(initials)); // fallback -} -``` - -Flutter's `ImageCache` caches the decoded image in memory automatically. Same avatar bytes = cache hit in memory. - -**Option B: File path across bridge (better for large images, future)** - -Rust writes to disk and returns the file path. Flutter uses `FileImage`. - -```dart -final path = await api.getAvatarPath(avatarHash: hash); -if (path != null) { - return Image.file(File(path)); -} else { - return CircleAvatar(child: Text(initials)); -} -``` - -`FileImage` does not watch for file changes. When the hash changes, the UI must evict the old entry from `ImageCache` using `PaintingBinding.instance.imageCache.evict(key)`. - -**Recommendation:** Start with Option A for MVP. It avoids file-path cross-platform complications and works well for small avatar files. The bridge already returns `Vec` for the download result. - -## 11. Implementation Sequence - -| Phase | Scope | What | -|---|---|---| -| Phase 1 | Protocol download | `Request::DownloadFile`, `StreamItem::FileDownload` handling, `ProtocolClient::download_avatar()` / `download_icon()`. No caching. | -| Phase 2 | Bridge + Flutter display | Bridge `downloadAvatar()`, Flutter `Image.memory()`, initials fallback. Still no caching — every view re-downloads. | -| Phase 3 | Rust disk cache | New `chanora_cache` crate: `cacache`-backed content-addressed blob store (`BlobCache`), key validation, mtime-based eviction, `init_cache` bridge call. | -| Phase 4 | Session orchestration | `chanora_core` `FileTransferService`: request coalescing, rate limiter (semaphore), negative cache (5 min TTL), retry backoff. | -| Phase 5 | Cache management | Bridge `clearFileCache()` + `fileCacheSize()`, Flutter settings UI, eviction on startup. | - -Phase 1 and 2 deliver visible value (avatars in the UI). Phase 3-5 add robustness. - -## 12. References - -| Reference | Use | -|---|---| -| `ReSpeak/tsdeclarations` `Messages.toml` lines 828-830 | `ftinitdownload` command declaration | -| `ReSpeak/tsdeclarations` `Messages.toml` lines 590 | `FileDownload` response structure | -| `ReSpeak/tsdeclarations` `ts3protocol.md` | Low-level TeamSpeak protocol specification | -| `ReSpeak/tsclientlib` `src/lib.rs` lines 956-1005 | `download_file` / `upload_file` public API | -| `ReSpeak/tsclientlib` `src/lib.rs` lines 1371-1427 | `StreamItem::FileDownload` handling | -| `ReSpeak/tsclientlib` `src/lib.rs` lines 1630-1672 | Outgoing init commands | -| `Multivit4min/TS3-NodeJS-Library` `src/transport/FileTransfer.ts` | Reference TCP transfer implementation | -| `Speckmops/ts3admin.class` `lib/ts3admin.class.php` lines 1352-1370 | Reference avatar download flow | -| `docs/architecture/sad.md` SAD-067, SDD-MOD-009 | Protocol adapter boundary rules | -| `crates/chanora_protocol/src/adapter.rs` lines 1561-1568 | Existing `uid_to_avatar_path` implementation | diff --git a/docs/architecture/file-transfer-implementation-plan.md b/docs/architecture/file-transfer-implementation-plan.md deleted file mode 100644 index ba821e5..0000000 --- a/docs/architecture/file-transfer-implementation-plan.md +++ /dev/null @@ -1,1315 +0,0 @@ -# File Transfer Implementation Plan - -> Status: **Draft — revised after cache research (2026-06-10)** -> Created: 2026-06-10 -> Revised: 2026-06-10 — cache architecture overhauled per crate comparison, cross-platform dir research, and Oracle consultation -> Upstream: `docs/architecture/file-transfer-design.md`, `docs/architecture/file-transfer-research.md` - -## 0. Overview - -This document decomposes the file transfer system (avatar/icon download + caching) into five sequential phases with concrete file-level changes, function signatures, and verification criteria. - -**Scope**: Download only. No upload, no file browser. - -**Architecture recap**: Content-addressed blob store backed by `cacache`. Protocol keys (`av_`, `ic_`) map to cacache string keys. Physical storage is SHA-512 content-addressed. Same content on any server = stored once = zero duplication. - ---- - -## 1. Phase Summary - -| Phase | Crate | What | Delivers | Est. LOC | -|---|---|---|---|---| -| 1 | `chanora_protocol` | `Request::DownloadFile`, `StreamItem::FileDownload` handling, `ProtocolClient::download_avatar()` / `download_icon()` | Raw download across the protocol boundary | ~180 | -| 2 | `chanora_bridge` + Flutter | Bridge `downloadAvatar()`, Flutter `Image.memory()` + initials fallback | Avatars visible in the UI (no caching — every view re-downloads) | ~100 | -| 3 | `chanora_cache` (NEW crate) | `BlobCache` — flat content-addressed blob store, no metadata files, eviction by file mtime | Disk cache, zero duplication, no deps | ~150 | -| 4 | `chanora_core` | `FileTransferService` — request coalescing, rate limiter (1-2 concurrent), negative cache, retry backoff | Robust production download pipeline | ~250 | -| 5 | `chanora_bridge` + Flutter | `clearAvatarCache()`, `clearIconCache()`, settings UI, startup eviction | Cache management | ~80 | - -Phases 1 + 2 deliver visible value (avatars in the UI). Phases 3–5 add robustness. - ---- - -## 2. Phase 1 — Protocol Download - -### 2.1 Goal - -Add a `DownloadFile` request variant to the protocol adapter's `Request` enum. Handle `StreamItem::FileDownload` in the connection task's event loop. Expose `download_avatar()` and `download_icon()` on `ProtocolClient`. - -### 2.2 Files to Modify - -#### `crates/chanora_protocol/src/adapter.rs` - -**2.2.1 Add `Request::DownloadFile` variant** (after `FetchClientProfile` at line ~209) - -```rust -/// Download a file from the server's file transfer subsystem. -/// Returns the complete file bytes on success. -DownloadFile { - /// Channel ID the file resides in (0 for server-level files). - channel_id: u64, - /// File path on the server (e.g. "/avatar_" or "/icon_"). - path: String, - /// Optional channel password for password-protected channels. - password: Option, - /// Reply channel for the result. - reply: oneshot::Sender, ProtocolError>>, -}, -``` - -**2.2.2 Add `ProtocolClient::download_file()` method** (after `send_text_message` at line ~545) - -```rust -/// Download a file from the server. Returns the complete file bytes. -pub async fn download_file( - &self, - channel_id: u64, - path: String, - password: Option, -) -> Result, ProtocolError> { - let (tx, rx) = oneshot::channel(); - self.tx - .send(Request::DownloadFile { - channel_id, - path, - password, - reply: tx, - }) - .await - .map_err(|_| ProtocolError::Lost("connection task is gone".to_string()))?; - rx.await - .map_err(|_| ProtocolError::Lost("download_file reply dropped".to_string()))? -} -``` - -**2.2.3 Add convenience wrappers** (after `download_file`) - -```rust -/// Download a client avatar. `uid_hex` is the hex-encoded client UID -/// (as produced by `uid_to_avatar_path`). -pub async fn download_avatar( - &self, - client_uid: &str, -) -> Result, ProtocolError> { - let path = uid_to_avatar_path(client_uid); - self.download_file(0, path, None).await -} - -/// Download an icon by its unsigned CRC32 ID. -pub async fn download_icon( - &self, - icon_id: u64, -) -> Result, ProtocolError> { - let path = format!("/icon_{icon_id}"); - self.download_file(0, path, None).await -} -``` - -**2.2.4 Handle `Request::DownloadFile` in the main loop** (in the `rx.try_recv()` match block, after `FetchClientProfile` around line 840) - -```rust -Ok(Request::DownloadFile { - channel_id, - path, - password, - reply, -}) => { - let r = download_file_from_server( - &mut con, - channel_id, - &path, - password.as_deref(), - ).await; - let _ = reply.send(r); -} -``` - -**2.2.5 Add `download_file_from_server` function** - -```rust -/// Execute a file download via tsclientlib's download_file API. -/// Reads the entire TCP stream into a Vec. -async fn download_file_from_server( - con: &mut Connection, - channel_id: u64, - path: &str, - password: Option<&str>, -) -> Result, ProtocolError> { - let pw = password.unwrap_or(""); - let mut stream = con - .download_file(TsChannelId(channel_id), path, pw, 0) - .await - .map_err(|e| ProtocolError::Backend(format!("download_file init: {e}")))?; - - let mut buf = Vec::new(); - while let Some(item) = stream.next().await { - match item { - Ok(StreamItem::FileDownload(result)) => { - // Read the TcpStream into buf. - let mut reader = tokio::io::BufReader::new(result.stream); - let size_hint = result.size as usize; - if size_hint > 0 && size_hint < 32 * 1024 * 1024 { - buf.reserve(size_hint); - } - tokio::io::copy_to_bytes(&mut reader) - .await - .map_err(|e| ProtocolError::Backend(format!("download read: {e}")))?; - // Note: actual implementation needs to accumulate into buf, - // not use copy_to_bytes directly. See implementation note below. - } - Ok(_) => {} // other stream items during download - Err(e) => { - return Err(ProtocolError::Backend(format!("download stream: {e}"))); - } - } - } - Ok(buf) -} -``` - -> **Implementation note**: The exact tsclientlib `download_file` API signature and `StreamItem::FileDownload` handling needs to be verified against the pinned revision. The function above shows the intent; the actual implementation may differ based on whether `download_file` returns a `TcpStream` directly or wraps it in a `StreamItem`. The research doc (§3) confirmed: `download_file(ChannelId, path, password, seek)` → `StreamItem::FileDownload(FileDownloadResult { size, stream: TcpStream })`. The implementation reads `TcpStream` bytes until EOF. - -**2.2.6 Handle `StreamItem::FileDownload` in `handle_non_audio_stream_item`** - -Currently `handle_non_audio_stream_item` ignores `StreamItem::FileDownload` (the catch-all `_ => {}` at line 1023). Once we have async download requests dispatched through the main loop, file download responses arrive here. - -However, the tsclientlib `download_file` call is synchronous-blocking (it initiates the transfer and returns a stream handle). The `StreamItem::FileDownload` appears on the event stream as a *notification* that the server accepted the transfer. The actual data transfer happens on a separate TCP connection. - -The exact integration pattern depends on tsclientlib's API: -- If `download_file()` returns a `impl Stream>`, we drain it inside `download_file_from_server`. -- If the file download items arrive on the main `con.events()` stream, we need a pending-download tracking map (similar to `pending_moves`). - -**Decision**: Defer the exact tsclientlib integration to implementation time. The research doc confirmed the API shape; the implementation agent will verify against the actual pinned tsclientlib source. - -### 2.3 Verification - -- [ ] `cargo test -p chanora_protocol` passes -- [ ] `cargo clippy -p chanora_protocol` clean -- [ ] Manual: connect to server, call `download_avatar(uid)` → returns `Vec` with image data -- [ ] Error path: download nonexistent avatar → `ProtocolError` returned cleanly - -### 2.4 Risks - -| Risk | Mitigation | -|---|---| -| tsclientlib `download_file` API differs from assumed shape | Implementation agent reads pinned tsclientlib source before writing code | -| File transfer TCP stream blocks the main event loop | `download_file_from_server` runs as async; the main loop continues on the next iteration | -| Large file OOM | Cap download at 32 MB; return `ProtocolError::Backend` if exceeded | - ---- - -## 3. Phase 2 — Bridge + Flutter Display - -### 3.1 Goal - -Expose avatar download through the Flutter/Rust bridge. Display avatars in the Flutter UI using `Image.memory()`. No caching yet — every avatar view triggers a fresh download. - -### 3.2 Files to Modify - -#### `crates/chanora_bridge/src/api.rs` - -**3.2.1 Add bridge function `download_avatar`** (after `client_profile` around line 660) - -```rust -/// Download a client avatar by UID. Returns raw image bytes (PNG/JPEG). -/// Returns `None` if the client has no avatar or the download fails -/// without a protocol-level error. -pub async fn download_avatar(client_uid: String) -> Result>, BridgeError> { - runtime() - .spawn(async move { session().download_avatar(&client_uid).await }) - .await - .map_err(|e| task_join_error("download_avatar", e))? - .map(|opt| opt.map(|bytes| bytes)) -} -``` - -**3.2.2 Add bridge function `download_icon`** - -```rust -/// Download an icon by its unsigned CRC32 ID. Returns raw image bytes. -pub async fn download_icon(icon_id: u64) -> Result>, BridgeError> { - runtime() - .spawn(async move { session().download_icon(icon_id).await }) - .await - .map_err(|e| task_join_error("download_icon", e))? -} -``` - -#### `crates/chanora_core/src/lib.rs` (or wherever `ChanoraSession` lives) - -**3.2.3 Add session methods** - -```rust -pub async fn download_avatar(&self, client_uid: &str) -> Result>, CoreError> { - let handle = self.protocol_handle()?; - match handle.download_avatar(client_uid).await { - Ok(bytes) => Ok(Some(bytes)), - Err(ProtocolError::ServerRejected { .. }) => Ok(None), - Err(e) => Err(CoreError::from(e)), - } -} - -pub async fn download_icon(&self, icon_id: u64) -> Result>, CoreError> { - let handle = self.protocol_handle()?; - match handle.download_icon(icon_id).await { - Ok(bytes) => Ok(Some(bytes)), - Err(ProtocolError::ServerRejected { .. }) => Ok(None), - Err(e) => Err(CoreError::from(e)), - } -} -``` - -#### Flutter side (new files) - -**3.2.4 `apps/chanora_flutter/lib/widgets/avatar_widget.dart`** - -```dart -import 'dart:typed_data'; -import 'package:flutter/material.dart'; -import 'package:chanora_flutter/src/rust/api.dart' as rust; - -/// Widget that displays a client avatar or initials fallback. -/// Phase 2: no caching — re-downloads on every build. -class ClientAvatar extends StatefulWidget { - final String clientUid; - final String displayName; - final double radius; - - const ClientAvatar({ - super.key, - required this.clientUid, - required this.displayName, - this.radius = 20, - }); - - @override - State createState() => _ClientAvatarState(); -} - -class _ClientAvatarState extends State { - Uint8List? _bytes; - bool _loading = false; - - @override - void initState() { - super.initState(); - _loadAvatar(); - } - - @override - void didUpdateWidget(ClientAvatar old) { - super.didUpdateWidget(old); - if (old.clientUid != widget.clientUid) { - _bytes = null; - _loadAvatar(); - } - } - - Future _loadAvatar() async { - if (_loading) return; - setState(() => _loading = true); - try { - final bytes = await rust.downloadAvatar(clientUid: widget.clientUid); - if (mounted && bytes != null) { - setState(() => _bytes = bytes); - } - } catch (_) { - // Silently fall back to initials. - } finally { - if (mounted) { - setState(() => _loading = false); - } - } - } - - String get _initials { - final parts = widget.displayName.trim().split(RegExp(r'\s+')); - if (parts.length >= 2) { - return '${parts[0][0]}${parts[1][0]}'.toUpperCase(); - } - return widget.displayName.isNotEmpty - ? widget.displayName[0].toUpperCase() - : '?'; - } - - @override - Widget build(BuildContext context) { - if (_bytes != null) { - return CircleAvatar( - radius: widget.radius, - backgroundImage: MemoryImage(_bytes!), - ); - } - return CircleAvatar( - radius: widget.radius, - child: Text(_initials), - ); - } -} -``` - -### 3.3 Integration Points - -The `ClientAvatar` widget replaces any existing hardcoded `CircleAvatar` in: -- Client list rows -- Chat message headers -- User profile panels - -**Phase 2 limitation**: Every `initState` triggers a download. Scrolling a list of 100 clients = 100 downloads. This is acceptable for development but NOT for release. Phase 4 (session orchestration) fixes this with coalescing and rate limiting. - -### 3.4 Verification - -- [ ] `flutter_rust_bridge_codegen generate` succeeds (new bridge functions) -- [ ] Flutter app builds without errors -- [ ] Connect to server with avatar users → avatars render -- [ ] Client without avatar → initials fallback renders -- [ ] Scrolling client list does not crash (though it will be slow/chatty) - ---- - -## 4. Phase 3 — Content-Addressed Blob Cache (`chanora_cache`) - -### 4.1 Goal - -Create a new `chanora_cache` crate with a `BlobCache` — a content-addressed store for avatar/icon blobs, backed by the `cacache` crate for production-tested crash safety and integrity verification. Uses the platform **cache directory** (not support directory). - -### 4.2 Design Decisions (post-research) - -| Decision | Choice | Rationale | -|---|---|---| -| Crate placement | New `chanora_cache` crate | Cache is disposable; `chanora_storage` owns persistent identity/bookmark data with different durability and backup semantics | -| Directory | Platform cache dir via `getApplicationCacheDirectory()` | OS may evict under storage pressure; semantically correct for reconstructible data | -| Backing store | `cacache` crate | Production-tested crash safety, SSRI integrity verification on read, async-native, less code to maintain | -| Metadata | None — no JSON sidecar files | `cacache` manages its own content-addressed storage internally. No custom metadata needed. | -| Eviction | `cacache::ls()` + custom mtime sweep | `cacache` has no built-in LRU eviction. Walk entries, sort by mtime, delete oldest until under cap. | -| Integrity | `cacache` SSRI on every read | Detects corruption, bit rot, partial writes automatically. Better than custom "delete on read failure". | -| In-memory hot layer | None for MVP | Flutter's `ImageCache` already caches decoded images. Add Rust-side layer only if profiling shows need | -| Dependencies | `cacache` (~6 transitive deps) | `sha2` already pulled in by `chacha20poly1305` via `chanora_storage`. Crash safety and integrity worth the deps. | - -### 4.3 Storage Layout (on-disk, managed by `cacache`) - -``` -/chanora/ - blobs/ ← cacache content store root - content-v2/ - / ← content-addressed by SHA-512 - data ← raw blob bytes - tmp/ ← cacache temp files (in-flight writes) - index-v2/ ← cacache entry index (key → content mapping) -``` - -`cacache` manages this layout internally. Chanora's `BlobCache` maps protocol keys (`av_`, `ic_`) to `cacache` string keys. Content dedup is automatic — same bytes stored once regardless of key. - -The directory is opaque to Chanora. Inspection is via `BlobCache` API or `cacache::ls()`. - -### 4.4 Files to Create - -#### `crates/chanora_cache/Cargo.toml` (NEW) - -```toml -[package] -name = "chanora_cache" -description = "Chanora disposable content-addressed blob cache for avatars and icons" -version.workspace = true -edition.workspace = true -rust-version.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -publish.workspace = true - -[dependencies] -cacache = "13" -thiserror.workspace = true -tokio.workspace = true -tracing.workspace = true - -[dev-dependencies] -tempfile = "3" -``` - -#### `crates/chanora_cache/src/lib.rs` (NEW — ~120 LOC) - -```rust -//! Disposable content-addressed blob cache for avatar and icon files. -//! -//! Wraps `cacache` for production-tested crash safety and integrity -//! verification. The on-disk layout is managed by cacache (content-v2, -//! index-v2). Chanora maps protocol keys (av_, ic_) to -//! cacache string keys. -//! -//! This crate is intentionally separate from `chanora_storage`: -//! storage owns persistent identity/bookmark data; cache owns -//! reconstructible, disposable blob data with different durability -//! and backup semantics. - -#![forbid(unsafe_code)] -#![warn(missing_docs)] - -use std::path::{Path, PathBuf}; -use tracing::{info, warn}; - -/// Errors raised by the blob cache. -#[derive(Debug, thiserror::Error)] -pub enum BlobCacheError { - /// Filesystem I/O error. - #[error("io: {0}")] - Io(String), - /// Key validation error. - #[error("invalid key: {0}")] - InvalidKey(String), -} - -/// Content-addressed blob cache backed by cacache. -pub struct BlobCache { - cache_dir: PathBuf, - /// Maximum total cache size in bytes. 0 = no limit. - max_bytes: u64, -} - -/// Avatar blob prefix. -pub const PREFIX_AVATAR: &str = "av_"; -/// Icon blob prefix. -pub const PREFIX_ICON: &str = "ic_"; - -impl BlobCache { - /// Create or open a BlobCache rooted at `cache_dir/chanora/`. - /// Creates the cacache directory. `max_bytes` sets the - /// eviction threshold; 0 means no automatic eviction. - pub fn new(cache_dir: impl AsRef, max_bytes: u64) -> Result { - let cache_dir = cache_dir.as_ref().join("chanora").join("blobs"); - // cacache creates the directory on first write, but we - // create it eagerly so total_size() works before any writes. - std::fs::create_dir_all(&cache_dir) - .map_err(|e| BlobCacheError::Io(format!("mkdir cache: {e}")))?; - Ok(Self { cache_dir, max_bytes }) - } - - /// Store a blob. `prefix` is `PREFIX_AVATAR` or `PREFIX_ICON`. - /// `key` is the content hash (MD5 hex for avatars, unsigned - /// decimal CRC32 for icons). - /// - /// cacache handles dedup and integrity internally. - /// This is async because cacache is async-native. - pub async fn put( - &self, - prefix: &str, - key: &str, - data: &[u8], - ) -> Result<(), BlobCacheError> { - validate_key(prefix, key)?; - let cache_key = format!("{prefix}{key}"); - cacache::write(&self.cache_dir, &cache_key, data) - .await - .map_err(|e| BlobCacheError::Io(format!("cacache write: {e}")))?; - Ok(()) - } - - /// Read a blob. Returns `None` if not cached. - /// cacache verifies SSRI integrity on every read. - pub async fn get(&self, prefix: &str, key: &str) -> Result>, BlobCacheError> { - validate_key(prefix, key)?; - let cache_key = format!("{prefix}{key}"); - match cacache::read(&self.cache_dir, &cache_key).await { - Ok(data) => Ok(Some(data)), - Err(cacache::Error::EntryNotFound(_, _)) => Ok(None), - Err(e) => { - // Integrity failure or I/O error — remove corrupt entry. - warn!(target: "chanora_cache", key = %cache_key, error = %e, - "cache read failed; removing entry"); - let _ = cacache::remove_entry(&self.cache_dir, &cache_key).await; - Ok(None) - } - } - } - - /// Delete a specific blob. - pub async fn remove(&self, prefix: &str, key: &str) -> Result<(), BlobCacheError> { - validate_key(prefix, key)?; - let cache_key = format!("{prefix}{key}"); - cacache::remove_entry(&self.cache_dir, &cache_key) - .await - .map_err(|e| BlobCacheError::Io(format!("cacache remove: {e}")))?; - Ok(()) - } - - /// Delete all blobs. - pub async fn clear(&self) -> Result<(), BlobCacheError> { - // Remove and recreate the cache directory. - let path = self.cache_dir.clone(); - tokio::task::spawn_blocking(move || { - if path.exists() { - std::fs::remove_dir_all(&path) - .map_err(|e| BlobCacheError::Io(format!("clear cache: {e}")))?; - std::fs::create_dir_all(&path) - .map_err(|e| BlobCacheError::Io(format!("recreate cache dir: {e}")))?; - } - Ok(()) - }) - .await - .map_err(|e| BlobCacheError::Io(format!("clear task: {e}")))? - } - - /// Return total bytes used by all blobs. - /// Walks cacache entries and sums sizes. - pub async fn total_size(&self) -> Result { - let mut total: u64 = 0; - let mut stream = cacache::ls(&self.cache_dir).await - .map_err(|e| BlobCacheError::Io(format!("cacache ls: {e}")))?; - while let Some(entry) = stream.next().await { - match entry { - Ok(meta) => total += meta.size.unwrap_or(0), - Err(e) => { - warn!(target: "chanora_cache", error = %e, "skipping bad entry during size scan"); - } - } - } - Ok(total) - } - - /// Evict oldest entries by mtime until total size is under - /// `max_bytes`. Call on startup or periodically. No-op if - /// `max_bytes` is 0. - pub async fn evict(&self) -> Result<(), BlobCacheError> { - if self.max_bytes == 0 { - return Ok(()); - } - let mut entries: Vec<(String, u64, std::time::SystemTime)> = Vec::new(); - let mut stream = cacache::ls(&self.cache_dir).await - .map_err(|e| BlobCacheError::Io(format!("cacache ls: {e}")))?; - while let Some(entry) = stream.next().await { - match entry { - Ok(meta) => { - let size = meta.size.unwrap_or(0); - let mtime = meta.time.into_system_time(); - entries.push((meta.key, size, mtime)); - } - Err(e) => { - warn!(target: "chanora_cache", error = %e, "skipping bad entry during eviction scan"); - } - } - } - let total: u64 = entries.iter().map(|(_, s, _)| *s).sum(); - if total <= self.max_bytes { - return Ok(()); - } - // Sort by mtime ascending (oldest first). - entries.sort_by_key(|(_, _, t)| *t); - let mut freed: u64 = 0; - let target = total - self.max_bytes; - for (key, size, _) in entries { - if freed >= target { - break; - } - let _ = cacache::remove_entry(&self.cache_dir, &key).await; - freed += size; - } - info!(target: "chanora_cache", freed_bytes = freed, "evicted oldest blobs"); - Ok(()) - } -} - -/// Validate key format to prevent malformed entries. -fn validate_key(prefix: &str, key: &str) -> Result<(), BlobCacheError> { - if !matches!(prefix, PREFIX_AVATAR | PREFIX_ICON) { - return Err(BlobCacheError::InvalidKey(format!("bad prefix: {prefix}"))); - } - match prefix { - PREFIX_AVATAR => { - // MD5 hex = exactly 32 hex chars. - if key.len() != 32 || !key.chars().all(|c| c.is_ascii_hexdigit()) { - return Err(BlobCacheError::InvalidKey( - format!("avatar key must be 32 hex chars, got: {key}") - )); - } - } - PREFIX_ICON => { - // Unsigned CRC32 = decimal digits. - if key.is_empty() || !key.chars().all(|c| c.is_ascii_digit()) { - return Err(BlobCacheError::InvalidKey( - format!("icon key must be decimal digits, got: {key}") - )); - } - } - _ => unreachable!(), - } - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - fn tempdir() -> tempfile::TempDir { - tempfile::Builder::new() - .prefix("chanora_cache_test_") - .tempdir() - .unwrap() - } - - #[tokio::test] - async fn put_get_roundtrip() { - let tmp = tempdir(); - let cache = BlobCache::new(&tmp, 0).unwrap(); - assert!(cache.get(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6").await.unwrap().is_none()); - cache.put(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", b"avatar-bytes").await.unwrap(); - let data = cache.get(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6").await.unwrap(); - assert_eq!(data.as_deref(), Some(b"avatar-bytes".as_slice())); - } - - #[tokio::test] - async fn get_missing_returns_none() { - let tmp = tempdir(); - let cache = BlobCache::new(&tmp, 0).unwrap(); - assert!(cache.get(PREFIX_AVATAR, "00000000000000000000000000000000").await.unwrap().is_none()); - } - - #[tokio::test] - async fn clear_removes_all() { - let tmp = tempdir(); - let cache = BlobCache::new(&tmp, 0).unwrap(); - cache.put(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", b"data").await.unwrap(); - cache.put(PREFIX_ICON, "12345", b"icon").await.unwrap(); - cache.clear().await.unwrap(); - assert_eq!(cache.total_size().await.unwrap(), 0); - } - - #[tokio::test] - async fn total_size_accounts_for_all_entries() { - let tmp = tempdir(); - let cache = BlobCache::new(&tmp, 0).unwrap(); - cache.put(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", b"12345").await.unwrap(); - cache.put(PREFIX_ICON, "99999", b"12").await.unwrap(); - assert_eq!(cache.total_size().await.unwrap(), 5 + 2); - } - - #[tokio::test] - async fn invalid_key_rejected() { - let tmp = tempdir(); - let cache = BlobCache::new(&tmp, 0).unwrap(); - // Too short for MD5. - assert!(cache.put(PREFIX_AVATAR, "abc", b"data").await.is_err()); - // Non-hex in MD5. - assert!(cache.put(PREFIX_AVATAR, "g".repeat(32).as_str(), b"data").await.is_err()); - // Non-digit in icon key. - assert!(cache.put(PREFIX_ICON, "12a45", b"data").await.is_err()); - // Bad prefix. - assert!(cache.put("xx_", "abc", b"data").await.is_err()); - } - - #[tokio::test] - async fn evict_deletes_oldest_until_under_cap() { - let tmp = tempdir(); - // 10 byte cap. - let cache = BlobCache::new(&tmp, 10).unwrap(); - cache.put(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", b"12345678").await.unwrap(); // 8 bytes - tokio::time::sleep(std::time::Duration::from_millis(50)).await; - cache.put(PREFIX_ICON, "11111", b"12345").await.unwrap(); // 5 bytes → total 13, over cap - cache.evict().await.unwrap(); - // Oldest (avatar) should be evicted. - assert!(cache.get(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6").await.unwrap().is_none()); - assert!(cache.get(PREFIX_ICON, "11111").await.unwrap().is_some()); - } - - #[tokio::test] - async fn corrupt_entry_removed_on_read() { - let tmp = tempdir(); - let cache = BlobCache::new(&tmp, 0).unwrap(); - // Write valid entry. - cache.put(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", b"good").await.unwrap(); - // Corrupt the underlying content file (simulate bit rot). - // cacache stores content under content-v2//data. - // We find and corrupt it to test integrity check. - let content_dir = tmp.path().join("chanora").join("blobs").join("content-v2"); - if let Ok(mut entries) = std::fs::read_dir(&content_dir) { - while let Some(Ok(entry)) = entries.next() { - let data_path = entry.path().join("data"); - if data_path.exists() { - std::fs::write(&data_path, b"corrupt").unwrap(); - break; - } - } - } - // Read should detect corruption and return None. - let result = cache.get(PREFIX_AVATAR, "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6").await.unwrap(); - assert!(result.is_none()); - } -} -``` - -### 4.5 Wire BlobCache into Session - -The `BlobCache` is constructed once during a new `init_cache` bridge call (separate from `init_storage`) using the platform cache directory. All `BlobCache` methods are async (cacache is async-native). - -#### `crates/chanora_bridge/src/api.rs` - -```rust -/// Wire the blob cache to a platform cache directory. Call once -/// on app start after Flutter resolves `getApplicationCacheDirectory()`. -pub async fn init_cache(dir: String) -> Result<(), BridgeError> { - runtime() - .spawn(async move { session().init_cache(&dir).await }) - .await - .map_err(|e| task_join_error("init_cache", e))??; - Ok(()) -} -``` - -#### Flutter init (in `app_bootstrap.dart`) - -```dart -// Existing: -final supportDir = await getApplicationSupportDirectory(); -await rust.initStorage(dir: supportDir.path); - -// NEW: separate cache directory -final cacheDir = await getApplicationCacheDirectory(); -await rust.initCache(dir: cacheDir.path); -``` - -#### `chanora_core::ChanoraSession` - -```rust -blob_cache: OnceCell, - -pub async fn init_cache(&self, dir: &str) -> Result<(), CoreError> { - // 100 MB cap for avatars + icons. - let cache = chanora_cache::BlobCache::new(dir, 100 * 1024 * 1024)?; - // Evict on startup. - cache.evict().await?; - self.blob_cache.set(cache).map_err(|_| CoreError::AlreadyConnected)?; - Ok(()) -} -``` - -#### Download method with cache - -```rust -pub async fn get_avatar(&self, avatar_hash: &str, client_uid: &str) -> Result>, CoreError> { - // 1. Check cache - if let Some(cache) = self.blob_cache.get() { - if let Some(bytes) = cache.get(chanora_cache::PREFIX_AVATAR, avatar_hash).await? { - return Ok(Some(bytes)); - } - } - // 2. Download - let handle = self.protocol_handle()?; - let bytes = handle.download_avatar(client_uid).await?; - // 3. Store in cache - if let Some(cache) = self.blob_cache.get() { - cache.put(chanora_cache::PREFIX_AVATAR, avatar_hash, &bytes).await?; - } - Ok(Some(bytes)) -} -``` - -### 4.6 Verification - -- [ ] `cargo test -p chanora_cache` — all 8 async tests pass -- [ ] `cargo clippy -p chanora_cache` clean -- [ ] Cache directory appears under `/chanora/blobs/` after download -- [ ] Second download of same avatar hits cache (no TCP transfer) -- [ ] Same avatar from different server uses same content (cacache dedup) -- [ ] `evict()` deletes oldest entries when over cap -- [ ] Corrupted content detected by cacache integrity check → entry removed -- [ ] Invalid keys are rejected -- [ ] `clear()` empties cache - ---- - -## 5. Phase 4 — Session Orchestration (`chanora_core`) - -### 5.1 Goal - -Add a `FileTransferService` to `chanora_core` that sits between the bridge and the raw protocol download. Provides: - -1. **Request coalescing** — 10 concurrent `get_avatar` calls for the same hash = 1 download, 10 waiters. -2. **Concurrency throttle** — At most 2 simultaneous file transfers (anti-flood). -3. **Negative cache** — Remember "avatar X does not exist" for 5 minutes to avoid re-downloading 404s. -4. **Retry with exponential backoff** — 5s → 30s → 2min → 10min for transient failures. - -### 5.2 Design - -``` -Bridge (download_avatar) - ↓ -FileTransferService::get_avatar(hash, uid) - ↓ - 1. Check BlobCache → hit? return bytes - 2. Check negative cache → hit? return None - 3. Check in-flight map → already downloading? await existing handle - 4. Acquire concurrency semaphore (max 2) - 5. Download via ProtocolClient - 6. Store in BlobCache - 7. Notify all waiters -``` - -### 5.3 Files to Create/Modify - -#### `crates/chanora_core/src/file_transfer.rs` (NEW — ~250 LOC) - -```rust -use std::collections::HashMap; -use std::sync::Arc; -use tokio::sync::{Semaphore, SemaphorePermit, oneshot, Mutex}; - -pub struct FileTransferService { - cache: chanora_cache::BlobCache, - protocol: Arc>>, - /// Max concurrent downloads. - semaphore: Arc, - /// In-flight downloads: (prefix+key) → Vec>> - in_flight: Arc>, FileTransferError>>>>>>, - /// Negative cache: key → instant when entry expires. - negative_cache: Arc>>, - /// Negative cache TTL. - negative_ttl: std::time::Duration, -} - -#[derive(Debug, thiserror::Error)] -pub enum FileTransferError { - #[error("not connected")] - NotConnected, - #[error("protocol: {0}")] - Protocol(#[from] chanora_protocol::ProtocolError), - #[error("cache: {0}")] - Cache(#[from] chanora_cache::BlobCacheError), -} - -impl FileTransferService { - pub fn new(cache: chanora_cache::BlobCache) -> Self { - Self { - cache, - protocol: Arc::new(Mutex::new(None)), - semaphore: Arc::new(Semaphore::new(2)), - in_flight: Arc::new(Mutex::new(HashMap::new())), - negative_cache: Arc::new(Mutex::new(HashMap::new())), - negative_ttl: std::time::Duration::from_secs(300), // 5 min - } - } - - pub async fn set_protocol(&self, client: Option) { - *self.protocol.lock().await = client; - } - - /// Get an avatar by hash + UID. Coalesces concurrent requests. - pub async fn get_avatar( - &self, - avatar_hash: &str, - client_uid: &str, - ) -> Result>, FileTransferError> { - let cache_key = format!("av_{avatar_hash}"); - // 1. Disk cache hit? - if let Some(bytes) = self.cache.get("av_", avatar_hash).await? { - return Ok(Some(bytes)); - } - // 2. Negative cache hit? - { - let neg = self.negative_cache.lock().await; - if let Some(expires) = neg.get(&cache_key) { - if std::time::Instant::now() < *expires { - return Ok(None); - } - } - } - // 3. Already in-flight? - { - let mut in_flight = self.in_flight.lock().await; - if let Some(waiters) = in_flight.get_mut(&cache_key) { - let (tx, rx) = oneshot::channel(); - waiters.push(tx); - drop(in_flight); - return rx.await - .map_err(|_| FileTransferError::NotConnected)? - .map(|opt| opt); - } - // First requester — register in-flight. - in_flight.insert(cache_key.clone(), Vec::new()); - } - // 4. Acquire semaphore + download. - let _permit = self.semaphore.acquire().await - .map_err(|_| FileTransferError::NotConnected)?; - let result = self.do_download_avatar(avatar_hash, client_uid).await; - // 5. Notify waiters. - { - let mut in_flight = self.in_flight.lock().await; - if let Some(waiters) = in_flight.remove(&cache_key) { - for tx in waiters { - let _ = tx.send(result.clone()); - } - } - } - result - } - - async fn do_download_avatar( - &self, - avatar_hash: &str, - client_uid: &str, - ) -> Result>, FileTransferError> { - let guard = self.protocol.lock().await; - let proto = guard.as_ref().ok_or(FileTransferError::NotConnected)?; - let cloned = proto.clone(); - drop(guard); - - match cloned.download_avatar(client_uid).await { - Ok(bytes) => { - self.cache.put("av_", avatar_hash, &bytes).await?; - Ok(Some(bytes)) - } - Err(chanora_protocol::ProtocolError::ServerRejected { .. }) => { - // Avatar doesn't exist on server — negative cache. - let mut neg = self.negative_cache.lock().await; - neg.insert( - format!("av_{avatar_hash}"), - std::time::Instant::now() + self.negative_ttl, - ); - Ok(None) - } - Err(e) => Err(FileTransferError::Protocol(e)), - } - } - - /// Get an icon by CRC32. Same coalescing logic as avatars. - pub async fn get_icon( - &self, - icon_id: u64, - ) -> Result>, FileTransferError> { - let cache_key = format!("ic_{icon_id}"); - if let Some(bytes) = self.cache.get("ic_", &icon_id.to_string()).await? { - return Ok(Some(bytes)); - } - { - let neg = self.negative_cache.lock().await; - if let Some(expires) = neg.get(&cache_key) { - if std::time::Instant::now() < *expires { - return Ok(None); - } - } - } - // Same coalescing pattern as get_avatar... - // (Implementation mirrors get_avatar with icon-specific path) - let _permit = self.semaphore.acquire().await - .map_err(|_| FileTransferError::NotConnected)?; - let guard = self.protocol.lock().await; - let proto = guard.as_ref().ok_or(FileTransferError::NotConnected)?; - let cloned = proto.clone(); - drop(guard); - - match cloned.download_icon(icon_id).await { - Ok(bytes) => { - self.cache.put("ic_", &icon_id.to_string(), &bytes).await?; - Ok(Some(bytes)) - } - Err(chanora_protocol::ProtocolError::ServerRejected { .. }) => { - let mut neg = self.negative_cache.lock().await; - neg.insert(cache_key, std::time::Instant::now() + self.negative_ttl); - Ok(None) - } - Err(e) => Err(FileTransferError::Protocol(e)), - } - } -} -``` - -### 5.4 Wire into ChanoraSession - -```rust -// In ChanoraSession: -file_transfer: OnceCell, - -// After connect: -file_transfer.set_protocol(Some(protocol_client)).await; - -// After disconnect: -file_transfer.set_protocol(None).await; -``` - -### 5.5 Bridge Updates - -Replace Phase 2's raw `download_avatar` with cache-aware version: - -```rust -pub async fn get_avatar( - avatar_hash: String, - client_uid: String, -) -> Result>, BridgeError> { - runtime() - .spawn(async move { - session().file_transfer() - .get_avatar(&avatar_hash, &client_uid) - .await - }) - .await - .map_err(|e| task_join_error("get_avatar", e))? - .map_err(BridgeError::from) -} -``` - -### 5.6 Flutter Widget Update - -Update `ClientAvatar` to pass `avatar_hash` (from `client_flag_avatar` property in the snapshot): - -```dart -class ClientAvatar extends StatefulWidget { - final String clientUid; - final String avatarHash; // client_flag_avatar (MD5 hex) - final String displayName; - final double radius; - // ... -} - -Future _loadAvatar() async { - if (_loading || widget.avatarHash.isEmpty) return; - setState(() => _loading = true); - try { - final bytes = await rust.getAvatar( - avatarHash: widget.avatarHash, - clientUid: widget.clientUid, - ); - if (mounted && bytes != null) { - setState(() => _bytes = bytes); - } - } catch (_) { - // Fall back to initials. - } finally { - if (mounted) setState(() => _loading = false); - } -} -``` - -### 5.7 ProtocolDelta / BridgeEvent Updates - -Add avatar hash to `ClientJoined` and `ClientUpdated` events so Flutter knows the `client_flag_avatar` value: - -#### `crates/chanora_protocol/src/dto.rs` — add `avatar_hash` to `ClientInfo`: - -```rust -pub struct ClientInfo { - // ... existing fields ... - /// MD5 hash of the client's avatar bytes (client_flag_avatar). - /// Empty string means no avatar. - pub avatar_hash: String, -} -``` - -#### `crates/chanora_protocol/src/adapter.rs` — populate `avatar_hash` in `build_snapshot`: - -Read `client_flag_avatar` from tsclientlib state when building `ClientInfo`. - -#### `crates/chanora_bridge/src/api.rs` — add `avatar_hash` to `BridgeClient`: - -```rust -pub struct BridgeClient { - // ... existing fields ... - /// MD5 hash of the client's avatar (client_flag_avatar). Empty = no avatar. - pub avatar_hash: String, -} -``` - -#### `BridgeEvent::ClientJoined` / `BridgeEvent::ClientUpdated` — add `avatar_hash` field - -This is the key change that lets the Flutter widget know *which* avatar to display for each client. - -### 5.8 Verification - -- [ ] 10 concurrent `get_avatar` calls for same hash → 1 download, 10 responses -- [ ] Non-existent avatar → returns `None`, negative cache prevents re-download -- [ ] Semaphore limits concurrent downloads to 2 -- [ ] Cache hit returns bytes without network call -- [ ] `cargo test -p chanora_core` passes -- [ ] Flutter UI shows avatars without excessive network traffic - ---- - -## 6. Phase 5 — Cache Management - -### 6.1 Goal - -Expose cache management through the bridge. Add a "Clear Cache" button to settings. - -### 6.2 Files to Modify - -#### `crates/chanora_bridge/src/api.rs` - -```rust -/// Clear all cached avatar and icon data. -pub async fn clear_file_cache() -> Result<(), BridgeError> { - runtime() - .spawn(async { session().clear_file_cache().await }) - .await - .map_err(|e| task_join_error("clear_file_cache", e))? -} - -/// Get total cache size in bytes. -pub async fn file_cache_size() -> Result { - runtime() - .spawn(async { session().file_cache_size() }) - .await - .map_err(|e| task_join_error("file_cache_size", e))? -} -``` - -#### `crates/chanora_core/src/lib.rs` - -```rust -pub async fn clear_file_cache(&self) -> Result<(), CoreError> { - if let Some(ft) = self.file_transfer.as_ref() { - ft.cache.clear()?; - } - Ok(()) -} - -pub fn file_cache_size(&self) -> Result { - if let Some(ft) = self.file_transfer.as_ref() { - Ok(ft.cache.total_size()?) - } else { - Ok(0) - } -} -``` - -#### Flutter settings UI - -Add to settings page: - -```dart -ListTile( - title: const Text('Clear avatar cache'), - subtitle: FutureBuilder( - future: _cacheSizeLabel(), - builder: (_, snap) => Text(snap.data ?? 'Calculating...'), - ), - trailing: IconButton( - icon: const Icon(Icons.delete_outline), - onPressed: () async { - await rust.clearFileCache(); - PaintingBinding.instance.imageCache.clear(); - setState(() {}); // Refresh size display - }, - ), -), -``` - -### 6.3 Post-MVP Eviction (not in this plan) - -- LRU eviction on startup: delete blobs older than N days -- Configurable cache size limit -- Per-server metadata sidecar files (`refs/_.json`) - -### 6.4 Verification - -- [ ] `clear_file_cache()` empties `blobs/` directory -- [ ] `file_cache_size()` returns 0 after clear -- [ ] Flutter settings shows cache size -- [ ] After clear, avatars re-download on next view - ---- - -## 7. Cross-Phase Dependency Map - -``` -Phase 1 (protocol download) - ↓ -Phase 2 (bridge + Flutter display) — uses Phase 1's download_avatar - ↓ -Phase 3 (BlobCache) — used by Phase 4 - ↓ -Phase 4 (FileTransferService) — uses Phase 1 + Phase 3 - ↓ -Phase 5 (cache management) — uses Phase 3 + Phase 4 -``` - -Phases 1 and 2 can be tested end-to-end (avatars in UI) before any caching exists. -Phases 3 and 4 can be developed in parallel but Phase 4 depends on Phase 3's `BlobCache`. -Phase 5 depends on Phase 3. - ---- - -## 8. Testing Strategy - -### Unit Tests - -| Crate | Test | Phase | -|---|---|---| -| `chanora_cache` | `BlobCache` put/get/clear/evict/key validation | 3 | -| `chanora_core` | `FileTransferService` coalescing, negative cache, semaphore | 4 | -| `chanora_protocol` | `uid_to_avatar_path` (existing), `download_file_from_server` (mock) | 1 | - -### Integration Tests - -| Test | What | Phase | -|---|---|---| -| Download avatar from real server | Connect, call download_avatar, verify bytes are valid PNG/JPEG | 1 | -| Cache round-trip | Download → cache hit → disconnect → reconnect → cache hit | 3+4 | -| Concurrent coalescing | 10 tasks request same avatar → 1 download | 4 | -| Negative cache | Request non-existent avatar → get None → immediate None on retry | 4 | - -### Manual Verification - -| Scenario | Expected | Phase | -|---|---|---| -| Connect to server with 50+ users | Avatars load progressively, no flood | 2+4 | -| Scroll client list rapidly | No duplicate downloads, smooth scrolling | 4 | -| Connect to 2 servers with overlapping users | Same avatar = 1 blob file | 3 | -| Settings → Clear Cache | Cache empties, avatars re-download | 5 | - ---- - -## 9. Out of Scope (Deferred) - -| Item | Reason | When | -|---|---|---| -| Icon download + channel/client/server icon display | Avatar is higher priority; icons follow the same pipeline | Phase 4+ | -| File upload | Not in MVP | Post-MVP | -| File browser | Not in MVP | Post-MVP | -| myTeamSpeak avatar integration | Requires cloud OAuth; indefinitely deferred | Post-MVP | -| Per-server metadata sidecars | Nice-to-have for cache inspection | Phase 5+ | -| Thumbnail generation | Avatars are small; no thumbnails needed | Post-MVP | -| Animated avatars | TS3 does not support animated avatars | N/A | - ---- - -## 10. Implementation Notes - -### 10.1 tsclientlib API Verification - -The implementation agent for Phase 1 MUST read the pinned tsclientlib source before writing any code. Key files: - -- `tsclientlib/src/lib.rs` lines 956–1005 — `download_file` public API -- `tsclientlib/src/lib.rs` lines 1371–1427 — `StreamItem::FileDownload` handling -- Local clone at `/var/folders/.../T/opencode/tsclientlib-rs-research/` - -### 10.2 FRB Code Generation - -Phase 2 and 5 add new bridge functions. After modifying `api.rs`, run: - -```bash -flutter_rust_bridge_codegen generate -``` - -### 10.3 avatar_hash in ProtocolDelta - -Phase 4 adds `avatar_hash` to client events. This requires changes in: - -1. `chanora_protocol::dto::ClientInfo` — add field -2. `chanora_protocol::adapter::build_snapshot` — populate from tsclientlib state -3. `chanora_protocol::adapter::forward_delta` — extract `client_flag_avatar` from PropertyChanged events -4. `chanora_core::SessionEvent::ClientJoined/Updated` — add field -5. `chanora_bridge::BridgeEvent::ClientJoined/Updated` — add field -6. Flutter `ClientJoinedEvent` / `ClientUpdatedEvent` — read field - -This is a cross-cutting change. It should be done as a separate, atomic commit before Phase 4's Flutter widget updates. - -### 10.4 Atomic Commits - -Recommended commit boundaries: - -1. `feat(protocol): add DownloadFile request and file download support` (Phase 1) -2. `feat(bridge): add download_avatar bridge function` (Phase 2 bridge) -3. `feat(ui): add ClientAvatar widget with initials fallback` (Phase 2 Flutter) -4. `feat(cache): add chanora_cache crate with cacache-backed blob cache` (Phase 3) -5. `feat(core): add avatar_hash to client events and DTOs` (Phase 4 data plumbing) -6. `feat(core): add FileTransferService with coalescing and rate limiting` (Phase 4) -7. `feat(ui): update ClientAvatar to use cached downloads` (Phase 4 Flutter) -8. `feat(bridge): add clear_file_cache and file_cache_size` (Phase 5 bridge) -9. `feat(ui): add cache management to settings` (Phase 5 Flutter) diff --git a/docs/architecture/file-transfer-research.md b/docs/architecture/file-transfer-research.md deleted file mode 100644 index 3115a48..0000000 --- a/docs/architecture/file-transfer-research.md +++ /dev/null @@ -1,770 +0,0 @@ -# File Transfer Cache Research - -**Date:** 2026-06-10 -**Status:** Research complete, design implications noted (updated with TeaSpeak server findings) -**Companion to:** `docs/architecture/file-transfer-design.md` -**Purpose:** Factual findings from protocol analysis, existing client implementations, and cross-platform research that inform the cache architecture decision. - ---- - -## 1. TS3 Protocol Identity Semantics - -### 1.1 Avatar Identity - -| Aspect | Value | -|---|---| -| Protocol field | `client_flag_avatar` | -| Type | `TYPE_STRING` (TeaSpeakLibrary `PropertyDefinition.h:200`) | -| Meaning | MD5 hash of the avatar file bytes | -| Scope | Per-client per-server — a user can have different avatars on different servers | -| Freshness | Automatically up-to-date for any client "in view" (`FLAG_CLIENT_VIEW`) | -| Empty value | No avatar set | - -**Key fact:** Identical avatar image bytes produce the **same** `client_flag_avatar` hash on any TS3 server. The hash is a content fingerprint, not a server-assigned identifier. - -**Download path on server:** `/avatar_` — the filename is derived from the client's unique identifier (UID), not from the content hash. The content hash is communicated separately via `client_flag_avatar`. - -**Sources:** -- TeaSpeakLibrary `PropertyDefinition.h:200`: `PropertyDescription{CLIENT_FLAG_AVATAR, "client_flag_avatar", "", TYPE_STRING, FLAG_CLIENT_VIEW | FLAG_SAVE | FLAG_USER_EDITABLE}` -- TS3AudioBot avatar upload: computes MD5 of image bytes, then sets `client_flag_avatar` to that hash ([`TS3AudioBot/TSLib/TsBaseFunctions.cs:324-341`](https://github.com/Splamy/TS3AudioBot/blob/a69a38d8cba5a4d671dbe06505506f6b46f1d947/TSLib/TsBaseFunctions.cs#L324-L341)) -- TS3 NodeJS Library: avatar filename is `avatar_${clientBase64HashClientUID}` ([`TS3-NodeJS-Library/src/node/Client.ts:300-313`](https://github.com/Multivit4min/TS3-NodeJS-Library/blob/0c69b7ee80fa5b74e9175cf4ae3018346f7eb300/src/node/Client.ts#L300-L313)) -- TS3 PHP Framework: avatar name derivation from UID ([`ts3phpframework/src/Node/Client.php:288-307`](https://github.com/planetteamspeak/ts3phpframework/blob/87046b3d493c4d3d8064c639ea4269571192e476/src/Node/Client.php#L288-L307)) - -### 1.2 Icon Identity - -| Aspect | Value | -|---|---| -| Protocol fields | `channel_icon_id`, `client_icon_id`, `virtualserver_icon_id` | -| Type | `TYPE_UNSIGNED_NUMBER` (TeaSpeakLibrary `PropertyDefinition.h:83,146,217`) | -| Meaning | CRC32 (unsigned) of the icon file bytes | -| Scope | Per-entity per-server — but CRC32 is content-derived | -| Download path | `/icon_` | - -**Key fact:** Identical icon bytes produce the **same** CRC32 on any TS3 server. The icon ID is a content fingerprint. The upload process computes `crc32.unsigned(data)` and stores at `/icon_`. - -**CRC32 collision caveat:** CRC32 is only 32 bits. Different icon content can theoretically produce the same CRC32. Qint's `filecache.rs` explicitly notes this: "there could be collisions because only CRC-32 is used." ForChanora's purposes (small icons, not security-critical), this is acceptable. - -**Sources:** -- TeaSpeakLibrary `PropertyDefinition.h:83,146,217`: all icon IDs are `TYPE_UNSIGNED_NUMBER` -- TS3 NodeJS Library `uploadIcon()`: computes `crc32.unsigned(data)`, uploads to `/icon_` ([`TS3-NodeJS-Library/src/TeamSpeak.ts:2234-2241`](https://github.com/Multivit4min/TS3-NodeJS-Library/blob/0c69b7ee80fa5b74e9175cf4ae3018346f7eb300/src/TeamSpeak.ts#L2234-L2241)) -- TS3 PHP Framework: icon path uses `/icon_` ([`ts3phpframework/src/Node/Node.php:137-146`](https://github.com/planetteamspeak/ts3phpframework/blob/87046b3d493c4d3d8064c639ea4269571192e476/src/Node/Node.php#L137-L146)) -- TS3 community forum: "The filename itself is the result of the CRC32 checksum" (TeamSpeak staff) - -### 1.3 Implication for Cache Design - -Both avatars and icons are **content-addressed by the protocol itself**: - -| Asset | Content hash source | Same content across servers? | -|---|---|---| -| Avatar | `client_flag_avatar` = MD5 of bytes | Same bytes → same hash → same ID | -| Icon | `icon_id` = CRC32 of bytes | Same bytes → same CRC32 → same ID | - -This means a **flat content-addressed blob store** can achieve zero-duplication without any per-server directories, hardlinks, or ref-counting. - ---- - -## 2. Virtual Server Identity - -### 2.1 Server UID - -| Aspect | Value | -|---|---| -| Protocol field | `virtualserver_unique_identifier` | -| Type | `TYPE_STRING` (TeaSpeakLibrary `PropertyDefinition.h:22`) | -| Generated by | The server instance, on creation | -| Globally unique? | **Not guaranteed** — locally generated, no central registry | -| Stable? | Yes — persists across restarts of the same virtual server | - -**Key fact:** `virtualserver_unique_identifier` is generated by each TS3 server. Two physically different servers could theoretically produce the same UID. It is **not safe as a global cache key**. - -### 2.2 What Chanora Currently Tracks - -| Layer | Server identity fields | Source | -|---|---|---| -| Protocol adapter (`adapter.rs:1752-1755`) | `server_name`, `welcome_message`, `platform`, `version` | `state.server.*` from tsclientlib | -| DTO (`ServerSnapshot`) | `server_name`, `welcome_message`, `platform`, `version` | No UID field | -| Bridge (`BridgeSnapshot`) | Same as DTO | Same | -| Storage (bookmarks) | Keyed by `host` (hostname:port) | SQLite `WHERE host = ?1` | -| Core (recent servers) | `cfg.address` as host | Auto-saved on connect | - -**Chanora does not currently plumb `virtualserver_unique_identifier` through the DTO stack.** The field exists in tsclientlib's state but is not extracted. - -### 2.3 Implication for Cache Design - -Using `virtualserver_unique_identifier` as the sole cache key is risky (not globally unique). Using connection address (`host:port`) is safe but duplicates cache entries when the same server is accessed via different addresses. - -**Recommendation:** For a content-addressed blob store, server identity is only needed for per-server metadata (eviction, "clear cache for this server"), not for the blob key itself. The blob key is the content hash. - ---- - -## 3. Existing TS3 Client Cache Implementations - -### 3.1 Qint (tsclientlib-based, Tauri + Rust) - -**Architecture:** Per-server directory with SQLite metadata. - -``` -/files/// -``` - -**Avatar handling:** -- Avatar state stored per `(server, client)` row in SQLite -- On avatar hash change, deletes the cached `/avatar_` file for that server -- Avatar download path: `/avatar_` - -**Icon handling:** -- Icons path-cached with CRC32 -- Code comments note CRC32 collisions and freshness by mtime -- Qint explicitly deletes and re-downloads when icon mtime changes - -**Dedup:** None. Same avatar on 5 servers = 5 stored copies. - -**Sources:** -- [`Qint/proxy/src/filecache.rs`](https://github.com/ReSpeak/Qint/blob/7efe949adfa1a1ecb9d185e7740e015da18cc41b/proxy/src/filecache.rs#L1-L6): "Stores files transferred via the TS3 file transfer protocol. This includes icons and avatars." -- [`Qint/proxy/src/db/mod.rs`](https://github.com/ReSpeak/Qint/blob/7efe949adfa1a1ecb9d185e7740e015da18cc41b/proxy/src/db/mod.rs#L1158-L1176): avatar hash change triggers delete -- [`Qint/src-tauri/src/cmd.rs`](https://github.com/ReSpeak/Qint/blob/7efe949adfa1a1ecb9d185e7740e015da18cc41b/src-tauri/src/cmd.rs#L524-L539): file download command - -### 3.2 TS3 Official Client (closed source) - -**Architecture:** Lazy cache with SDK callbacks. - -- `getAvatar()` returns cached path if present; otherwise triggers download -- `onAvatarUpdated` callback fires when avatar is downloaded or deleted -- Cache paths (from community documentation): - - Windows: `%LOCALAPPDATA%\TeamSpeak\Cache\Default` - - Linux: `~/.cache/TeamSpeak/Default` - - macOS: `~/Library/Caches/TeamSpeak/Default` -- SDK also exposes `CLIENT_MYTS_AVATAR` / `client_myteamspeak_avatar` for cross-server myTeamSpeak avatars - -**Sources:** -- [`ts3client-pluginsdk/src/plugin.c`](https://github.com/teamspeak/ts3client-pluginsdk/blob/4aa90a53aa150cbf81e13bc97e68c0431b26499f/src/plugin.c#L384-L396): `getAvatar()` and `onAvatarUpdated` -- [`ts3client-pluginsdk/public_rare_definitions.h`](https://github.com/teamspeak/ts3client-pluginsdk/blob/4aa90a53aa150cbf81e13bc97e68c0431b26499f/include/teamspeak/public_rare_definitions.h#L284-L313): `CLIENT_FLAG_AVATAR`, `CLIENT_MYTS_AVATAR` -- Community: [clear cache](https://community.teamspeak.com/t/clear-cache/41511), [broken icons](https://community.teamspeak.com/t/server-icons-are-displaying-a-broken-image-issues-with-local-cache/58680) - -### 3.3 TeaSpeak Client (TypeScript + C++ native) - -**Architecture:** Browser Cache API for images, per-server own-avatar storage. - -**Key components (from `.d.ts` type declarations):** - -- `AvatarManager` — per-connection (`FileManager`) avatar handler - - `cachedAvatars` (private) — in-memory cache of `ClientAvatar` objects - - `updateCache(clientAvatarId, clientAvatarHash)` — updates cache when hash changes - - `resolveAvatar(clientAvatarId, avatarHash?, cacheOnly?)` — resolves avatar by ID - - `flush_cache()` — clears cache - - `create_avatar_download(client_avatar_id)` — initiates file transfer - -- `ClientAvatar` — tracks individual avatar state - - `clientAvatarId` — derived from client UID via `uniqueId2AvatarId()` - - `currentAvatarHash` — the `client_flag_avatar` value - - State machine: `unset` → `loading` → `loaded` / `errored` - - `loadingTimestamp` — when download started - -- `ImageCache` — generic image cache using browser Cache API - - `resolveCached(key, maxAge?)` — check if cached - - `putCache(key, value, type?, headers?)` — store - - `cleanup(maxAge)` — evict old entries - - `reset()` — clear all - - `isPersistent()` — whether cache persists to disk - -- `OwnAvatarStorage` — user's own avatar, keyed by `serverUniqueId + mode` - - `loadAvatarImage(serverUniqueId, mode)` — load own avatar for a server - - `updateAvatar(serverUniqueId, mode, target)` — update own avatar - - `avatarUploadSucceeded(serverUniqueId)` — move from "uploading" to "server" state - - Stores `LocalAvatarInfo`: fileName, fileSize, **fileHashMD5**, timestamps, contentType - -- `FileManager` — per-connection file transfer manager - - `MAX_CONCURRENT_TRANSFERS` — transfer concurrency limit - - `avatars: AvatarManager` — avatar subsystem - - `initializeFileDownload(options)` — start download (path, name, channel, target) - - `deleteIcon(iconId: number)` — delete icon by ID - -- `FileTransfer` — transfer state machine - - States: `PENDING → INITIALIZING → CONNECTING → RUNNING → FINISHED / ERRORED / CANCELED` - - `InitializedTransferProperties`: serverTransferId, transferKey, **addresses[]**, protocol, seekOffset, fileSize - - Multiple addresses returned by server for file transfer (failover) - -- `localIconCache: ImageCache` — global icon cache (singleton) - -**Sources:** -- TeaSpeak-Client `imports/shared-app/file/Avatars.d.ts` — ClientAvatar, AbstractAvatarManager -- TeaSpeak-Client `imports/shared-app/file/LocalAvatars.d.ts` — AvatarManager -- TeaSpeak-Client `imports/shared-app/file/LocalIcons.d.ts` — localIconCache -- TeaSpeak-Client `imports/shared-app/file/ImageCache.d.ts` — ImageCache (browser Cache API) -- TeaSpeak-Client `imports/shared-app/file/FileManager.d.ts` — FileManager, transfer API -- TeaSpeak-Client `imports/shared-app/file/Transfer.d.ts` — FileTransfer, state machine, error types -- TeaSpeak-Client `imports/shared-app/file/OwnAvatarStorage.d.ts` — own avatar per-server storage -- TeaSpeak-Client `native/serverconnection/test/js/ft.ts` — file transfer test (TCP + ftkey protocol) - -### 3.4 TS3AudioBot (C#) - -**Architecture:** No local avatar cache. Avatar upload is hash-driven. - -- Uploads avatar bytes to `/avatar`, computes MD5, sets `client_flag_avatar` to that hash -- Bot avatar selection reads local files from an `avatars/` directory -- No caching of other users' avatars - -**Sources:** -- [`TS3AudioBot/TSLib/TsBaseFunctions.cs:324-341`](https://github.com/Splamy/TS3AudioBot/blob/a69a38d8cba5a4d671dbe06505506f6b46f1d947/TSLib/TsBaseFunctions.cs#L324-L341) -- [`TS3AudioBot/Bot.cs:420-470`](https://github.com/Splamy/TS3AudioBot/blob/a69a38d8cba5a4d671dbe06505506f6b46f1d947/TS3AudioBot/Bot.cs#L420-L470) - -### 3.5 TS3 NodeJS Library - -**Architecture:** No local cache. Downloads on demand. - -- Avatar filename: `avatar_${clientBase64HashClientUID}` -- `getAvatar()` downloads directly — no caching layer -- Tests assert the exact `/avatar_` path - -**Sources:** -- [`TS3-NodeJS-Library/src/node/Client.ts:300-313`](https://github.com/Multivit4min/TS3-NodeJS-Library/blob/0c69b7ee80fa5b74e9175cf4ae3018346f7eb300/src/node/Client.ts#L300-L313) -- [`TS3-NodeJS-Library/tests/Client.spec.ts:342-358`](https://github.com/Multivit4min/TS3-NodeJS-Library/blob/0c69b7ee80fa5b74e9175cf4ae3018346f7eb300/tests/Client.spec.ts#L342-L358) - -### 3.6 Summary Table - -| Client | Cache Key Strategy | Dedup Across Servers? | Icon Cache | -|---|---|---|---| -| **Qint** | `//` | No | Yes (CRC32, mtime freshness) | -| **TS3 Official** | Lazy cache (path-based) | Unknown | Yes | -| **TeaSpeak** | UID-derived avatar ID + browser Cache API | Implicit (same hash = same cache) | Yes (global ImageCache) | -| **TS3AudioBot** | None | N/A | No | -| **TS3 NodeLib** | None | N/A | No | -| **Chanora (decided)** | Content hash (MD5/CRC32), flat `blobs/` in `chanora_cache` crate | **Yes** | Yes | - ---- - -## 4. TeaSpeak Protocol Definitions (Authoritative) - -From TeaSpeakLibrary `src/PropertyDefinition.h` — the most complete open-source reference for TS3 protocol property types: - -### 4.1 Avatar Properties - -```cpp -// Line 200 -PropertyDescription{CLIENT_FLAG_AVATAR, "client_flag_avatar", "", - TYPE_STRING, FLAG_CLIENT_VIEW | FLAG_SAVE | FLAG_USER_EDITABLE} -// "automatically up-to-date for any manager 'in view', this manager got an avatar" -``` - -### 4.2 Icon Properties - -```cpp -// Line 83 — server icon -PropertyDescription{VIRTUALSERVER_ICON_ID, "virtualserver_icon_id", "0", - TYPE_UNSIGNED_NUMBER, FLAG_SERVER_VVSS | FLAG_USER_EDITABLE} - -// Line 146 — channel icon -PropertyDescription{CHANNEL_ICON_ID, "channel_icon_id", "0", - TYPE_UNSIGNED_NUMBER, FLAG_CHANNEL_VIEW | FLAG_SS | FLAG_USER_EDITABLE} - -// Line 217 — client icon -PropertyDescription{CLIENT_ICON_ID, "client_icon_id", "0", - TYPE_UNSIGNED_NUMBER, FLAG_CLIENT_VIEW | FLAG_CLIENT_VARIABLE} -``` - -### 4.3 Server Identity - -```cpp -// Line 22 -PropertyDescription{VIRTUALSERVER_UNIQUE_IDENTIFIER, - "virtualserver_unique_identifier", "", - TYPE_STRING, FLAG_SERVER_VV | FLAG_SNAPSHOT} -``` - -### 4.4 File Transfer Permissions - -```cpp -// From PermissionManager.cpp -PermissionType::i_client_max_avatar_filesize // "Max avatar filesize in bytes" -PermissionType::b_client_avatar_delete_other // "Allow deletion of avatars from other clients" -PermissionType::b_ft_transfer_list // "Retrieve list of running filetransfers" -``` - -### 4.5 File Transfer Error Codes - -```cpp -// From Error.h -channel_no_filetransfer_supported = 0x30C -file_transfer_connection_timeout = 0x80E -file_transfer_complete = 0x811 -file_transfer_canceled = 0x812 -file_transfer_interrupted = 0x813 -file_transfer_server_quota_exceeded = 0x814 -file_transfer_client_quota_exceeded = 0x815 -file_transfer_reset = 0x816 -file_transfer_limit_reached = 0x817 -``` - ---- - -## 5. Cross-Platform Filesystem Research - -### 5.1 Hardlink Support - -| Platform | Filesystem | Hardlinks in App-Private Storage? | Gotcha | -|---|---|---|---| -| Android (API 28+) | ext4 / f2fs | **Yes** | Rust uses `libc::link`; not FUSE-mounted; same-filesystem only | -| iOS | APFS | **Yes** (writable sandbox dirs) | App bundle is read-only; avoid hardlinks to bundle assets | -| macOS | APFS | **Yes** | — | -| Linux | ext4 / btrfs / xfs | **Yes** | — | -| Windows | NTFS | **Yes** | Rust uses `CreateHardLinkW` | - -**`std::fs::hard_link` gotchas (all platforms):** -- Same filesystem required -- Destination must not exist (returns error) -- Symlink behavior is platform-specific -- All hardlinks share the same inode — modifying one modifies all -- Files must be treated as **immutable** for hardlink safety - -**Sources:** -- Rust stdlib: `hard_link` maps to `libc::link` (Unix), `CreateHardLinkW` (Windows) ([Rust source](https://github.com/rust-lang/rust/blob/beae781308e9ddef13074a03faf57ca2fac59a5b/library/std/src/fs.rs#L2898-L2900)) -- Android: internal storage uses ext4/f2fs, not FUSE ([Android scoped storage docs](https://source.android.com/docs/core/storage/scoped)) -- iOS: APFS supports hardlinks; writable sandbox directories work ([Apple FileSystem basics](https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html)) - -### 5.2 Rust Cache Libraries - -**`cacache`** (MIT licensed, production-ready): -- Content-addressed disk cache -- Automatic dedup, atomic writes, integrity verification -- Exposes `hard_link`, `copy`, and `reflink` paths for retrieval -- On-disk layout: `content-v2/sha512/...` -- Could replace a custom implementation, but adds a dependency - -**Sources:** -- [`cacache-rs` README](https://github.com/zkat/cacache-rs/blob/105692a4daa04ce5f5ef3f8688cd3e1c1fb6a7c0/README.md#L39-L60) -- [`cacache-rs` content path](https://github.com/zkat/cacache-rs/blob/105692a4daa04ce5f5ef3f8688cd3e1c1fb6a7c0/src/content/path.rs#L6-L19) -- [`cacache-rs` hard_link impl](https://github.com/zkat/cacache-rs/blob/105692a4daa04ce5f5ef3f8688cd3e1c1fb6a7c0/src/content/read.rs#L257-L285) - -### 5.3 Flutter Cache Patterns - -Common Flutter packages use **cache-dir + metadata DB**, not hardlink dedup: -- `flutter_cache_manager`: files in cache dir + `sqflite` metadata -- `super_cache_disk`: file-per-entry (`.dat` + `.meta`) in app cache dir - -**Sources:** -- [flutter_cache_manager on pub.dev](https://pub.dev/packages/flutter_cache_manager) -- [super_cache_disk on pub.dev](https://pub.dev/packages/super_cache_disk/versions/1.0.0) - ---- - -## 6. Chanora Codebase Context - -### 6.1 Storage Patterns - -| Component | Pattern | Location | -|---|---|---| -| Identity storage | Atomic write (temp + `sync_all` + `rename`), mode 0600 on Unix | `chanora_storage/src/lib.rs:446-476` | -| Metadata | Same atomic write pattern | `chanora_storage/src/lib.rs:480-515` | -| Bookmarks | SQLite at `/chanora.db`, keyed by `host` | `chanora_storage/src/lib.rs:782-928` | -| Storage root | `getApplicationSupportDirectory()` from Flutter | `app_bootstrap.dart:19-24` | -| Bridge init | `rust.initStorage(dir: dir)` | `app_bootstrap.dart:23-25,108-133` | - -### 6.2 Existing Avatar Handling - -| Component | What | Location | -|---|---|---| -| UID to avatar path | `uid_to_avatar_path()` — base64 decode UID, encode each byte as 2 chars (a-p) | `adapter.rs:1561-1568` | -| Client profile DTO | `avatar_path` field — set when `client.avatar_hash` and `unique_id` non-empty | `dto.rs:135-136`, `adapter.rs:1323-1332` | -| No download | Currently no file download implementation exists | — | -| No icon handling | No icon field/path in protocol DTO or adapter | — | - -### 6.3 Server Identity in Chanora - -Chanora currently tracks servers by **connection address** (`host:port`), not by server UID: - -- Bookmarks: `WHERE host = ?1` -- Recent servers: auto-saved by `cfg.address` -- Prefetch cache: keyed by normalized host -- ServerSnapshot: has `server_name` but no `server_uid` - -The `virtualserver_unique_identifier` field is available from tsclientlib's state but is **not extracted** by the adapter. - -### 6.4 tsclientlib File Transfer API - -| Aspect | Detail | -|---|---| -| Download method | `Connection::download_file()` | -| Stream items | `StreamItem::FileDownload(FileDownloadResult { size, stream })` | -| Failure | `StreamItem::FiletransferFailed(handle, error)` | -| TCP handling | tsclientlib handles TCP connection + ftkey writing automatically | -| Chanora's job | Read `size` bytes from the returned `TcpStream` | -| Async behavior | `StreamItem::FileDownload` fires asynchronously, not inline with the request | - -### 6.5 ts-bookkeeping Generated Fields - -From the generated parser in `target/debug/build/ts-bookkeeping-*/out/`: - -- `virtual_server_id: u64` — numeric, per-virtual-server, may change across restarts -- `virtual_server_uid` — string, the `virtualserver_unique_identifier` - -Both are available in the `InInitServer` struct from the init handshake but are not currently plumbed through. - ---- - -## 7. TeaSpeak Server Internals (Authoritative) - -Source: TeaSpeak Server at `https://git.did.science/TeaSpeak/Server/Server` (branch `new-groups`, commit `b54c6d4e`). - -### 7.1 Avatar ID Derivation — Server Side - -The server derives the avatar filename from the **client UID**, not from the avatar content: - -```cpp -// DataClient.cpp:242-244 -std::string DataClient::getAvatarId() { - return hex::hex(base64::validate(this->getUid()) ? base64::decode(this->getUid()) : this->getUid(), 'a', 'q'); -} -``` - -The same transform produces `client_base64HashClientUID` (shown to other clients): - -```cpp -// client.cpp:1113-1114 -bulk.put_unchecked("client_base64HashClientUID", - hex::hex(base64::validate(info->client_unique_id) ? base64::decode(info->client_unique_id) : info->client_unique_id, 'a', 'q')); -``` - -**This matches Chanora's existing `uid_to_avatar_path()` in `adapter.rs:1561-1568`.** - -### 7.2 Avatar Upload Path - -When a client uploads an avatar, the server stores it as `/avatar_`: - -```cpp -// file.cpp:696-702 -} else if (cmd["path"].as().empty() && cmd["name"].string() == "/avatar") { - ... - info.file_path = "/avatar_" + this->getAvatarId(); - transfer_response = file::server()->file_transfer().initialize_avatar_transfer(...); -} -``` - -The avatar file path is identity-based (from UID), not content-based. - -### 7.3 `client_flag_avatar` — Who Computes the Hash? - -**The CLIENT computes the MD5 and sends it to the server during upload.** The server stores it as a string property (`FLAG_USER_EDITABLE`). The server does NOT compute or verify the hash. - -This means `client_flag_avatar` is: -- Set by the uploading client -- Stored verbatim by the server -- Broadcast to other clients as part of the client properties -- A reliable content fingerprint: same avatar bytes → same MD5 → same `client_flag_avatar` on any server - -### 7.4 Icon IDs — Server Does NOT Compute CRC32 - -Icon IDs are **permission values**, not content hashes computed by the server: - -```cpp -// ConnectedClient.cpp:186-210 — client icon ID from permissions -auto permission_flags = local_permissions->permission_flags(permission::i_icon_id); -new_icon_id = value.value; -updated_client_properties.emplace_back(property::CLIENT_ICON_ID); -``` - -```cpp -// channel.cpp:1495-1504 — channel icon ID -if(key == property::CHANNEL_ICON_ID) { - auto icon_id = converter::from_string_view(value); - channel->permissions()->set_permission(permission::i_icon_id, { ... icon_id ... }); -} -``` - -```cpp -// server.cpp:76-89 — server icon ID -SERVEREDIT_CHK_PROP_CACHED("virtualserver_icon_id", permission::b_virtualserver_modify_icon_id, int64_t) -``` - -**The CLIENT computes the CRC32 during upload and uses it as the filename `/icon_`.** The server stores the file and records the ID as a permission value. No server-side CRC32 or MD5 computation exists. - -### 7.5 Per-Server Storage Layout - -Avatars and icons are stored **per virtual server** on the server's filesystem: - -```cpp -// LocalFileSystem.cpp:39-45 -fs::path LocalFileSystem::server_path(const std::shared_ptr &server) { - return fs::u8path(this->root_path_) / fs::u8path("server_" + std::to_string(server->server_id())); -} -// target_path = this->server_path(server) / "icons" / path; -// target_path = this->server_path(server) / "avatars" / path; -``` - -``` -/ - server_/ - avatars/ - /avatar_ ← one per client who uploaded - icons/ - /icon_ ← one per unique icon -``` - -### 7.6 File Transfer Protocol (Server Side) - -Upload/delete/query routing: - -```cpp -// file.cpp:273-341 — delete routing -if (first_entry_name.find("/icon_") == 0 && file_path.empty()) { ... delete_icons(...); } -else if (first_entry_name.starts_with("/avatar_") && file_path.empty()) { ... delete_avatars(...); } -``` - -```cpp -// file.cpp:483-523 — query routing -if (first_entry_name.find("/icon_") == 0 && file_path.empty()) { ... query_icon_info(...); } -else if (first_entry_name.starts_with("/avatar_") && file_path.empty()) { ... query_avatar_info(...); } -``` - -Transfer initialization returns ftkey and metadata: - -```cpp -// file.cpp:759-761 -result.put_unchecked(0, "ftkey", transfer->transfer_key); -result.put_unchecked(0, "seekpos", transfer->file_offset); -``` - -```cpp -// file.cpp:887-899 -result.put_unchecked(0, "ftkey", transfer->transfer_key); -result.put_unchecked(0, "proto", "1"); -result.put_unchecked(0, "size", transfer->expected_file_size); -``` - -### 7.7 Key Takeaway for Chanora - -| Who does what | Avatar | Icon | -|---|---|---| -| **Uploader (client)** computes | MD5 of avatar bytes → sets `client_flag_avatar` | CRC32 of icon bytes → filename `/icon_` | -| **Server** does | Stores file as `/avatar_`, saves property | Stores file as `/icon_`, saves permission | -| **Other clients** receive | `client_flag_avatar` (MD5) as a property update | `icon_id` (CRC32) as a property update | -| **Chanora cache key** | `av_.dat` — content fingerprint | `ic_.dat` — content fingerprint | - -The content hash is computed once (by the uploader) and then broadcast as a property. Chanora never needs to hash anything — it just uses the protocol-provided values as cache keys. - ---- - -## 8. Design Implications - -### 8.1 The Core Insight - -The TS3 protocol provides content hashes as part of normal server-to-client updates: - -| Event | Data provided by server | What Chanora gets for free | -|---|---|---| -| Client enters view | `client_flag_avatar` = MD5 of avatar bytes | Content key for blob store | -| Channel update | `channel_icon_id` = CRC32 of icon bytes | Content key for blob store | -| Server update | `virtualserver_icon_id` = CRC32 of icon bytes | Content key for blob store | - -No hashing needed on the client side. The protocol is **already content-addressed**. - -### 8.2 Recommended Cache Architecture - -``` -/chanora/ - blobs/ ← cacache content store root - content-v2/ ← content-addressed by SHA-512 - /data ← raw blob bytes - index-v2/ ← key → content mapping -``` - -Where `` is the platform cache directory (not the support directory used by `chanora_storage`). Chanora's `BlobCache` maps protocol keys (`av_`, `ic_`) to `cacache` string keys. Physical layout is managed by `cacache`. - -**Lookup flow:** -1. Server sends `client_flag_avatar = "a1b2c3d4..."` for user X -2. Check: does `blobs/av_a1b2c3d4....dat` exist? -3. Yes → use it, zero downloads (works for ANY server) -4. No → download from `/avatar_` → save as `blobs/av_a1b2c3d4....dat` - -**Same for icons with `ic_.dat`.** - -### 8.3 Why This Beats Alternatives - -| Approach | Dedup | Globally unique key | Needs server UID plumbing | Needs hardlinks | Complexity | -|---|---|---|---|---|---| -| `/.dat` | No | No (UID not guaranteed unique) | Yes | Optional | Medium | -| `_/.dat` | No | Yes | No | Optional | Medium | -| `_/.dat` + hardlinks | Yes | Yes | No | Yes | Medium-High | -| **`blobs/av_.dat` (flat)** | **Yes** | **Yes (content hash)** | **No** | **No** | **Low** | - -### 8.4 Trade-offs - -| Pro | Con | -|---|---| -| Zero duplication across all servers | "Clear cache for server X only" requires metadata layer (Phase 3+) | -| No hardlinks needed | Orphan cleanup requires scanning for unreferenced blobs | -| No server UID plumbing needed | Cannot distinguish same-hash-different-content for icons (CRC32 collision) | -| Simplest possible implementation | — | -| Freshness = hash change = different filename (automatic) | — | -| Cross-platform (just file I/O) | — | - -### 8.5 Phased Implementation - -| Phase | What | Delivers | -|---|---|---| -| 1 | Protocol download (raw bytes via adapter, no cache) | Working download pipeline | -| 2 | Bridge + Flutter display (`Image.memory()`) | Visible avatars in UI | -| 3 | `chanora_cache` crate: cacache-backed blob cache, separate crate, cache dir, mtime eviction | Zero re-downloads, zero duplication | -| 4 | Session orchestration (coalescing, rate limiting, negative cache) | Anti-flood, robustness | -| 5 | Cache management (clear all, orphan cleanup, optional per-server metadata) | User control | - ---- - -## 9. Resolved Questions - -### Q1: Icon CRC32 Collisions — Accept with Size Guard - -**Risk assessment:** CRC32 produces a 32-bit hash. For N unique icons, the Birthday paradox gives collision probability ≈ N² / (2 × 2³²). - -| Icons (N) | Collision probability | -|---|---| -| 100 | ~0.0001% (negligible) | -| 1,000 | ~0.01% (negligible) | -| 10,000 | ~1.2% (marginal) | -| 65,536 | ~50% (likely) | - -A single user typically encounters fewer than 1,000 unique icons across all servers. The practical collision risk is negligible. - -**What happens on collision:** Wrong icon displayed for a channel/client/server. This is a visual glitch, not a security issue. The icon will appear incorrect until the cache is cleared. - -**Existing practice:** Qint explicitly notes CRC32 collisions (`filecache.rs:4`) but does NOT guard against them — they only refresh icons by mtime. No other TS3 client guards against CRC32 collisions. - -**Recommendation:** Accept CRC32 as the cache key. Add a lightweight **file size guard**: when downloading an icon, if `ic_.dat` already exists but has a different size than the `ftinitdownload` response reported, re-download. File size is available from the protocol (`msg.size` in `InFileDownloadPart`). This catches most collisions (different content = different size with high probability) without computing a secondary hash. - -**Decision:** CRC32 + file size guard. No SHA256 overhead needed. - ---- - -### Q2: `client_myteamspeak_avatar` — Defer Indefinitely - -**What it is:** A string property (`Option` in ts-bookkeeping) broadcast alongside `client_flag_avatar`. It represents a myTeamSpeak cross-server avatar — a user linked to a myTeamSpeak account can set a global avatar that follows them across all servers. - -**Current state in Chanora's dependency chain:** -- ts-bookkeeping exposes it: `InInitServer` has `my_team_speak_avatar: Option` -- TeaSpeakLibrary tracks `client_myteamspeak_id` but not the avatar -- tsclientlib exposes it as a property on client state - -**Value for Chanora:** -- myTeamSpeak is a TeamSpeak-specific cloud service (account sync, cross-server features) -- Chanora is an independent client — no myTeamSpeak account integration is planned -- The property may contain a URL or identifier that requires myTeamSpeak API access to resolve -- Without myTeamSpeak integration, the avatar cannot be fetched - -**Recommendation:** Defer indefinitely. If Chanora ever integrates myTeamSpeak accounts, this can be handled as a separate avatar source (URL-based HTTP download) alongside the existing protocol-based avatar download. The cache architecture supports this — just add a different blob prefix (e.g., `mt_.dat`). - -**Decision:** Out of scope for MVP and foreseeable roadmap. - ---- - -### Q3: Cache Backing Store — `cacache` Wrapper in Separate `chanora_cache` Crate - -**Decision:** Use `cacache` as the backing store inside `chanora_cache`. Not a custom flat-file implementation. - -**Why cacache won over custom:** - -1. **Crash safety is production-tested.** `cacache` handles partial writes, power loss, crash mid-write. A custom implementation would need to get `sync_all` + atomic rename right — one bug = corrupted cache. Even though cache data is disposable (reconstructible from server), `cacache` eliminates this entire class of bugs. - -2. **Less code to maintain.** ~120 LOC wrapper vs ~200 LOC custom implementation. The hard parts (atomic writes, integrity, content dedup) are owned by `cacache`, tested by the npm ecosystem. - -3. **Integrity verification on every read.** SSRI verification detects corruption, bit rot, partial writes automatically. A custom impl would need to add this separately or accept silent corruption. - -4. **Content dedup by SHA-512.** Same avatar on two servers = stored once automatically. The protocol's MD5/CRC32 keys map to `cacache` string keys; content dedup happens at the SHA-512 layer underneath. - -**What about the downsides:** - -| Concern | Assessment | -|---|---| -| ~6 transitive deps | `sha2` already in tree via `chacha20poly1305`. `serde_json`, `tempfile`, `digest` are lightweight. Acceptable for the safety benefit. | -| SHA-512 overhead on every write/read | For <100KB avatars, SHA-512 takes ~0.1ms. Negligible. | -| Opaque on-disk format | `cacache` provides `ls()` API for enumeration and inspection. Not as simple as `ls blobs/` but adequate. | -| `cacache` has no built-in LRU eviction | We write a custom eviction pass using `cacache::ls()` + timestamp sort. ~20 lines. Same complexity as custom impl's eviction. | - -**Separate crate rationale:** - -- `chanora_cache` is separate from `chanora_storage` because cache data has different durability semantics (disposable vs persistent), different backup semantics (excluded vs included), and different directory placement (cache dir vs support dir). -- `chanora_cache` lives in the platform's cache directory (`getApplicationCacheDirectory()`). `chanora_storage` lives in the support directory (`getApplicationSupportDirectory()`). -- Bridge init is separate: `init_cache(cache_dir)` vs `init_storage(support_dir)`. - -**API design:** - -```rust -pub struct BlobCache { cache_dir: PathBuf, max_bytes: u64 } -impl BlobCache { - pub fn new(cache_dir: impl AsRef, max_bytes: u64) -> Result; - pub async fn put(&self, prefix: &str, key: &str, data: &[u8]) -> Result<(), BlobCacheError>; - pub async fn get(&self, prefix: &str, key: &str) -> Result>, BlobCacheError>; - pub async fn remove(&self, prefix: &str, key: &str) -> Result<(), BlobCacheError>; - pub async fn clear(&self) -> Result<(), BlobCacheError>; - pub async fn total_size(&self) -> Result; - pub async fn evict(&self) -> Result<(), BlobCacheError>; -} -``` - -All methods are async (cacache is async-native). Key validation at API boundary (`av_` = 32 hex chars, `ic_` = decimal digits). - ---- - -### Q4: Per-Blob Metadata — No Metadata Sidecars (Resolved) - -**Original options:** - -| Approach | Pros | Cons | -|---|---|---| -| SQLite (chanora.db) | ACID, queryable, already in use | Schema migration, couples cache to bookmark DB | -| JSON sidecar files | Simple, self-contained, easy to debug | Write amplification (2 files per blob), concurrent write risk | -| In-memory only | Simplest | Lost on restart, can't do orphan cleanup offline | -| **No metadata (mtime-based)** | **Simplest, zero write amplification, 1 file per blob** | **No per-blob metadata beyond mtime** | - -**Why no metadata is sufficient:** - -1. **Content is immutable.** A given hash (MD5 or CRC32) always maps to the same bytes. There is no "stale content" problem — if the hash changes, it's a new file with a new name. No invalidation needed. - -2. **mtime = insertion time.** Since content is never modified after write, the filesystem mtime equals the time the blob was cached. This is sufficient for "delete oldest files first" eviction. - -3. **Write amplification avoided.** One file per blob (just the data) instead of two (data + JSON sidecar). For a cache that may hold thousands of small files, this matters. - -4. **Eviction is simple.** `walk dir → stat → sort by mtime → delete oldest`. No JSON parsing, no schema, no migration. - -5. **Per-server metadata deferred.** "Clear cache for server X only" and orphan cleanup are post-MVP features. If needed, a refs-layer can be added later without changing the blob layout. - -**Oracle consultation:** Oracle recommended this approach explicitly — no metadata files, mtime-based eviction, separate crate. The immutability guarantee makes metadata redundant. - -**Decision:** No metadata sidecars. One file per blob. Mtime-based eviction. Per-server metadata deferred to post-MVP. - ---- - -### Q5: File Transfer Address Failover — Not Needed - -**What the protocol provides:** - -The TeaSpeak client's `InitializedTransferProperties` returns `addresses[]` — an array of `{serverAddress, serverPort}`. The official TS3 client can try multiple addresses for failover. - -**What tsclientlib provides:** - -```rust -// tsclientlib/src/lib.rs:1373-1375 -let ip = msg.ip.unwrap_or_else(|| self.client.address.ip()); -let addr = SocketAddr::new(ip, msg.port); -TcpStream::connect(&addr).await -``` - -tsclientlib's `InFileDownloadPart` has `ip: Option` — **single IP only**, not an array. If the server provides an IP, it uses that. Otherwise, it falls back to the connection address. **No multi-address failover.** - -**What ts-bookkeeping parses:** - -```rust -pub struct InFileDownloadPart { - pub client_filetransfer_id: u16, - pub server_filetransfer_id: u16, - pub filetransfer_key: String, - pub port: u16, - pub size: u64, - pub protocol: u8, - pub ip: Option, // ← single optional IP -} -``` - -**The server's `notifystartdownload` response** sends `ip` as an optional single value, not an array. The TeaSpeak client's `addresses[]` is a higher-level abstraction (likely the client's own fallback logic), not a protocol feature. - -**Recommendation:** Chanora follows tsclientlib's existing behavior — use `msg.ip` or fallback to connection address. No custom failover logic needed. If the TCP connection fails, the download fails and retries follow the exponential backoff strategy from the design doc. - -**Decision:** Single address (from tsclientlib). No failover needed. diff --git a/docs/architecture/sad.md b/docs/architecture/sad.md deleted file mode 100644 index 19ec3d5..0000000 --- a/docs/architecture/sad.md +++ /dev/null @@ -1,190 +0,0 @@ -# Chanora Software Architecture Description - -**Lifecycle:** SWE.2 Software Architectural Design -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Direct upstream source:** `docs/srs.md` -**Related system allocation:** `docs/sysdes.md` - -## 1. Purpose - -This Software Architecture Description defines Chanora's software architecture for DV review. It bridges SRS software requirements to SWE.3 detailed design and to SWE.5/SWE.6 verification planning. - -This baseline captures the architecture visible in the current repository. It is sufficient for DV traceability review, while deeper per-module algorithms remain in `docs/architecture/sdd.md` and source-level design. - -## 2. Architectural Scope - -Chanora is a Flutter application with a Rust core. Flutter owns the user-facing shell, Material 3 widgets, localization, permission UX, and platform service presentation. Rust owns connection orchestration, protocol isolation, audio processing, storage coordination, diagnostics, server resolution, prefetch policy, and bridge DTOs. - -## 3. Upstream SRS Allocation - -| SRS group | Architectural allocation | -|---|---| -| SRS-003, SRS-008 through SRS-016 | Cross-platform app shell, Flutter UI, Rust core, platform adapters | -| SRS-017 through SRS-030 | Flutter UI, state presentation, connection and voice controls | -| SRS-031 through SRS-035 | Bridge layer and typed DTO boundary | -| SRS-036 through SRS-043 | Rust core connection lifecycle and state behavior | -| SRS-044 through SRS-053 | Protocol adapter and TeamSpeak-compatible server boundary | -| SRS-054 through SRS-061 | State synchronization and replay/reducer verification hooks | -| SRS-062 through SRS-083 | Audio subsystem, DSP, codec, PTT, mute/deaf, metering | -| SRS-084 through SRS-095 | Storage, secure storage, identity, diagnostics-sensitive data | -| SRS-096 through SRS-102 | Diagnostics, export, redaction, troubleshooting hooks | -| SRS-103 through SRS-123 | Platform adapters, packaging, release behavior | -| SRS-124 through SRS-143 | Verification support, analysis requirements, traceability rules | -| SRS-144 through SRS-184 | Material 3, adaptive UI, accessibility, localization, Unicode, app initialization | -| SRS-185 through SRS-218 | Platform baselines, PTT capability, transmit mode, no automatic telemetry, benchmark advisory | - -## 4. Component Architecture - -| Component | Repository location | Responsibility | Direct architectural dependencies | -|---|---|---|---| -| Flutter app shell | `apps/chanora_flutter/lib/main.dart`, services, widgets | App startup, screen composition, user actions, localization, Material 3 UI | Generated Rust bridge, platform plugins, Flutter services | -| Flutter service layer | `apps/chanora_flutter/lib/services/` | Permission flows, lifecycle policy, host prefetch debounce, link trust, state mapping, platform back intent | Flutter app shell, generated bridge APIs, platform plugins | -| Flutter widget layer | `apps/chanora_flutter/lib/widgets/` | Connect UI, channel tree, chat, voice controls, settings, diagnostics surfaces | Flutter services, generated DTOs, design tokens | -| Bridge layer | `crates/chanora_bridge`, `apps/chanora_flutter/lib/src/rust/` | Typed Flutter/Rust boundary and generated bindings | Rust core, Flutter generated code | -| Rust core | `core/chanora_core` | Connection lifecycle, orchestration, reconnect behavior, storage coordination, voice state, bridge-facing event DTOs | Protocol, audio, storage, diagnostics, state, resolver/prefetch | -| Protocol adapter | `crates/chanora_protocol` | Isolate `tsclientlib`, expose typed protocol DTOs/errors | Rust core, external compatible server | -| State sync | `crates/chanora_state` | Snapshot/delta model, channel join helpers, reducer behavior | Rust core, protocol DTOs | -| Audio subsystem | `crates/chanora_audio` | Capture/playback, Opus, DSP, PTT, voice activity reservation, platform units | Rust core, platform APIs, protocol audio path | -| Storage | `crates/chanora_storage` | Bookmarks, identities, encrypted local data, platform keyring integration | Rust core, platform secure storage | -| Diagnostics | `crates/chanora_diagnostics` | Redaction, log sink, export bundle, known-secret registry | Rust core, Flutter diagnostics UI | -| Server resolver | `crates/chanora_resolver` | SRV/TSDNS/DNS fallback resolution | Rust core, prefetch crate | -| Server prefetch | `crates/chanora_prefetch`, Flutter `prefetch_debouncer.dart` | Invisible host-field resolution warming, TTL cache, generation safety | Resolver, Flutter connect UI, Rust core | - -## 5. Static Architecture View - -```text -Flutter UI/widgets/services - -> generated Dart bridge API - -> chanora_bridge - -> chanora_core - -> chanora_protocol -> tsclientlib -> external compatible server - -> chanora_state - -> chanora_audio -> platform audio APIs / Opus / DSP - -> chanora_storage -> platform secure storage / SQLite - -> chanora_diagnostics - -> chanora_prefetch -> chanora_resolver -> network DNS/TSDNS -``` - -The bridge is the trust and type boundary between Flutter and Rust. Flutter must not directly depend on protocol-library internals. Rust core must not expose platform-specific storage or audio details to UI code except through stable DTOs and capability fields. - -Current Core locality note: the public Core Interface remains available through `chanora_core::*` re-exports, while branch `simplify-project-review` has started moving internal Core responsibilities into focused Modules (`events.rs`, `network_diagnostics.rs`). This is an internal maintainability split, not a public Interface change. - -## 6. Runtime Flow Architecture - -### 6.1 Connect Flow - -```text -User enters host/bookmark - -> Flutter connect widgets - -> optional prefetch debounce - -> bridge connect command - -> Rust core supervisor - -> resolver / prefetch cache - -> protocol adapter - -> external compatible server - -> state snapshot/events - -> bridge event stream - -> Flutter state mapper and widgets -``` - -### 6.2 Voice Flow - -```text -Microphone / platform input - -> audio capture unit - -> DSP chain: HPF, NS, AEC, AGC where active - -> PTT/mute/transmit gate - -> Opus encode - -> protocol adapter - -> external compatible server - -External server voice - -> protocol adapter - -> jitter/decode path - -> mixer / per-user controls - -> platform output -``` - -### 6.3 Diagnostics Flow - -```text -Runtime event or error - -> diagnostic log sink / known-secret registry - -> redactor - -> user-initiated export bundle - -> Flutter share/export surface -``` - -## 7. Interface Catalogue - -| Interface | Producer | Consumer | Architectural rule | -|---|---|---|---| -| Bridge command DTOs | Flutter generated API | `chanora_bridge`, Rust core | Stable typed DTOs; no raw protocol-library types cross to Flutter | -| Bridge event DTOs | Rust core / bridge | Flutter services/widgets | User-safe errors and capability fields are explicit | -| Protocol DTOs | `chanora_protocol` | Rust core, state sync | Protocol adapter isolates `tsclientlib` | -| Audio configuration | Flutter settings / Rust core | `chanora_audio` | Voice modes and processing flags are explicit; Windows/Linux desktop VAD-backed `VoiceActivity` is enabled only where runtime evidence exists, with unsupported platforms disabled/deferred | -| Storage records | Storage crate | Rust core / Flutter UI via bridge | Secrets stay behind secure-storage abstraction | -| Diagnostic bundles | Diagnostics crate | Flutter diagnostics UI | Redaction runs before export or display | -| Platform capability records | Platform adapters/audio/PTT backends | UI and release record | UI/release wording must not over-claim capability | - -## 8. Dependency Rules - -| Rule | Rationale | -|---|---| -| Flutter UI depends on generated bridge APIs, not Rust internals | Keeps UI stable across Rust implementation changes | -| Rust core orchestrates crates but protocol/audio/storage crates remain separately testable | Supports SWE.4 unit verification and bounded responsibilities | -| Protocol adapter is the only component that owns `tsclientlib` coupling | Protects the app from protocol-library leakage | -| Diagnostics redaction must be reusable by runtime logging and export | Prevents split redaction behavior | -| Platform-specific behavior stays in platform adapters or audio platform units | Keeps cross-platform logic testable and reduces conditional sprawl | -| Release claims consume capability records and release evidence | Prevents over-claiming PTT, signing, packaging, or secure-storage behavior | - -## 9. Non-Functional Allocation - -| Concern | Architectural mechanism | Verification owner | -|---|---|---| -| Real-time audio responsiveness | Rust audio subsystem, benchmark advisory, bounded callback behavior | Audio / Platform QA | -| Privacy and no automatic telemetry | User-initiated diagnostics, no automatic upload policy | Security / Privacy QA | -| Secure secret handling | Platform secure-storage abstraction and encrypted local storage | Security / QA | -| Cross-platform UI | Flutter Material 3, design tokens, responsive widgets | Software QA / UX | -| Protocol compatibility | `tsclientlib` adapter isolation and compatible-server matrix | Protocol / Integration QA | -| Release reproducibility | CI, build scripts, artifact hashes, release-readiness record | Release / Operations QA | - -## 10. Architectural Decisions Captured by This Baseline - -| Decision | Architectural outcome | -|---|---| -| Flutter + Rust split | Flutter owns presentation; Rust owns protocol/audio/storage/diagnostics core behavior | -| `tsclientlib` isolation | Protocol compatibility is behind `chanora_protocol` | -| Secure storage abstraction | Platform storage details do not leak into UI or unrelated crates | -| Advisory audio benchmarks | Performance regressions are surfaced without making CI a hard release gate at this stage | -| PTT capability levels | Platform PTT support is represented as capability data and must match release wording | -| VoiceActivity platform scope | Windows/Linux desktop `VoiceActivity` is implemented through the capture VAD path; unsupported platforms remain disabled/deferred until backend allocation and runtime verification exist | -| No automatic diagnostic upload in MVP | Diagnostics are local and user-initiated unless future approved requirements change policy | - -## 11. Verification Handoff - -| Verification plan | SAD handoff | -|---|---| -| SWE.4 | Component boundaries define unit-test ownership for Flutter services/widgets and Rust crates | -| SWE.5 | Interface catalogue and runtime flows define integration paths | -| SWE.6 | SRS allocation and acceptance flows define software acceptance evidence | -| SYS.4 | Platform capability and external-server boundaries define system integration evidence | - -## 12. Traceability to SRS - -This SAD derives only from `docs/srs.md`. The broad SRS group-to-component allocation in section 3 is the controlling SWE.2 trace for DV. Detailed item-level trace is represented by the SRS coverage matrix and `docs/governance/traceability-matrix.md`. - -## 13. Open Architecture Risks - -| Risk | Impact | Control | -|---|---|---| -| SAD item numbering from historical status references is not reconstructed in this baseline | Existing references such as `SAD-043` and `SAD-046` are not itemized here | Treat this as a DV baseline SAD; add itemized SAD IDs in a follow-up if process requires strict ID-level review | -| Some architecture views are textual rather than C4 diagrams | Reviewers may request visual C4 views | Record as documentation hardening, not a blocker for DV baseline if textual views are accepted | -| Release/platform architecture evidence is incomplete | Public release remains blocked | Controlled by release-readiness and waiver records | -| Android runtime verification is not automatic in local reviews | Android permission/audio/lifecycle regressions can pass Rust-only tests | Require `adb devices -l` with a connected device/emulator and Android smoke evidence before claiming Android runtime success | -| Protocol voice packet re-export is an intentional exception to full protocol isolation | Future changes may accidentally widen the protocol/audio Seam | Document and keep the voice wire exception narrow, or move packet construction fully into `chanora_protocol` | - -## 14. DV Conclusion - -This SWE.2 baseline is sufficient to remove the missing-SAD traceability gap for DV review. It does not replace candidate test evidence or final release approval. diff --git a/docs/architecture/sdd.md b/docs/architecture/sdd.md deleted file mode 100644 index 4b2a735..0000000 --- a/docs/architecture/sdd.md +++ /dev/null @@ -1,161 +0,0 @@ -# Chanora Software Detailed Design - -**Lifecycle:** SWE.3 Software Detailed Design and Unit Construction Handoff -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Direct upstream source:** `docs/architecture/sad.md` -**Related software requirements:** `docs/srs.md` - -## 1. Purpose - -This Software Detailed Design defines the module-level design details needed for SWE.4 unit verification and SWE.5 integration verification. It is based on the current repository layout and the SWE.2 architecture baseline. - -## 2. Module Catalogue - -| SDD module | Source location | Primary responsibility | Upstream SAD component | -|---|---|---|---| -| SDD-MOD-001 Flutter app bootstrap | `apps/chanora_flutter/lib/services/app_bootstrap.dart`, `main.dart` | Initialize Rust bridge, localization, app services, theme/design baseline | Flutter app shell | -| SDD-MOD-002 Connect UI | `apps/chanora_flutter/lib/widgets/connect_widgets.dart` | Host/bookmark inputs, connect actions, pre-request UX | Flutter widget layer | -| SDD-MOD-003 Snapshot and channel UI | `snapshot_view.dart`, `snapshot_state_mapper.dart`, `channel_spacer.dart` | Present channel tree, clients, and mapped state | Flutter widget/service layer | -| SDD-MOD-004 Chat UI | `chat_views.dart`, `bbcode_text.dart` | Channel text rendering and BBCode-safe display | Flutter widget layer | -| SDD-MOD-005 Voice UI | `voice_bar.dart`, `voice_compact.dart`, `voice_settings*.dart`, `voice_level_meter.dart`, `ptt_capability_badge.dart` | Voice controls, processing settings, metering, PTT capability | Flutter widget layer | -| SDD-MOD-006 Platform services | `android_permissions_service.dart`, `ios_permissions_service.dart`, `audio_lifecycle_service.dart`, `back_intent_*`, `link_trust_service.dart` | Permission, lifecycle, navigation, route/link trust behavior | Flutter service layer | -| SDD-MOD-007 Bridge API | `crates/chanora_bridge/src/api.rs`, generated Dart/Rust bridge files | Typed command/event boundary | Bridge layer | -| SDD-MOD-008 Rust core supervisor | `core/chanora_core/src/lib.rs`, `events.rs`, `network_diagnostics.rs`, `ptt.rs` | Connection orchestration, reconnect, bridge-facing event DTOs, network diagnostics, PTT state, storage coordination | Rust core | -| SDD-MOD-009 Protocol adapter | `crates/chanora_protocol/src/` | `tsclientlib` isolation, DTO/error mapping | Protocol adapter | -| SDD-MOD-010 State sync | `crates/chanora_state/src/lib.rs`, `channel_join.rs` | Snapshot/delta model, reducer, channel join support | State sync | -| SDD-MOD-011 Audio subsystem | `crates/chanora_audio/src/` | Audio capture/playback, DSP, Opus, PTT, mode stack, platform units | Audio subsystem | -| SDD-MOD-012 Storage | `crates/chanora_storage/src/lib.rs` | Bookmarks, identity storage, encrypted local records, keyring abstraction | Storage | -| SDD-MOD-013 Diagnostics | `crates/chanora_diagnostics/src/lib.rs` | Redaction, log sink, known-secret registry, export bundle | Diagnostics | -| SDD-MOD-014 Resolution and prefetch | `crates/chanora_resolver/src/lib.rs`, `crates/chanora_prefetch/src/lib.rs`, `prefetch_debouncer.dart` | SRV/TSDNS/DNS fallback and generation-safe resolution warming | Server resolver / prefetch | -| SDD-MOD-015 Build and release hooks | `.github/workflows/`, `tools/`, platform project files | CI, unsigned iOS build, benchmark advisory, platform smoke procedures | Release / platform architecture | - -## 3. Bridge Boundary Design - -The bridge boundary is the only supported Flutter-to-Rust command path. Dart code uses generated APIs under `apps/chanora_flutter/lib/src/rust/`; Rust exposes bridge functions through `crates/chanora_bridge/src/api.rs`. - -Design rules: - -| Rule | Detail | -|---|---| -| DTO stability | DTO fields must be explicit and serializable through Flutter Rust Bridge generation | -| Error safety | Rust errors exposed to Flutter must be user-safe or mapped before display | -| Secret handling | Secrets may cross only as command inputs or protected DTO fields and must be registered for diagnostic redaction where relevant | -| Capability reporting | Platform and PTT capability fields must reflect actual active backend state | -| Regeneration control | Generated bridge files are implementation artifacts and must be regenerated when bridge API signatures change | - -## 4. Connection and State Design - -| Detail | Design | -|---|---| -| Connection lifecycle | Rust core owns connect/disconnect/reconnect decisions and suppresses reconnect after user disconnect | -| Backoff | Reconnect uses exponential backoff as described in implementation status, capped at 60 seconds | -| Core internal Modules | `lib.rs` remains the public Interface and orchestration entry point; `events.rs` owns public event/bridge-facing DTOs re-exported by `lib.rs`; `network_diagnostics.rs` owns private connect/loss counters and the last-loss ring buffer | -| Server resolution | Resolver performs SRV/TSDNS/DNS fallback; prefetch cache may warm but must not be required for connect success | -| Snapshot mapping | Rust state and bridge DTOs are mapped into Flutter view models by `snapshot_state_mapper.dart` | -| Channel join | Channel join logic and errors are represented through Rust state/protocol handling and Flutter error mapper service | -| Reducers | `chanora_state` owns snapshot/delta reducer design with unit coverage for snapshot, delta, reconnect, duplicate normalization, disconnected/lost suppression, unknown-client voice activity, deterministic ordering, and channel-delete/client cleanup. Current runtime UI refresh still flows through `chanora_core` snapshot/probe paths; full live-event folding through `chanora_state::reduce` is an integration follow-up. | - -## 5. Audio Detailed Design - -| Audio element | Design detail | -|---|---| -| Capture/playback | Platform-specific units handle Android, iOS, desktop/fallback paths behind Rust audio abstractions | -| Codec | Opus encode/decode lives in `opus_voice.rs` and associated audio modules | -| DSP chain | High-pass filter, noise suppression, echo cancellation, and AGC are represented by audio processing modules/backends | -| Transmit control | `TransmitMode` supports `Ptt`, `Continuous`, and `VoiceActivity`; `VoiceActivity` is active for Windows/Linux desktop capture when VAD is configured, while mobile, macOS, and unverified-platform enablement remain deferred | -| VoiceActivity gate (capture-side) | `voice_activity::VoiceActivityStateMachine` is the 10 ms-cadence gate for `TransmitMode::VoiceActivity`; open-after 40 ms (debounce), hangover 500 ms (anti-chatter), min-tx 200 ms (anti-flicker), weak-hold 30-100 frames (anti-stale-VAD); live `configure()` re-clamps existing timers on settings change without resetting state; 9 unit tests cover the main paths | -| PTT | Desktop/mobile backends expose capability level and active backend; missed-key-up watchdog prevents stuck transmit | -| Release tail | Tail handling prevents abrupt cutoffs after PTT release where configured | -| Render peak limiter | `voice_render::limit_peak_inplace` is a single-pass, allocation-free per-frame peak scaler applied in both the macOS and iOS render callbacks before the i16 downmix; default threshold 0.99 prevents hard clipping on multi-client mixes that sum past 0 dBFS while remaining transparent for normal voice levels (allocation-free, lock-free, safe on the realtime audio thread) | -| macOS render cadence (producer + ring) | `ios_voice_unit.rs:851-961` runs a 20 ms tokio producer task that calls `AudioHandler::fill_buffer(1920)` and `force_push`es each sample into a `crossbeam ArrayQueue` (SPSC-effective, MPMC-but-wait-free-per-end); ring capacity 12000 samples ≈ 6.25× pull quantum; 100 ms prebuffer (`PREBUFFER_SAMPLES = 9600` stereo f32) before the VPIO render callback starts draining, matching Mumble's playout margin and WebRTC's kStartDelayMs order of magnitude | -| iOS render cadence (direct-fill) | `ios_voice_unit.rs:968-1034` does `AudioHandler::fill_buffer` directly in the VPIO render callback (VPIO on iOS requests 480-frame ≈ 10 ms slices that align with tsclientlib's 20 ms Opus frame); scratch buffer preallocated to 4096×2 f32 at setup time so the realtime callback never `resize()`s; `try_lock` (not `lock`) on the AudioHandler mutex so contention never stalls the realtime IO thread; on `WouldBlock` the callback emits silence and increments `callback_xrun` | -| VPIO ducking config (macOS 14+) | `ios_voice_unit.rs` writes an 8-byte `AuVoiceIoOtherAudioDuckingConfiguration` struct (`m_enable_advanced_ducking = 0` disables dynamic voice-activity-driven ducking; `m_ducking_level = kAUVoiceIOOtherAudioDuckingLevelMin = 10`) to selector `kAUVoiceIOProperty_OtherAudioDuckingConfiguration` (= 2108) on the VoiceProcessingIO AudioUnit at startup, minimising the ducking of other apps' audio during a voice session; on macOS 13 the property is silently ignored (VPIO returns the default ducking behaviour) and the code logs a debug message and continues | -| Benchmarks | Realtime capture, Opus, and resampler benchmarks provide advisory baseline evidence | - -## 6. Storage and Secret Design - -| Storage item | Design detail | -|---|---| -| Bookmarks | Stored locally through the storage crate and surfaced in Flutter connect UI | -| Identity references | Stored through `IdentityFileStore` and platform secure storage where available | -| Passwords/secrets | Encrypted at rest using the current storage design; Android Keystore-backed DEK is deferred and must be disclosed | -| CI keyring behavior | CI disables real keyring access with `CHANORA_DISABLE_KEYRING=1` to avoid headless blocking | -| Fallback behavior | Platform fallback modes must be represented as limitations in release/security evidence | - -## 7. Diagnostics Detailed Design - -| Diagnostic element | Design detail | -|---|---| -| Log sink | Runtime logs can be captured by diagnostic sinks for export | -| Known-secret registry | Runtime secrets are registered for redaction where applicable | -| Redactor | Redacts configured sensitive patterns before export | -| Export bundle | Diagnostic export is JSON-based and user-initiated | -| Upload policy | MVP has no automatic diagnostic, telemetry, or crash upload | - -## 8. Flutter UI Detailed Design - -| UI area | Design detail | -|---|---| -| Design tokens | `chanora_tokens.dart` centralizes product styling over Material 3 | -| Platform capability display | `platform_capabilities.dart` and PTT capability widgets expose platform-specific support honestly | -| Localization | Generated localization files provide English and Simplified Chinese resources | -| Responsive behavior | Current widgets support compact/mobile-oriented layouts; expanded side-pane hardening remains P1/P2 as recorded | -| Accessibility | Critical status should use text/icons/semantics and not color alone; verification remains through UI tests/audit | -| UI settings persistence | `UiPreferencesService` persists host, nickname, permission explanation state, and theme mode through `shared_preferences`; invalid stored theme values fall back to system theme | - -## 9. Build and Release Detailed Design - -| Build/release item | Design detail | -|---|---| -| Rust CI | `.github/workflows/ci.yml` runs cargo check/test and advisory clippy | -| Flutter CI | `.github/workflows/ci.yml` runs Flutter pub get, analyze, and tests | -| Supply chain | CI runs cargo-deny and license inventory checks | -| iOS unsigned build | CI runs `flutter build ios --release --no-codesign` | -| Audio benchmarks | `bench-advisory.yml` runs audio benchmarks and posts advisory evidence | -| Platform packages | Public binary packaging/signing/notarization remains release-gated | - -## 10. Verification Hook Design - -| Module | SWE.4 unit hooks | SWE.5/SWE.6 integration hooks | -|---|---|---| -| Flutter services/widgets | Dart unit/widget tests under `apps/chanora_flutter/test/` | Widget/system demos and candidate device smoke | -| Bridge | API compile/generation checks | Flutter-to-Rust command/event smoke | -| Rust core | Cargo tests | Compatible-server lifecycle demo | -| Protocol | DTO/error mapping tests | Protocol compatibility matrix and server demo | -| State sync | Reducer tests | Snapshot/delta/reconnect integration evidence | -| Audio | DSP/codec/PTT tests and benchmarks | Platform audio loopback/device demo | -| Storage | Repository/encryption/keyring-disabled tests | Platform secure-storage audit | -| Diagnostics | Redaction/export tests | User-initiated export inspection | -| Release hooks | CI workflow validation | Release readiness record and artifact evidence | - -## 11. Traceability to SAD - -| SAD component | SDD modules | -|---|---| -| Flutter app shell | SDD-MOD-001 | -| Flutter service layer | SDD-MOD-006, SDD-MOD-014 | -| Flutter widget layer | SDD-MOD-002 through SDD-MOD-005 | -| Bridge layer | SDD-MOD-007 | -| Rust core | SDD-MOD-008 | -| Protocol adapter | SDD-MOD-009 | -| State sync | SDD-MOD-010 | -| Audio subsystem | SDD-MOD-011 | -| Storage | SDD-MOD-012 | -| Diagnostics | SDD-MOD-013 | -| Server resolver/prefetch | SDD-MOD-014 | -| Release/platform architecture | SDD-MOD-015 | - -## 12. Open Detailed-Design Risks - -| Risk | Impact | Control | -|---|---|---| -| Detailed item IDs from historical SDD references are not reconstructed | Existing references such as `SDD-109` are not itemized in this baseline | Treat this as a DV baseline SDD and add strict item numbering later if required | -| Some module designs are summarized rather than API-by-API | May be insufficient for final process audit | Use this as DV baseline; deepen high-risk modules before final release gate | -| Android Keystore-backed DEK is not implemented | Limits storage/security design claims | Controlled by waiver and release-readiness records | -| Full event replay tooling and live reducer integration evidence are absent | Limits state verification design beyond reducer unit behavior | Controlled as P1 gap and runtime-integration follow-up | -| Android runtime smoke is blocked when no device/emulator is attached | Android permission/audio/lifecycle paths cannot be claimed from Rust tests alone | Require `adb devices -l` and Android smoke evidence before closing Android verification claims | - -## 13. DV Conclusion - -This SWE.3 baseline is sufficient to remove the missing-SDD traceability gap for DV review and to feed SWE.4/SWE.5 verification plans. It does not close release evidence gaps or replace source-level tests. diff --git a/docs/architecture/sysdes.md b/docs/architecture/sysdes.md deleted file mode 100644 index 7b99ea4..0000000 --- a/docs/architecture/sysdes.md +++ /dev/null @@ -1,21 +0,0 @@ -# System Design Specification - -**Document status:** DV entry-point record -**Canonical document:** `../sysdes.md` - -The canonical Chanora System Design Specification currently lives at `docs/sysdes.md`. This file preserves the README-advertised path `docs/architecture/sysdes.md` for DV navigation. - -Reviewers shall use `docs/sysdes.md` as the authoritative SysDes baseline until the repository migration moves the canonical file into this directory. - -## DV Review Summary - -| Topic | Canonical source | -|---|---| -| System element allocation | `docs/sysdes.md` sections 4 through 8 | -| Verification handoff | `docs/sysdes.md` section 12, SysDes-102 through SysDes-107 | -| SysRS-to-SysDes allocation matrix | `docs/sysdes.md` Appendix A | -| Change-control and traceability rules | `docs/sysdes.md` SysDes-108 through SysDes-110 | - -## DV Position - -The SysDes baseline is reviewable for DV. SRS, SAD, SDD, and verification documents derive from or consume this allocation layer. diff --git a/docs/governance/baseline-approval-record.md b/docs/governance/baseline-approval-record.md deleted file mode 100644 index 0c63002..0000000 --- a/docs/governance/baseline-approval-record.md +++ /dev/null @@ -1,32 +0,0 @@ -# Chanora Baseline Approval Record - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Approval Scope - -This record tracks approval for documentation baselines. It does not approve public/store release. - -| Baseline | Status | DV disposition | -|---|---|---| -| SysRS | Baseline available | Reviewable | -| SysDes | Baseline available | Reviewable | -| SRS | Baseline available | Reviewable | -| SAD / SWE.2 | Baseline candidate | Reviewable with depth limitation | -| SDD / SWE.3 | Baseline candidate | Reviewable with depth limitation | -| Verification plans | Baseline candidate | Reviewable with evidence limitations | -| Release readiness | Baseline candidate | No-Go for public/store release | - -## 2. Required Approvers - -| Area | Approver role | -|---|---| -| Requirements/design | System Engineering / Software Engineering | -| Verification | Software QA / System QA | -| Release | Product / Release Operations | -| Security/privacy | Security / Privacy owner | -| Legal/trademark/OSS | Legal / Product owner | - -## 3. DV Recommendation - -Approve the document baseline for DV discussion. Do not approve public/store release until release gates close. diff --git a/docs/governance/baseline-candidate-validation-report.md b/docs/governance/baseline-candidate-validation-report.md deleted file mode 100644 index 6d4226c..0000000 --- a/docs/governance/baseline-candidate-validation-report.md +++ /dev/null @@ -1,38 +0,0 @@ -# Chanora Baseline Candidate Validation Report - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Validation Summary - -Validation was performed against the README-advertised document tree and the DV lifecycle chain. - -| Check | Result | -|---|---| -| README document tree represented | Baseline candidate documents exist or path records point to canonical baselines | -| SysRS/SysDes/SRS chain | Available | -| SAD/SDD chain | Baseline candidates added | -| Verification plans | Available | -| Release readiness | Available; public/store release No-Go | -| Waivers | Available | - -## 2. Validation Method - -| Validation step | Evidence | -|---|---| -| README path coverage | Shell `test -f` command over every advertised document path | -| Sentinel-language scan | Review scan over the DV document tree returned no incomplete-marker matches | -| Lifecycle trace | Traceability matrix covers SysRS -> SysDes -> SRS -> SAD -> SDD -> Verification | -| Release posture | Release-readiness record and legal/security docs consistently keep public/store release at No-Go | - -## 3. Known Validation Limits - -| Limit | Control | -|---|---| -| Candidate run IDs not embedded | Release-readiness record requires run IDs before release approval | -| Legal DEC-012 open | Public/store release remains blocked | -| Some SAD/SDD details summarized | Deepen before final process audit if required | - -## 4. Conclusion - -The baseline candidate is suitable for DV meeting review with recorded limitations. diff --git a/docs/governance/decision-impact-assessment.md b/docs/governance/decision-impact-assessment.md deleted file mode 100644 index 2cac461..0000000 --- a/docs/governance/decision-impact-assessment.md +++ /dev/null @@ -1,18 +0,0 @@ -# Chanora Decision Impact Assessment - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Impact Matrix - -| Decision or gap | Requirements impact | Design impact | Verification impact | Release impact | -|---|---|---|---|---| -| DEC-012 open | Public wording and OSS gates remain constrained | Legal surfaces must avoid over-claiming | Audit evidence required | Public/store release No-Go | -| Android Keystore-backed DEK deferred | Secure-storage claim limited | Storage design carries fallback limitation | Platform audit required | Waiver required | -| Full reducer tests incomplete | State verification incomplete | State design remains valid but evidence partial | SWE.4/SWE.5 partial | Blocks full state-sync claim | -| Desktop/iOS artifacts not release-ready | Platform packaging requirements partial | Release design remains source-build/unsigned | SYS.4 evidence partial | Public binary release No-Go | -| VAD platform-scoped | VoiceActivity active only for verified Windows/Linux desktop paths | UI must show disabled/unavailable on unsupported platforms | VAD pass claim must name verified platform/runtime evidence | No broad VAD marketing claim without platform scope | - -## 2. Conclusion - -Current impacts are controlled for DV by waivers and release No-Go status. diff --git a/docs/governance/document-index.md b/docs/governance/document-index.md deleted file mode 100644 index 734b308..0000000 --- a/docs/governance/document-index.md +++ /dev/null @@ -1,36 +0,0 @@ -# Chanora Document Index - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Purpose - -This index lists the documents required for DV review and identifies their current status. - -## 2. Baseline Documents - -| Area | Document | Status | -|---|---|---| -| Requirements | `docs/sysrs.md` | Canonical SysRS baseline | -| Requirements | `docs/srs.md` | Canonical SRS baseline | -| Requirements path | `docs/requirements/sysrs.md`, `docs/requirements/srs.md` | Path records pointing to canonical root files | -| System design | `docs/sysdes.md` | Canonical SysDes baseline | -| System design path | `docs/architecture/sysdes.md` | Path record pointing to canonical root file | -| Software architecture | `docs/architecture/sad.md` | SWE.2 baseline candidate | -| Software detailed design | `docs/architecture/sdd.md` | SWE.3 baseline candidate | -| Verification | `docs/verification/verification-master-plan.md` | Verification baseline candidate | -| Verification | `docs/verification/swe4-unit-verification-plan.md` | SWE.4 baseline candidate | -| Verification | `docs/verification/swe5-software-integration-verification-plan.md` | SWE.5 baseline candidate | -| Verification | `docs/verification/swe6-software-verification-plan.md` | SWE.6 baseline candidate | -| Verification | `docs/verification/sys4-system-integration-verification-plan.md` | SYS.4 baseline candidate | -| Release | `docs/release/release-readiness-go-nogo-record.md` | No-Go for public/store release | -| Release | `docs/release/platform-release-policy.md` | Baseline candidate | -| Governance | `docs/governance/traceability-matrix.md` | DV baseline candidate | -| Governance | `docs/governance/maintainability-review-2026-06-08.md` | Working-branch maintainability and fail-safe review | -| Security/privacy/legal | `docs/security/security-privacy-legal-guideline.md` | Baseline candidate | -| Privacy | `docs/privacy/privacy-policy.md` | Engineering baseline candidate | -| Legal | `docs/legal/trademark-and-attribution-review.md` | DEC-012 open | - -## 3. DV Use - -Use this index as the first navigation document in the DV meeting. Release approval remains controlled by the release-readiness record. diff --git a/docs/governance/document-naming-convention.md b/docs/governance/document-naming-convention.md deleted file mode 100644 index 659074a..0000000 --- a/docs/governance/document-naming-convention.md +++ /dev/null @@ -1,33 +0,0 @@ -# Chanora Document Naming Convention - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Rule - -Repository documentation uses lowercase kebab-case file names under topic directories. - -Examples: - -| Document type | Path pattern | -|---|---| -| Requirements | `docs/requirements/.md` or canonical root file during migration | -| Architecture | `docs/architecture/.md` | -| Verification | `docs/verification/-verification-plan.md` | -| Release | `docs/release/.md` | -| Governance | `docs/governance/.md` | - -## 2. Identifier Rules - -| Identifier | Meaning | -|---|---| -| `SysRS-XXX` | System requirement | -| `SysDes-XXX` | System design item | -| `SRS-XXX` | Software requirement | -| `SAD` | Software Architecture Description / SWE.2 | -| `SDD` | Software Detailed Design / SWE.3 | -| `DV-WVR-XXX` | DV waiver | - -## 3. Migration Rule - -When canonical files move, path records must be replaced by the canonical content or by redirects that clearly identify the authoritative source. diff --git a/docs/governance/document-review-report.md b/docs/governance/document-review-report.md deleted file mode 100644 index 4e8bb44..0000000 --- a/docs/governance/document-review-report.md +++ /dev/null @@ -1,37 +0,0 @@ -# Chanora Document Review Report - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Review Method - -Documents were reviewed for DV navigation, lifecycle coverage, explicit release gating, and absence of unsupported completion claims. - -| Review attribute | Value | -|---|---| -| Review date | 2026-05-29 | -| Review scope | `docs/requirements/`, `docs/architecture/`, `docs/verification/`, `docs/release/`, `docs/security/`, `docs/privacy/`, `docs/legal/`, `docs/ui-ux/`, `docs/i18n/`, `docs/governance/`, `docs/references/` | -| Review criteria | README path coverage, lifecycle traceability, release-status consistency, waiver visibility, security/privacy/legal gate visibility, sentinel-language scan | -| Evidence commands | README path `test -f` check; sentinel-language scan over the DV document tree | - -## 2. Findings - -| Finding | Status | Action | -|---|---|---| -| Previous gap: verification document set was missing | Addressed | Added verification master/SWE.4/SWE.5/SWE.6/SYS.4 plans | -| Previous gap: SAD/SDD were missing from current tree | Addressed | Added SWE.2/SAD and SWE.3/SDD baselines | -| Release blockers needed explicit record | Addressed | Added release-readiness record and waiver register | -| README tree had missing documents | Addressed for DV | Added baseline candidate records and path records | - -## 3. Residual Issues - -| Residual issue | DV handling | -|---|---| -| Candidate commit SHA, tag, artifact hashes, and run IDs are not recorded | Blocks release approval; acceptable for document baseline review | -| SAD/SDD are baseline candidates without historical item-number reconstruction | Accept for DV baseline; deepen before strict item-level audit | -| DEC-012 legal/trademark/OSS review remains open | Public/store release remains No-Go | -| Some implementation status items require revalidation after newer commits | Controlled by waiver register and release-readiness record | - -## 4. Review Conclusion - -The document set is reviewable for DV. Public/store release remains blocked by the release-readiness record. diff --git a/docs/governance/git-commit-message-convention.md b/docs/governance/git-commit-message-convention.md deleted file mode 100644 index 0f5fe3e..0000000 --- a/docs/governance/git-commit-message-convention.md +++ /dev/null @@ -1,21 +0,0 @@ -# Chanora Git Commit Message Convention - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -Chanora uses Conventional Commits style: - -```text -(): -``` - -Examples: - -```text -feat(voice): add push-to-talk state handling -fix(protocol): recover channel tree after reconnect snapshot -sec(diagnostics): redact server password from export bundle -release(android): prepare internal alpha build metadata -``` - -Commits that affect requirements, design, verification, release, security, privacy, or legal gates should update the relevant document in the same change set. diff --git a/docs/governance/maintainability-review-2026-06-08.md b/docs/governance/maintainability-review-2026-06-08.md deleted file mode 100644 index e4b793e..0000000 --- a/docs/governance/maintainability-review-2026-06-08.md +++ /dev/null @@ -1,99 +0,0 @@ -# Chanora Maintainability Review — 2026-06-08 - -**Document status:** Working-branch review record -**Branch:** `simplify-project-review` -**Scope:** Project-wide simplification, fail-safe, and verification review - -## 1. Purpose - -This record captures the current maintainability review so implementation, verification, and release documents do not drift behind the code. It focuses on unnecessary Modules, shallow Interfaces, duplicate Implementations, built-in replacement opportunities, and fail-safe gaps that need explicit evidence before release claims. - -## 2. Changes Already Applied on the Branch - -| Area | Files | Maintainability result | -|---|---|---| -| Core event DTO locality | `core/chanora_core/src/events.rs`, `core/chanora_core/src/lib.rs` | Public Core event DTOs moved out of the oversized Core integration Module while preserving the public `chanora_core::*` Interface through re-exports. | -| Core network diagnostics locality | `core/chanora_core/src/network_diagnostics.rs`, `core/chanora_core/src/lib.rs` | Private network diagnostic ring-buffer state and its regression test now live next to the Implementation they protect. | -| Bounded queues | `core/chanora_core/src/network_diagnostics.rs`, `crates/chanora_diagnostics/src/lib.rs` | Replaced `Vec + remove(0)` queue behaviour with `VecDeque`, reducing custom queue code and avoiding O(n) front removal. | -| PTT backend errors | `crates/chanora_audio/src/ptt_backends/mod.rs` | Replaced manual `Display` / `Error` Implementation with existing `thiserror::Error`; regression test keeps user-facing strings stable. | -| Render downmix | `crates/chanora_audio/src/voice_render.rs`, `crates/chanora_audio/src/ios_raw_unit.rs` | Removed duplicate mono-i16 downmix loop by using the interleaved helper with one output channel. | -| State reducer | `crates/chanora_state/src/lib.rs` | Reused the main snapshot reducer for reconnect snapshots instead of duplicating normalization and delta construction. | -| Workspace metadata | `crates/chanora_resolver/Cargo.toml`, `Cargo.lock` | Resolver inherits workspace package metadata, improving release metadata Locality. | -| Flutter voice fail-safes | `apps/chanora_flutter/lib/main.dart`, `apps/chanora_flutter/lib/widgets/voice_compact.dart`, `apps/chanora_flutter/lib/services/ios_audio_session_controller.dart` | Commit `d835394` preserves independent mute owners, releases touch PTT on disposal while held, and catches iOS audio-session `MissingPluginException` / activation failures so they do not become unhandled async errors. | -| Rust realtime callback hardening | `crates/chanora_audio/src/android_voice_unit.rs`, `crates/chanora_audio/src/ios_raw_unit.rs`, `crates/chanora_audio/src/engine.rs` | Commit `8606eb4` hardens Android/iOS realtime callback paths. The current branch also migrates the Android-only JNI paths to `jni-rs` 0.22 so the supported ARM64 Android debug build compiles. Full lock-free audio-handler/config/debug-recorder redesign remains follow-up work. | - -## 3. Remaining Simplification Opportunities - -| Recommendation | Candidate files | Strength | Notes | -|---|---|---|---| -| Continue splitting Core internals by responsibility | `core/chanora_core/src/lib.rs` | Strong | Next slices should be reconnect/session, voice projection, storage helpers, and diagnostics export. Keep public re-exports stable. | -| Make Bridge depend on Core rather than Audio where possible | `crates/chanora_bridge/Cargo.toml`, `crates/chanora_bridge/src/api.rs`, `core/chanora_core/src/lib.rs` | Worth exploring | The Bridge currently has a direct audio edge. Apply the deletion test before removing it. | -| Decide whether prefetch deserves a crate-level Seam | `crates/chanora_prefetch/src/lib.rs`, `crates/chanora_resolver/src/lib.rs`, `core/chanora_core/src/lib.rs` | Worth exploring | Prefetch is a small TTL cache and fire-and-forget resolver Adapter. Merge into resolver if it is resolver policy; merge into Core if it is app orchestration policy. | -| Consolidate protocol/core/bridge event catalogues | `crates/chanora_protocol/src/dto.rs`, `core/chanora_core/src/events.rs`, `crates/chanora_bridge/src/api.rs` | Worth exploring | Protocol-owned deltas and Core-owned lifecycle events are currently mirrored through multiple DTO layers. | -| Reduce bridge DTO mirror boilerplate | `crates/chanora_bridge/src/api.rs` | Worth exploring | Verify Flutter Rust Bridge support before deleting mirrors. If mirrors remain required, centralize conversion patterns and keep field order aligned with Core DTOs. | -| Clarify protocol voice packet exception | `crates/chanora_protocol/src/lib.rs`, `crates/chanora_audio/Cargo.toml` | Worth exploring | The protocol crate documents `tsclientlib` isolation but deliberately re-exports voice packet types for audio. Document this as an explicit voice wire Seam or move packet construction fully into protocol. | -| Remove shallow audio helpers only after public API check | `crates/chanora_audio/src/processor/noop.rs`, `crates/chanora_audio/src/processor/platform.rs`, `crates/chanora_audio/src/frame.rs` | Speculative | These Modules are shallow, but deletion must wait until external/public API expectations are checked. | -| Redesign remaining audio shared state outside realtime callbacks | `crates/chanora_audio/src/engine.rs`, platform voice units, debug recorder/config paths | Strong follow-up | The focused callback hardening is complete, but a full lock-free `AudioHandler` / config / debug-recorder redesign should be planned separately and verified on device. | -| Review protocol/core disconnect and control-plane bounds | `core/chanora_core/src/lib.rs`, `crates/chanora_protocol/src/adapter.rs` | Strong follow-up | Unless closed by a later code slice, sustained voice traffic and broken transport should be reviewed for bounded control request and disconnect progress. | - -## 4. Fail-Safe Gaps That Need Evidence - -| Gap | Risk | Required evidence before release claim | -|---|---|---| -| Android Keystore-backed DEK remains deferred | Android identity/bookmark encryption has weaker fail-safe properties than final target secure-storage design. | Android secure-storage audit or waiver; explicit release-readiness limitation. | -| Android permission/audio lifecycle needs deeper route exercise | Build/install/launch smoke now passes on the emulator, but full permission-flow and audio-route lifecycle behavior still need an interactive scenario or device test before release. | Device/emulator scenario covering permission request/denial/grant, voice controls, foreground service, audio focus, and route/SCO transitions. | -| iOS device runtime verification not executed in this review | The iOS audio-session error path is hardened, but VoiceProcessingIO/session ordering and runtime audio behavior still need device evidence. | iOS device or simulator build/run plus audio-session smoke evidence before iOS runtime success is claimed. | -| VAD / VoiceActivity wording drift | VAD assets, tests, and Windows/Linux desktop runtime wiring exist, but product-enabled `VoiceActivity` must remain platform-scoped per DEC-030. | Release, README, and verification wording must distinguish verified desktop behavior from unsupported mobile/macOS/unverified-platform behavior. | -| Protocol voice packet re-export is an intentional exception | Future maintainers may assume complete protocol isolation and accidentally widen the Seam. | Architecture note in SAD/SDD or a decision-register entry. | -| Bridge DTO mirror drift | Field additions can be missed across Core, Bridge, and Dart generated DTOs. | Bridge generation check plus Flutter analyze/test after bridge DTO changes. | -| Full live reducer integration remains separate from reducer unit coverage | State reducer tests are strong, but runtime UI still has snapshot/probe paths. | SWE.5 integration run proving live protocol events fold through the intended state path, or explicit P1 deferral. | -| Event replay tooling remains absent | Replay-based diagnosis and regression reproduction are limited. | Event replay tool implementation or waiver. | - -## 5. Verification Policy for Future Code Changes - -| Change type | Required verification | -|---|---| -| Rust-only change | `cargo fmt --all`, `cargo check --workspace`, `cargo test --workspace` | -| Bridge DTO/API change | Rust verification plus bridge generation check, `flutter analyze`, and `flutter test --exclude-tags e2e` in `apps/chanora_flutter` | -| Android platform/audio/permission change | Rust/Flutter verification plus NDK target compilation, `adb devices -l`, Android build/install, and a device or emulator smoke test | -| Documentation-only change | Read affected docs and ensure cross-links/document index stay current; code tests are not required unless docs describe a code change just made | - -## 6. Android ADB Status for This Review - -`adb devices -l` now reports an authorized emulator target: - -```text -emulator-5554 device product:sdk_gphone64_arm64 model:sdk_gphone64_arm64 device:emu64a transport_id:1 -``` - -Android default debug build still fails because SDD-118 excludes `armeabi-v7a`; use a supported ABI target. ARM64 debug build/install/launch smoke evidence from 2026-06-08: - -```text -flutter build apk --debug --target-platform android-arm64 -✓ Built build/app/outputs/flutter-apk/app-debug.apk - -adb -s emulator-5554 install -r apps/chanora_flutter/build/app/outputs/flutter-apk/app-debug.apk -Success - -adb -s emulator-5554 shell am start -W -n app.chanora.chanora_flutter/.MainActivity -Status: ok -LaunchState: COLD -Activity: app.chanora.chanora_flutter/.MainActivity -TotalTime: 6514 - -adb -s emulator-5554 shell pidof app.chanora.chanora_flutter -7287 -``` - -`dumpsys window app.chanora.chanora_flutter` showed `MainActivity` visible with `isReadyForDisplay()=true`, and `dumpsys activity top` showed `app.chanora.chanora_flutter/.MainActivity` resumed with window focus. This is build/install/launch smoke evidence only; permission-flow success and audio-lifecycle success are not claimed by this review. - -## 7. Release and Documentation Alignment Notes - -- Android minimum runtime baseline is API 28 (Android 9.0) per SysRS-288, SRS-187, DEC-004, and the Gradle `minSdk = 28` configuration. Documents must not revive the older API 24 baseline. -- Flutter app version/build is `0.3.0+100` in `apps/chanora_flutter/pubspec.yaml`. Rust workspace package version remains `0.2.0-beta.1`. Release documents must distinguish these values instead of treating them as one candidate version. -- The v0.3.0 changelog entry may mention Windows/Linux desktop VAD-backed `VoiceActivity` only with matching runtime evidence; mobile, macOS, and unverified-platform `VoiceActivity` remain disabled/unavailable until DEC-030 is superseded and runtime verification exists. -- README wording must describe the existing Flutter/Rust workspace and app scaffold, not a future scaffold that has not been created. - -## 8. Git Policy - -No commit is created automatically. Commit only on explicit user demand, after reviewing `git status`, `git diff`, and recent log output. diff --git a/docs/governance/path-migration-map.md b/docs/governance/path-migration-map.md deleted file mode 100644 index 30cf68a..0000000 --- a/docs/governance/path-migration-map.md +++ /dev/null @@ -1,18 +0,0 @@ -# Chanora Path Migration Map - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Current Migration State - -| README path | Current canonical or baseline path | Migration state | -|---|---|---| -| `docs/requirements/sysrs.md` | `docs/sysrs.md` | Path record points to canonical root file | -| `docs/requirements/srs.md` | `docs/srs.md` | Path record points to canonical root file | -| `docs/architecture/sysdes.md` | `docs/sysdes.md` | Canonical root file remains in use | -| `docs/architecture/sad.md` | `docs/architecture/sad.md` | Baseline candidate present | -| `docs/architecture/sdd.md` | `docs/architecture/sdd.md` | Baseline candidate present | - -## 2. Migration Rule - -Move canonical files only when references in README, traceability, verification, and governance documents are updated together. diff --git a/docs/governance/product-decision-register.md b/docs/governance/product-decision-register.md deleted file mode 100644 index 57c7b2d..0000000 --- a/docs/governance/product-decision-register.md +++ /dev/null @@ -1,25 +0,0 @@ -# Chanora Product Decision Register - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Purpose - -This register records product and engineering decisions referenced by the DV document set. - -## 2. Decision Summary - -| Decision | State | DV impact | -|---|---|---| -| DEC-004 Android minimum runtime API 28 | Accepted by requirements baseline | Android release, verification, and README wording must use API 28 rather than the earlier API 24 recommendation | -| DEC-012 legal/trademark/OSS review | Open | Blocks public/store release | -| DEC-020 dual license MIT OR Apache-2.0 | Accepted per README | Supports license posture; dependency notices still require review | -| DEC-027 desktop mouse side-button PTT | Accepted by requirements baseline | Verification must not over-claim unsupported platform input classes | -| DEC-030 VAD platform scope | Partially superseded by desktop enablement | Windows/Linux desktop `VoiceActivity` is enabled through the audio capture VAD path and must be claimed only with matching runtime evidence; mobile, macOS, and unverified-platform `VoiceActivity` remain disabled/deferred until a later baseline enables and verifies them | -| DEC-032 Android CMake patch exit path | Active tracking | Patched dependency requires reevaluation | -| DEC-033 macOS VPIO ducking configuration | Accepted | Write `kAUVoiceIOProperty_OtherAudioDuckingConfiguration` with `mEnableAdvancedDucking=0` (disables dynamic voice-activity-driven ducking) and `mDuckingLevel=Min` (= 10) to minimise the ducking of other apps' audio during a voice session; property is macOS 14+ only, the macOS 13 set fails silently (debug log) and VPIO uses its default behaviour; matches the iOS `.voiceChat` baseline on macOS 14+ | -| DEC-034 Android runtime verification gate | Active tracking | Android target compilation, install, and runtime smoke are blocked locally until `aarch64-linux-android-clang` is available and `adb devices -l` shows an authorized target; release docs must not claim Android runtime success | - -## 3. DV Rule - -Open decisions that affect release claims must appear in the waiver register or release-readiness record. diff --git a/docs/governance/repo-format-validation-report.md b/docs/governance/repo-format-validation-report.md deleted file mode 100644 index 0537b9c..0000000 --- a/docs/governance/repo-format-validation-report.md +++ /dev/null @@ -1,22 +0,0 @@ -# Chanora Repository Format Validation Report - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Repository Layout Check - -| Area | Status | -|---|---| -| `docs/requirements/` | Path records present | -| `docs/architecture/` | SAD and SDD present | -| `docs/verification/` | Verification plan set present | -| `docs/release/` | Release readiness and policy records present | -| `docs/security/` | Security/privacy/legal guideline and audit records present | -| `docs/privacy/` | Privacy baseline present | -| `docs/legal/` | Trademark/attribution review present | -| `docs/governance/` | Governance records present | -| `docs/references/` | Reference records present | - -## 2. Validation Conclusion - -The repository format is sufficient for DV document navigation. Canonical SysRS/SysDes/SRS files still live at root `docs/` paths during migration. diff --git a/docs/governance/traceability-matrix.md b/docs/governance/traceability-matrix.md deleted file mode 100644 index 3e9e3a1..0000000 --- a/docs/governance/traceability-matrix.md +++ /dev/null @@ -1,73 +0,0 @@ -# Chanora Traceability Matrix - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Primary upstream documents:** `docs/sysrs.md`, `docs/sysdes.md`, `docs/srs.md`, `docs/architecture/sad.md`, `docs/architecture/sdd.md` - -## 1. Purpose - -This matrix gives DV reviewers a compact trace from system requirements to design allocation, software requirements, SWE.2/SWE.3 design baselines, and verification evidence. The detailed allocation records remain in `docs/sysdes.md`, `docs/srs.md`, `docs/architecture/sad.md`, and `docs/architecture/sdd.md`. - -## 2. Traceability Rule - -Chanora uses this document hierarchy: - -```text -SysRS -> SysDes -> SRS -> SAD -> SDD -> Verification -``` - -The current repository has SysRS, SysDes, SRS, SAD, and SDD baselines. The SAD and SDD are DV baseline candidates: they provide architecture and detailed-design coverage sufficient for review, while strict historical item numbering and deeper API-by-API detail remain follow-up hardening tasks. - -## 3. Baseline Coverage Summary - -| Layer | Coverage statement | Source | -|---|---|---| -| SysRS to SysDes | SysDes Appendix A provides allocation for every SysRS requirement | `docs/sysdes.md` Appendix A | -| SysDes to SRS | SRS reports 110 / 110 SysDes design items covered, with 95 / 110 software-impacting items represented | `docs/srs.md` section 9 | -| SRS to SAD | SAD section 3 allocates SRS groups to software architecture components | `docs/architecture/sad.md` | -| SAD to SDD | SDD section 11 maps SAD components to detailed design modules | `docs/architecture/sdd.md` | -| SDD to verification | Verification plans map SDD modules and SRS acceptance areas to SWE.4/SWE.5/SWE.6/SYS.4 evidence | `docs/verification/` | -| Release decision | Release readiness record maps evidence status to Go/No-Go decision | `docs/release/release-readiness-go-nogo-record.md` | -| Waivers | Waiver register maps known gaps to decision scope and unblock condition | `docs/release/dv-waiver-register.md` | - -## 4. Verification Handoff Trace - -| SysRS / SysDes source | SRS coverage | Verification plan | DV status | -|---|---|---|---| -| SysRS-233 traceability matrix | SRS-005, SRS-141 through SRS-143, SRS-180 through SRS-183 | Verification master plan and this matrix | Passed for DV baseline | -| SysRS-234 protocol compatibility | SRS-045 through SRS-053, SRS-131, SRS-134 | SWE.5, SWE.6, SYS.4 | Requires compatible-server evidence | -| SysRS-235 state synchronization verification | SRS-054 through SRS-061, SRS-124 | SWE.4, SWE.5, SWE.6 | Partial; reducer suite and event replay gaps recorded | -| SysRS-236 audio verification | SRS-062 through SRS-083, SRS-125, SRS-135 | SWE.4, SWE.5, SWE.6, SYS.4 | Partial; platform evidence required | -| SysRS-237 secure storage verification | SRS-090 through SRS-095, SRS-126, SRS-137 | SWE.4, SWE.5, SYS.4 | Partial; Android DEK waiver and platform audit required | -| SysRS-238 diagnostic redaction verification | SRS-093 through SRS-102, SRS-126 | SWE.4, SWE.5, SWE.6 | Evidence required before external tester enablement | -| SysRS-239 release packaging verification | SRS-116 through SRS-123, SRS-127, SRS-138 | SWE.5, SYS.4, release record | Partial; source-build/unsigned limitations recorded | -| SysRS-240 public wording audit | SRS-122, SRS-137 and legal review | SYS.4, legal/trademark review | Blocked by DEC-012 sign-off | -| SysDes-102 protocol verification handoff | SRS-004, SRS-015, SRS-045 through SRS-052, SRS-097, SRS-100, SRS-123, SRS-128, SRS-131, SRS-134 | SWE.5, SWE.6, SYS.4 | Requires attached candidate evidence | -| SysDes-103 state verification handoff | SRS-058 through SRS-061, SRS-097, SRS-098, SRS-124, SRS-128 | SWE.4, SWE.5 | Partial; waiver recorded | -| SysDes-104 audio verification handoff | SRS-062 through SRS-083, SRS-099, SRS-125, SRS-128, SRS-135 | SWE.4, SWE.5, SWE.6, SYS.4 | Partial; platform evidence required | -| SysDes-105 security verification handoff | SRS-090 through SRS-096, SRS-101, SRS-102, SRS-126, SRS-128, SRS-137 | SWE.4, SWE.5, SYS.4 | Partial; audits required | -| SysDes-106 deployment verification handoff | SRS-116 through SRS-123, SRS-127, SRS-128, SRS-138 | SWE.5, SYS.4, release record | Partial; release blockers recorded | -| SysDes-107 MVP acceptance verification | SRS-128 | SWE.6 | Matrix exists; candidate evidence still required | - -## 5. MVP Acceptance Trace - -| SysRS acceptance range | Requirement group | SRS anchor | Verification anchor | -|---|---|---|---| -| SysRS-241 through SysRS-244 | Connection, channel tree, online clients, channel join | SRS-019 through SRS-024, SRS-045 through SRS-051, SRS-128 | SWE.6 MVP acceptance matrix | -| SysRS-245 through SysRS-253 | Send/receive voice, mute/deaf, PTT, audio processing | SRS-062 through SRS-083, SRS-125, SRS-128, SRS-197 through SRS-200 | SWE.4/SWE.5 audio evidence and SWE.6 matrix | -| SysRS-254 | Channel text | SRS-019, SRS-036 through SRS-038, SRS-170 through SRS-174, SRS-128 | SWE.6 matrix | -| SysRS-255 | Bookmarks | SRS-084 through SRS-089, SRS-128 | SWE.4 storage tests and SWE.6 matrix | -| SysRS-256 | Secure storage | SRS-090 through SRS-095, SRS-126, SRS-137 | Security audit and SYS.4 platform matrix | -| SysRS-257 | Redacted diagnostics | SRS-028, SRS-093 through SRS-102, SRS-126, SRS-128 | SWE.6 diagnostics evidence and security review | - -## 6. Traceability Limitations for DV - -| Limitation | Impact | Control | -|---|---|---| -| SAD and SDD are baseline candidates rather than fully item-numbered historical documents | Some prior references such as `SAD-043` and `SDD-109` are not reconstructed as itemized records | Treat the new SAD/SDD as DV baselines; add strict item IDs later if the process owner requires ID-level audit | -| Candidate run IDs are not embedded in the documents | Evidence is not yet auditable to a specific build | Release-readiness record requires run IDs before release approval | -| Some implementation status items may have changed after the status report | Risk of stale blocker statements | Waiver register calls out items that need revalidation | - -## 7. DV Conclusion - -Traceability is sufficient for DV document review if reviewers accept the SAD/SDD baseline-candidate depth limitation and require candidate run evidence before release approval. diff --git a/docs/i18n/localization-architecture.md b/docs/i18n/localization-architecture.md deleted file mode 100644 index d4d70d1..0000000 --- a/docs/i18n/localization-architecture.md +++ /dev/null @@ -1,44 +0,0 @@ -# Chanora Localization Architecture - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Implementation Source - -Localization is enabled through Flutter generation in `apps/chanora_flutter/pubspec.yaml` and generated files under `apps/chanora_flutter/lib/l10n/generated/`. - -## 2. Architecture Rules - -| Rule | Requirement | -|---|---| -| Product strings | User-visible product-owned strings should be localizable | -| Server content | Server names, channel names, nicknames, and messages are displayed as content, not translated | -| Unicode | UTF-8/Unicode content must be preserved through protocol, bridge, state, UI, logs, and diagnostics unless intentionally redacted | -| Fallback | Missing localization keys must have deterministic fallback behavior | -| Diagnostics | Machine-readable diagnostic keys remain language-neutral | - -## 3. Current Locale Baseline - -English and Simplified Chinese generated localization files are present in the current Flutter app tree. - -## 4. Ownership and Coverage Criteria - -| Criterion | Required result | -|---|---| -| Product-owned strings | New user-visible product strings are added to localization resources or explicitly justified as non-product content | -| Server-owned content | Server names, channel names, nicknames, and chat messages pass through untranslated | -| Fallback behavior | Missing-key behavior is deterministic and covered by test or generated-localization behavior review | -| Unicode preservation | Multilingual content is preserved across protocol, bridge, state, UI, logs, and diagnostics except where redaction intentionally removes content | -| Diagnostic keys | Machine-readable diagnostic keys remain stable and language-neutral | - -## 5. Evidence Required Before Release - -| Evidence | Purpose | -|---|---| -| Localization generation check | Confirms generated bindings are current | -| UI smoke in supported locales | Confirms critical screens render in English and Simplified Chinese | -| Unicode content test or demo | Confirms server-provided multilingual content is preserved | - -## 6. DV Conclusion - -Localization architecture is documented and reviewable. Additional locale expansion remains outside current release scope. diff --git a/docs/legal/trademark-and-attribution-review.md b/docs/legal/trademark-and-attribution-review.md deleted file mode 100644 index c7bd928..0000000 --- a/docs/legal/trademark-and-attribution-review.md +++ /dev/null @@ -1,47 +0,0 @@ -# Chanora Trademark and Attribution Review - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Decision state:** DEC-012 remains open; public/store release blocked - -## 1. Purpose - -This document records the legal/trademark/attribution checks needed before Chanora can be publicly distributed. It supports DV review by making the open DEC-012 gate explicit. - -## 2. Non-Affiliation Position - -Chanora must present itself as an independent client application. It may describe compatibility with TeamSpeak 3-compatible servers where accurate, but it must not imply that Chanora is official, endorsed, sponsored, or affiliated with TeamSpeak or any trademark owner. - -## 3. Required Wording Controls - -| Surface | Required control | -|---|---| -| App About dialog | Include independent/non-affiliation wording and OSS license pointer | -| README and documentation | Use compatibility wording rather than official-product wording | -| Store metadata | Avoid official affiliation claims and review trademark usage | -| Release notes | Match actual supported capability and platform limitations | -| Website or marketing copy | Require legal review before publication | - -## 4. Attribution and OSS Controls - -| Topic | Required result before public/store release | -|---|---| -| Dependency license inventory | Rust and Flutter inventories generated and reviewed | -| NOTICE file | Required third-party attributions included | -| Dual-license statement | Chanora MIT OR Apache-2.0 licensing remains visible | -| Patched/forked dependencies | Forks and pinned revisions are documented with rationale | -| Trademark references | References are nominative, accurate, and reviewed | - -## 5. Current Review State - -| Item | State | Release impact | -|---|---|---| -| DEC-012 legal/trademark/OSS review | Open | Blocks public/store release | -| About dialog non-affiliation statement | Reported implemented in `docs/implementation-status-2026-05-28.md` | Needs final wording review | -| NOTICE pointer | Reported implemented in About dialog | Needs inventory/legal confirmation | -| Store metadata | Not approved in current record | Blocks store release | -| Public compatibility wording | Not approved in current record | Blocks public release | - -## 6. DV Conclusion - -Legal/trademark/attribution requirements are identified, but DEC-012 is not closed. DV may pass the document baseline only if public/store release remains No-Go. diff --git a/docs/material3-guideline.md b/docs/material3-guideline.md deleted file mode 100644 index 38b93db..0000000 --- a/docs/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/offline-knowledge/external/respeak-overview.md b/docs/offline-knowledge/external/respeak-overview.md deleted file mode 100644 index f09464e..0000000 --- a/docs/offline-knowledge/external/respeak-overview.md +++ /dev/null @@ -1,280 +0,0 @@ -# ReSpeak Project Knowledge Base - -> **Source**: https://github.com/ReSpeak/tsclientlib -> **Last synced**: 2026-06-13 -> **License**: MIT OR Apache-2.0 - -## Overview - -ReSpeak is an open-source project that provides a Rust implementation of the **TeamSpeak 3 protocol**. The primary goal is to enable building TeamSpeak clients and bots in Rust. The project is **not** an official TeamSpeak product — it was created for fun and to gain features/bugfixes not available in the official client. - -The organization maintains a single monorepo (`ReSpeak/tsclientlib`) containing multiple crates that layer from low-level protocol handling up to a high-level client library. - -**Key principle**: ReSpeak does **not** publish server-side code. They earn revenue by selling servers and ReSpeak respects that business model. - -## Repository Map - -| Crate | Path | Purpose | Version | -|-------|------|---------|---------| -| `tsclientlib` | `tsclientlib/` | High-level client/bot library | 0.2.0 | -| `tsproto` | `tsproto/` | Low-level TeamSpeak 3 protocol implementation | 0.2.0 | -| `ts-bookkeeping` | `utils/ts-bookkeeping/` | Server state tracking (clients, channels) | 0.1.x | -| `tsproto-packets` | `utils/tsproto-packets/` | Packet and command parsing/serialization | 0.1.x | -| `tsproto-types` | `utils/tsproto-types/` | Core types, enums, crypto primitives | 0.1.x | -| `tsproto-structs` | `utils/tsproto-structs/` | Generated structs from tsdeclarations | 0.1.x | - -**External dependency**: [tsdeclarations](https://github.com/ReSpeak/tsdeclarations) — machine-readable TeamSpeak protocol declarations (embedded as git submodule). - -## tsclientlib - -### Architecture - -`tsclientlib` is the **top-level crate** — the one consumers use. It provides: - -- `Connection` struct: manages a single connection to a TeamSpeak server -- Async API built on `tokio` + `futures` -- DNS SRV resolution for server discovery (`resolver.rs`) -- Audio handling via `audiopus` (Opus codec) behind the `audio` feature flag -- Sync wrapper (`sync.rs`) for non-async contexts -- Prelude module for convenient imports - -### Features - -| Feature | Default | Description | -|---------|---------|-------------| -| `audio` | yes | Opus encode/decode, `AudioHandler` for jitter buffer + mixing | -| `unstable` | no | Expose internal protocol API (may break on minor releases) | -| `default-tls` | yes | reqwest with default TLS for HTTP/HTTPS | -| `bundled` | no | Bundle SDL2 | -| `static-link` | no | Statically link SDL2 | -| `audiopus-unstable` | no | Extended audiopus API from Flakebi's fork | - -### Key Dependencies - -- `tsproto` — protocol layer -- `ts-bookkeeping` — state management -- `tsproto-packets` — packet parsing -- `tsproto-types` — types + crypto -- `tokio` — async runtime -- `hickory-proto` / `hickory-resolver` — DNS resolution -- `reqwest` — HTTP client -- `audiopus` — Opus codec (optional) - -### Source Files - -| File | Purpose | -|------|---------| -| `lib.rs` | Core types, re-exports, `Connection` entry point | -| `audio.rs` | Audio subsystem — Opus encode/decode, `AudioHandler` | -| `resolver.rs` | DNS SRV resolution for TeamSpeak servers | -| `sync.rs` | Synchronous wrapper API | -| `prelude.rs` | Convenience re-exports | -| `tests.rs` | Integration tests | - -### Examples - -- `simple.rs` — minimal async client -- `simple-sync.rs` — minimal sync client -- `audio.rs` — audio streaming client -- `audio-latency.rs` — latency measurement -- `channeltree.rs` — channel navigation -- `many.rs` / `sync.rs` — stress tests - -## tsproto - -### Architecture - -`tsproto` implements the **low-level TeamSpeak 3 protocol**: - -- Connection establishment and handshake -- UDP packet delivery with reliability (resend logic) -- Packet encryption and compression -- Command parsing - -### Source Files - -| File | Purpose | -|------|---------| -| `algorithms.rs` | Packet splitting, encryption/decryption, compression, hash cash | -| `client.rs` | Client-side connection logic | -| `connection.rs` | Connection state machine, packet queuing | -| `packet_codec.rs` | Packet encoding/decoding codec | -| `resend.rs` | Reliable packet delivery with retransmission | -| `license.rs` | License system implementation | -| `log.rs` | Logging utilities | -| `utils.rs` | Helper functions | - -### Protocol Details - -#### Packet Types - -| Type | Description | -|------|-------------| -| `Command` | High-priority commands | -| `CommandLow` | Low-priority commands | -| `Voice` | Voice data | -| `VoiceWhisper` | Whisper voice data | -| `Ack` / `AckLow` | Acknowledgments | -| `Ping` / `Pong` | Keepalive | -| `Init` | Connection initialization | - -#### Packet Limits - -- **Max UDP packet size**: 1500 bytes (ethernet MTU) -- **Max command packet size**: 500 bytes (including header) -- **Max fragments length**: 40960 bytes -- **Max decompressed size**: 2 MiB (for large servers with 2000+ channels) -- **Max out-of-order queue**: 200 packets - -#### Compression - -- Uses **QuickLZ** level 1 for command packets -- Compression only applied if result is smaller than original -- Fragmentation occurs when compressed data exceeds 500 bytes - -### Cryptography - -#### Key Types - -| Type | Curve | Usage | -|------|-------|-------| -| `EccKeyPubP256` | P-256 (secp256r1) | Public identity key | -| `EccKeyPrivP256` | P-256 | Private identity key | -| `EccKeyPubEd25519` | Ed25519 | Public ephemeral key (handshake) | -| `EccKeyPrivEd25519` | Ed25519 | Private ephemeral key (handshake) | - -#### Encryption Algorithm - -1. **Key derivation**: `SHA-256(packet_type || generation_id || shared_iv)` → 16-byte key + 16-byte nonce -2. **Cipher**: AES-128 in EAX mode with 8-byte MAC -3. **Key caching**: Derived keys are cached per generation to avoid recomputation -4. **Packet ID mixing**: `key[0] ^= (packet_id >> 8)`, `key[1] ^= (packet_id & 0xff)` - -#### Shared IV Computation (`compute_iv_mac`) - -1. ECDH shared secret via Ed25519 -2. `shared_iv = SHA-512(shared_secret)` -3. XOR with `alpha` (10 bytes) and `beta` (54 bytes) from handshake -4. `shared_mac = SHA-1(shared_iv)[..8]` - -#### Hash Cash (Identity Proof-of-Work) - -- Identity level = number of leading zero bits in `SHA-1(public_key_string || counter)` -- `upgrade_level(target)` iterates counter until desired level is reached -- Default target level: 8 - -#### Identity Format - -``` -Format: counter || 'V' || base64(private_key) -Example: "2792354VMG8DAgeAAgEgAiEA..." -``` - -#### Fake Encryption - -- Used for unencrypted packet types (voice, ack, ping, etc.) -- Fixed key: `c:\windows\syste` (16 bytes) -- Fixed nonce: `m\firewall32.cpl` (16 bytes) - -## ts-bookkeeping - -Tracks the **server state** by processing incoming commands: - -- Maintains client list, channel tree, server info -- Generates events from state changes -- Provides methods to create outgoing command packets -- Main struct: `data::Connection` - -## tsproto-packets - -Handles **packet serialization/deserialization**: - -- `packets.rs` — packet structures (`InPacket`, `OutPacket`, `OutAck`, etc.) -- `commands.rs` — TeamSpeak command parsing -- Header constants: `C2S_HEADER_LEN`, `S2C_HEADER_LEN` - -## tsproto-types - -Core **types and primitives**: - -- `crypto.rs` — ECC key types (P-256, Ed25519), ECDH, signatures, identity obfuscation -- `versions.rs` — TeamSpeak version strings -- `errors.rs` — Protocol error codes - -### Key Crypto Functions - -| Function | Description | -|----------|-------------| -| `EccKeyPrivP256::create()` | Generate new P-256 keypair | -| `EccKeyPrivP256::import_str()` | Import from base64/tomcrypt/obfuscated formats | -| `EccKeyPrivP256::create_shared_secret()` | ECDH with P-256 | -| `EccKeyPrivP256::sign()` | ECDSA signature | -| `EccKeyPubP256::verify()` | ECDSA verification | -| `EccKeyPubP256::get_uid()` | `base64(SHA-1(ts_encoded_key))` | -| `encode_password()` | `base64(SHA-1(password))` | -| `EccKeyPrivEd25519::create_shared_secret()` | ECDH with Ed25519 | - -### Identity Obfuscation - -TeamSpeak stores identities XOR'd with a static 128-byte pattern + SHA-1 hash of trailing data. ReSpeak implements both obfuscation and deobfuscation. - -## How Chanora Uses ReSpeak - -Chanora depends on **four crates** from the ReSpeak monorepo, all pinned to revision `04aa2491`: - -### Dependency Chain - -``` -chanora_protocol/ - ├── tsclientlib (rev 04aa2491, features=["audio"]) - ├── tsproto-packets (rev 04aa2491) - ├── tsproto-types (rev 04aa2491) - └── ts-bookkeeping (rev 04aa2491) - -chanora_audio/ - └── tsclientlib (rev 04aa2491, features=["audio"]) -``` - -### Architectural Constraint (SAD-067 / SysDes-011 / SysDes-029) - -Chanora's `chanora_protocol` crate acts as an **isolation boundary**: - -> No tsclientlib types may cross out of this crate. - -This prevents ReSpeak API changes from cascading through Chanora's codebase. - -### Patched Fork - -Chanora patches `tsproto-types` to fix **P-256 short coordinate padding**: - -```toml -[patch."https://github.com/ReSpeak/tsclientlib.git"] -tsproto-types = { git = "https://github.com/EdisonJwa/tsclientlib.git", branch = "fix/p256-short-coordinate-pad" } -``` - -This handles cases where P-256 coordinates are shorter than 32 bytes and need left-padding. - -### Key Usage Points - -1. **Protocol connection**: `tsclientlib::Connection` for TeamSpeak server connections -2. **Audio handling**: `AudioHandler` from tsclientlib for decode, jitter buffer, mixing -3. **Packet types**: `tsproto-packets` for `OutAudio`, `InAudioBuf`, `AudioData`, `CodecType`, `Direction` -4. **State tracking**: `ts-bookkeeping` for server state management - -## External References - -- **Qint** (https://github.com/ReSpeak/Qint) — Cross-platform TeamSpeak client built on tsclientlib (not yet ready) -- **SimpleBot** (https://github.com/ReSpeak/SimpleBot) — Example chat bot -- **tsdeclarations** (https://github.com/ReSpeak/tsdeclarations) — Machine-readable protocol declarations -- **TSIdentityTool** (https://github.com/landave/TSIdentityTool) — Identity deobfuscation reference (MIT) - -## Performance Benchmarks - -From i7-5280K @ 3.6 GHz (single-threaded): - -| Operation | Time | Throughput | -|-----------|------|------------| -| Connection creation | 199 ms | 6.5 conn/sec | -| Message send | 189 µs | 5300 msg/sec | - -Bottleneck: RSA puzzle solving at connection time. Use `--features rug` for efficient big integer implementation. diff --git a/docs/offline-knowledge/external/teaspeak-overview.md b/docs/offline-knowledge/external/teaspeak-overview.md deleted file mode 100644 index 804a04e..0000000 --- a/docs/offline-knowledge/external/teaspeak-overview.md +++ /dev/null @@ -1,392 +0,0 @@ -# TeaSpeak Project Knowledge Base - -## Overview - -TeaSpeak is an open-source, TeamSpeak-compatible voice communication platform hosted at `https://git.did.science/TeaSpeak`. It consists of two main repositories: - -- **TeaSpeak-Client** — An Electron-based desktop client (329 commits, created May 2020) -- **TeaSpeakLibrary** — A C++ shared library providing core protocol, channel, and database functionality (208 commits, created May 2020) - -The project is developed by WolverinDEV / TeaSpeak and targets users who need a self-hosted, TeamSpeak-compatible voice chat solution. - -## Architecture - -### Two-Repository Design - -``` -TeaSpeak/ -├── TeaSpeak-Client/ # Electron desktop application -│ ├── main.ts # Entry point (Electron main process) -│ ├── modules/ # TypeScript modules (core, renderer, shared, crash_handler) -│ ├── native/ # C++ native addons (Node.js N-API) -│ │ ├── serverconnection/ # Server connection & audio engine -│ │ ├── codec/ # Opus codec bindings -│ │ ├── crash_handler/ # Native crash handling -│ │ ├── dns/ # DNS resolution -│ │ ├── ppt/ # Protocol handling -│ │ └── updater/ # Auto-updater -│ ├── imports/ # Shared TypeScript definitions & vendor libs -│ └── resources/ # Static assets -│ -└── TeaSpeakLibrary/ # C++ static library - ├── CMakeLists.txt # CMake build system - ├── src/ - │ ├── protocol/ # TeamSpeak protocol implementation - │ ├── channel/ # Channel tree management - │ ├── query/ # Server query protocol - │ ├── sql/ # SQLite & MySQL database layer - │ ├── ssl/ # SSL/TLS support - │ ├── bbcode/ # BBCode parsing - │ └── misc/ # Utilities (crypto, networking, etc.) - └── test/ # Unit tests -``` - -### Client Architecture (Electron) - -The client uses a multi-process Electron architecture: - -- **Main Process** (`modules/core/main.ts`) — App lifecycle, window management, crash handling -- **Renderer Process** (`modules/renderer/`) — UI rendering, audio controls, connection management -- **Shared Module** (`modules/shared/`) — IPC definitions, version info, proxy utilities -- **Native Addons** (`native/`) — C++ bindings for performance-critical operations - -Key TypeScript path aliases: -- `tc-shared/*` → `imports/shared-app/*` -- `tc-native/connection` → `native/serverconnection/exports/exports.d.ts` - -## Features - -### Voice Communication -- Opus audio codec support (encoder/decoder) -- Audio input/output with gain control and level metering -- Audio mixing and interleaving -- Voice activity detection (VAD) via libfvad -- Audio filtering and processing pipeline -- Sound file playback capabilities - -### Server Protocol -- TeamSpeak protocol compatibility -- Custom protocol handler with crypto support (ProtocolHandlerCrypto) -- Packet acknowledgement and loss calculation -- Ring buffer for reliable packet delivery -- QuickLZ compression -- Hardware ID (HWID) generation for client identification - -### Channel System -- Tree-based channel hierarchy (TreeView) -- Channel properties and permissions -- BBCode formatting support - -### Data & Storage -- SQLite database support -- MySQL database support -- Client storage and profiles -- File transfer capabilities -- Connection logging - -### Client Features -- Auto-updater -- Crash handler with Sentry integration -- Window management and system tray -- Keyboard shortcuts -- Context menus -- i18n (internationalization) -- Music playback -- URL preview - -## Technology Stack - -### Client (TeaSpeak-Client) -| Component | Technology | -|-----------|-----------| -| Runtime | Electron 8.5.5 | -| Language | TypeScript 3.9, C++ | -| UI | HTML/CSS, jQuery, EJS templates | -| Styling | SASS | -| Native addons | cmake-js, Node.js N-API | -| Build | electron-packager | -| Error tracking | Sentry | - -### Library (TeaSpeakLibrary) -| Component | Technology | -|-----------|-----------| -| Language | C++20 | -| Build system | CMake 3.6+ | -| Crypto | TomCrypt, TomMath, OpenSSL, Ed25519 | -| Compression | QuickLZ | -| Database | SQLite3, MySQL Connector/C++ | -| Logging | spdlog | -| Events | libevent | -| Audio | Opus | -| JSON | jsoncpp | -| Serialization | Protocol Buffers | -| Memory | jemalloc | -| Crash reporting | Breakpad | -| Terminal | CXXTerminal (server mode) | -| Threading | Custom ThreadPool | -| String templating | StringVariable | -| Networking | DataPipes (includes libnice for ICE) | - -### External Dependencies (from libraries.txt) -- PortAudio — Cross-platform audio I/O -- libfvad — Voice activity detection -- SoXR — High-quality sample rate conversion - -## Protocol / API - -### TeamSpeak Protocol Implementation - -The protocol layer (`TeaSpeakLibrary/src/protocol/`) implements: - -- **Packet** — Core packet structure and serialization -- **CryptHandler** — Encryption/decryption for secure communication -- **CompressionHandler** — QuickLZ-based packet compression -- **AcknowledgeManager** — Reliable delivery with ACK tracking -- **PacketLossCalculator** — Network quality monitoring -- **RingBuffer** — Circular buffer for packet ordering -- **Generation** — Protocol version/generation handling - -### Server Connection (Client Side) - -The native server connection module (`native/serverconnection/`) handles: - -- **ServerConnection** — Main connection state machine -- **ProtocolHandler** — Full protocol implementation split across: - - `ProtocolHandlerCommands.cpp` — Command processing - - `ProtocolHandlerCrypto.cpp` — Crypto handshake - - `ProtocolHandlerPOW.cpp` — Proof of work (anti-spam) - - `ProtocolHandlerPackets.cpp` — Packet serialization -- **Socket** — TCP/UDP socket management -- **Audio subsystem** — Codec, drivers, filters, processing - -### Query Protocol - -Server query support (`src/query/`) with: -- Command parsing (v2 and v3 formats) -- Escape sequence handling - -## Build & Configuration - -### Building TeaSpeakLibrary - -```bash -# Prerequisites: CMake 3.6+, C++20 compiler, OpenSSL, MySQL, etc. -mkdir build && cd build -cmake .. -DTEASPEAK_SERVER=ON -make -j$(nproc) - -# Build tests (optional) -cmake .. -DBUILD_TESTS=ON -make -j$(nproc) -``` - -### Building TeaSpeak-Client - -```bash -# Install dependencies -npm install - -# Compile TypeScript -npm run compile-tsc - -# Compile SASS -npm run compile-sass - -# Generate JSON validators -npm run compile-json-validator - -# Build for Linux -npm run build-linux-64 -npm run package-linux-64 - -# Build for Windows -npm run build-windows-64 -npm run package-windows-64 - -# Development mode -npm run start-s # Connects to localhost:8080 -``` - -### Environment Variables - -- `teaclient_deploy_secret` — Deployment signing key (in `env.sh`) - -### Platform-Specific Dependencies - -- **Linux**: electron-installer-debian -- **Windows**: electron-installer-windows, electron-winstaller, electron-wix-msi, rcedit - -## Key Concepts - -### Protocol Concepts -- **HWID** (Hardware ID) — Unique machine identifier for client authentication -- **POW** (Proof of Work) — Anti-spam mechanism in connection handshake -- **Ring Buffer** — Circular buffer for managing packet ordering and retransmission -- **Acknowledge Manager** — Tracks packet delivery confirmation -- **Packet Loss Calculator** — Monitors network quality metrics - -### Audio Concepts -- **Opus Converter** — Handles Opus encoding/decoding -- **Audio Gain** — Volume amplification/attenuation -- **Audio Level Meter** — Real-time audio level monitoring -- **Audio Merger** — Combines multiple audio streams -- **Audio Interleaved** — Audio frame interleaving for transmission -- **Audio Event Loop** — Async audio processing pipeline -- **VAD** (Voice Activity Detection) — Detects speech vs silence - -### Channel Concepts -- **TreeView** — Hierarchical channel structure (parent/child relationships) -- **BBCode** — Text formatting markup (TeamSpeak standard) -- **Permission Manager** — Role-based access control - -### Connection Concepts -- **ServerConnection** — Full connection lifecycle management -- **Command Handler** — Processes server commands/responses -- **Handshake Handler** — Initial connection negotiation -- **Voice Connection** — Audio stream management -- **Video Connection** — Video stream support -- **Dummy Voice Connection** — Placeholder/mock for testing - -## Source Repository Structure - -### TeaSpeak-Client Root -``` -. -├── .gitignore -├── .gitmodules -├── bugs # Bug tracking -├── build_declarations.sh # Build script for type declarations -├── env.sh # Environment variables -├── generate-json-validators.sh # JSON schema validation generator -├── libraries.txt # External library references -├── main.ts # Electron entry point -├── package.json # Node.js dependencies & scripts -├── package-lock.json -├── restore.sh # Restore script -├── tsconfig.json # TypeScript configuration -├── tsconfig_render_api.json # Renderer API TypeScript config -├── imports/ # Shared TypeScript types & vendor code -│ ├── shared-app/ # Application-level shared types -│ │ ├── audio/ # Audio type definitions -│ │ ├── backend/ # Backend interfaces -│ │ ├── clientservice/ # Client service definitions -│ │ ├── connection/ # Connection type definitions -│ │ │ └── rtc/ # WebRTC-related types -│ │ ├── connectionlog/ # Connection logging -│ │ ├── conversations/ # Chat/conversation types -│ │ ├── crypto/ # Crypto interfaces -│ │ ├── entry-points/ # Module entry points -│ │ ├── events/ # Event definitions -│ │ ├── file/ # File handling types -│ │ ├── i18n/ # Internationalization -│ │ ├── ipc/ # IPC message definitions -│ │ ├── media/ # Media handling -│ │ ├── music/ # Music playback -│ │ ├── permission/ # Permission types -│ │ ├── profiles/ # User profiles -│ │ ├── text/ # Text processing -│ │ ├── tree/ # Tree data structures -│ │ ├── ui/ # UI component types -│ │ └── update/ # Update mechanism -│ ├── svg-sprites/ # SVG icon sprites -│ └── vendor/ # Third-party libraries -│ ├── TeaEventBus/ # Event bus implementation -│ └── TeaClientServices/ # Client services -├── installer/ # Build & packaging scripts -├── jenkins/ # CI/CD pipeline -├── modules/ # TypeScript source modules -│ ├── core/ # Main process -│ │ ├── app-updater/ # Auto-update logic -│ │ ├── main-window/ # Main window management -│ │ ├── render-backend/ # Renderer backend -│ │ ├── ui-loader/ # UI loading -│ │ ├── url-preview/ # URL preview -│ │ └── windows/ # Window definitions -│ ├── crash_handler/ # Crash handling -│ ├── renderer/ # Renderer process -│ │ ├── audio/ # Audio controls UI -│ │ ├── connection/ # Connection UI -│ │ ├── dns/ # DNS resolution -│ │ └── hooks/ # React-like hooks -│ ├── renderer-manifest/ # Renderer configuration -│ └── shared/ # Shared utilities -│ ├── ipc/ # IPC implementation -│ ├── process-arguments/ # CLI argument parsing -│ ├── proxy/ # Proxy utilities -│ └── version/ # Version management -├── native/ # C++ native addons -│ ├── cmake/ # CMake modules -│ ├── codec/ # Audio codec (Opus) -│ │ └── codec/ # Codec implementation -│ ├── crash_handler/ # Native crash handler -│ ├── dist/ # Distribution files -│ ├── dns/ # DNS resolver -│ ├── ppt/ # Protocol tools -│ ├── serverconnection/ # Server connection module -│ │ ├── exports/ # TypeScript declarations -│ │ ├── src/ -│ │ │ ├── audio/ # Audio engine -│ │ │ │ ├── codec/ # Opus encoder/decoder -│ │ │ │ ├── driver/ # Audio drivers -│ │ │ │ ├── file/ # Audio file I/O -│ │ │ │ ├── filter/ # Audio filters -│ │ │ │ ├── js/ # JS audio bindings -│ │ │ │ ├── processing/ # Audio processing -│ │ │ │ └── sounds/ # Sound effects -│ │ │ └── connection/ # Protocol implementation -│ │ │ ├── audio/ # Audio connection -│ │ │ └── ft/ # File transfer -│ │ └── test/ # Connection tests -│ └── updater/ # Auto-updater native code -├── resources/ # Static resources -└── scripts/ # Build/utility scripts -``` - -### TeaSpeakLibrary Root -``` -. -├── CMakeLists.txt # Build configuration -├── main.cpp # Test entry point -├── src/ -│ ├── bbcode/ # BBCode parser -│ ├── channel/ # Channel tree (TreeView) -│ ├── converters/ # Data converters -│ ├── lock/ # Read-write mutex -│ ├── log/ # Logging utilities -│ ├── misc/ # Utilities -│ │ ├── base64.* # Base64 encoding -│ │ ├── digest.* # Hash digests -│ │ ├── hex.* # Hex encoding -│ │ ├── memtracker.* # Memory tracking -│ │ ├── net.* # Network utilities -│ │ └── rnd.* # Random number generation -│ ├── protocol/ # TeamSpeak protocol -│ │ ├── AcknowledgeManager.* # ACK tracking -│ │ ├── CompressionHandler.* # QuickLZ compression -│ │ ├── CryptHandler.* # Encryption -│ │ ├── Packet.* # Packet structure -│ │ ├── PacketLossCalculator.* # Loss monitoring -│ │ ├── buffers.* # Buffer management -│ │ ├── generation.* # Protocol generation -│ │ └── ringbuffer.* # Circular buffer -│ ├── qlz/ # QuickLZ compression library -│ ├── query/ # Server query protocol -│ ├── sql/ # Database layer -│ │ ├── sqlite/ # SQLite implementation -│ │ └── mysql/ # MySQL implementation -│ ├── ssl/ # SSL/TLS management -│ ├── BasicChannel.* # Base channel class -│ ├── Definitions.h # Global definitions -│ ├── Error.* # Error handling -│ ├── EventLoop.* # Event loop -│ ├── License.* # License management -│ ├── PermissionManager.* # Permission system -│ ├── Properties.* # Property system -│ └── Variable.* # Variable system -└── test/ # Unit tests - ├── RingTest.cpp - ├── CommandTest.cpp - ├── ChannelTest.cpp - ├── PermissionTest.cpp - └── ... -``` diff --git a/docs/offline-knowledge/external/yatqa-de.md b/docs/offline-knowledge/external/yatqa-de.md deleted file mode 100644 index 92e93e5..0000000 --- a/docs/offline-knowledge/external/yatqa-de.md +++ /dev/null @@ -1,348 +0,0 @@ -# YaTQA Wissensdatenbank (Deutsch) - -> Quelle: https://yat.qa/ — Abgerufen: 13.06.2026 -> Version: v3.9.9b (01. Mrz 2023) - -## Überblick - -**YaTQA** (Yet Another TeamSpeak³ Query Admin Tool) ist eine Windows-Anwendung zur Verwaltung von **TeamSpeak-3-Servern und -Instanzen** über das ServerQuery-Interface. Es bietet eine grafische Oberfläche für alle Query-Befehle und macht das Erlernen der rohen Query-Syntax überflüssig. - -- **Autor:** Janni „Яedeemer" K. (Norddeutschland) -- **Sprache:** Geschrieben in Delphi 2009 (über 50.000 Zeilen Quelltext) -- **Entwicklungsbeginn:** 10. April 2011 -- **Erstveröffentlichung:** 29. Juni 2011 -- **Lizenz:** Kostenlos und voll funktionsfähig (keine Adware/Spyware) -- **Plattformen:** Windows XP und neuer, Linux mittels Wine -- **Größe:** ~1,3 MiB Installer -- **Enthaltene Sprachen:** Deutsch und Englisch (Auswahl während der Installation) -- **Unterstützte Server:** TeamSpeak 3.9.0 bis 3.13.7, TeaSpeak 1.4.10-beta -- **Download:** https://dl.yat.qa/stable/ -- **Website:** https://yat.qa/ - -### Motto -*„Dinosaurier haben kein TeamSpeak benutzt und sind vor 66 Millionen Jahren ausgestorben. Zufall? Vermutlich nicht."* - ---- - -## Funktionen - -**YaTQA unterstützt alle ServerQuery-Funktionen ohne Ausnahme.** Die folgende Liste beschränkt sich auf Funktionen, die der normale TS-Client nicht bietet. - -### Allgemeine Funktionen (Kein Admin erforderlich) - -- **DNS-Auflösung:** Detaillierte Visualisierung der DNS-Auflösung (simuliert 10 verschiedene Client-Versionen) -- **Blacklist-Prüfung:** TeamSpeaks Blacklist auf eine IP überprüfen -- **Blacklist2:** TeamSpeaks Blacklist2 für virtuelle Server prüfen -- **Benutzerdiagramm:** Serverstatistiken von Planet TeamSpeak als Diagramm anzeigen und als PNG speichern -- **Client-Cache:** Avatare, Icons und Chatlogs im Client-Cache finden - -### Konsole (Query-Interface) - -- **Autovervollständigung:** Befehlsvervollständigung einschließlich undokumentierter Befehle -- **Parameterhilfe:** Zeigt alle Parameter eines Befehls basierend auf eigener Forschung -- **Werteauswahl:** Strg+Leertaste für Werteliste -- **Ergebnisanalyse:** Gruppierte Datensätze mit Erklärungen -- **Skripting:** Befehlslisten aus Dateien laden und ausführen -- **Events:** Server-Events abonnieren und in der Konsole protokollieren - -### SSH-Tunnel - -- **Verschlüsselung:** Vollständig verschlüsselte Verbindung (außer Dateiübertragungen) -- **Geschwindigkeit:** Auf vielen Servern merkbar schneller (ähnlich wie `tcp_nodelay`) -- **Privatsphäre:** IP wird immer verborgen (man erscheint als 127.0.0.1) -- **Flood-Umgehung:** Umgeht alle Flood-Beschränkungen (127.0.0.1 steht üblicherweise auf der Whitelist) - -### Instanz-Funktionen (Erfordert serveradmin) - -- Instanzstatistiken anzeigen/bearbeiten -- Lizenzdetails und IP-Bindings anzeigen -- Alle virtuellen Server anzeigen -- Lokale Notizen zu Servern erstellen (lokal gespeichert) -- Virtuelle Server starten/stoppen/erstellen/löschen/umbenennen -- Unsichtbar werden (Server-Fehler, könnte behoben werden) -- Nachricht an alle Server senden -- Snapshots erstellen/massenweise erstellen/wiederherstellen (inkl. Dateien) -- Manipulierte Snapshots einspielen -- Server mittels Snapshots kopieren -- Rechte auf Vorlagengruppen zurücksetzen -- Channel-Datei-Backups speichern/wiederherstellen (inkrementelles Backup unterstützt) - -### Funktionen für virtuelle Server - -- Host-Message-Modal-Quit und hohe Sicherheitsstufe ignorieren -- Sehr detaillierte Serverstatistiken -- Mehrere Server gleichzeitig bearbeiten -- Ausklappbarer Serverbaum (optional immer im Vordergrund) -- Mehrere Nutzer gleichzeitig verschieben/kicken/bannen/beschreiben -- Mehrere Channel gleichzeitig erstellen -- Channel als Vorlage für weitere verwenden -- Mehrere Channel gleichzeitig bearbeiten -- Nachrichten an mehrere Nutzer/Channel gleichzeitig senden -- Rechte mehrerer Nutzer/Channel gleichzeitig bearbeiten -- Dateien zwischen Channeln verschieben -- Bildvorschau ohne Download (bmp, gif, jpg, png, pbm, pgm, ppm, xbm, xpm) -- Upload/Download ganzer Ordnerstrukturen -- Nutzer zu Gruppen hinzufügen durch Namenseingabe -- Funktionierende Rechteübersicht mit Echtzeitbearbeitung -- Rechte zwischen Servern/Instanzen kopieren -- Rechtewerte und -powers vergleichen -- Alle Clients/Gruppen mit einem bestimmten Recht finden -- Mehrere Gruppen gleichzeitig bearbeiten -- Verbesserte Clientdatenbank mit mehr Details und Suchfunktionen -- Gesamte Clientdatenbank mit einem Klick herunterladen -- Clientdatenbank als HTML oder CSV exportieren -- Gebannte Nutzer und IP-teilende Profile hervorheben -- Log an beliebiger Stelle lesen -- User CustomInfo verwalten (suchen, anzeigen, bearbeiten, hinzufügen) -- Log als HTML oder TXT exportieren -- Avatare und Icons herunterladen -- Avatar-Besitzer auf dem Server identifizieren -- Servervorlage verwalten -- Uploads/Downloads überwachen - -### Unterstützte Bildformate - -| Format | Beschreibung | -|--------|-------------| -| bmp | Windows Bitmap | -| gif | Graphics Interchange Format | -| jpg/jpeg | Joint Photographic Experts Group | -| png | Portable Network Graphics | -| pbm | Portable Bitmap (ASCII und binär) | -| pgm | Portable Graymap (ASCII und binär) | -| ppm | Portable Pixmap (ASCII und binär) | -| xbm | X BitMap | -| xpm | X PixMap | - ---- - -## Architektur / Funktionsweise - -### Verbindungsmethoden -- **Raw TCP/Telnet:** Standard-Query-Verbindung (Standardport 10011) -- **YaTQA-SSH-Tunnel:** Über Plink (PuTTY-Suite) — verschlüsselt, schneller, IP verborgen -- **TeamSpeak SSH:** Natives TS3.3+-SSH (auch unterstützt, aber weniger Vorteile) - -### Datenspeicherung -- **Portable Modus:** Alle Daten im Installationsverzeichnis (`yatqa.ini` vorhanden) -- **Standardmodus:** Einige Dateien in `%APPDATA%\YaTQA` -- **Icon-Cache:** 16-Bit-RES-Format (`icons.res`) -- **Befehlsverlauf:** `commandhistory.txt` -- **Debug-Log:** `RedeemerTS3.log` (erstellt mit `-debug`-Schalter) - -### DNS-Auflösung -YaTQA simuliert die Auflösungsschritte des TeamSpeak-Clients und zeigt sie visuell an. Verwendet Googles DNS-Server für Zuverlässigkeit. Unterstützt: -- A- und CNAME-Einträge -- SRV-Einträge -- TSDNS-Auflösung -- Alle 10 verschiedenen Client-Version-DNS-Verhaltensweisen - -### Snapshot-System -- Snapshots enthalten alle Servereinstellungen (außer Port und Server-ID) -- Snapshots enthalten KEINE Dateien, Icons oder Avatare -- Datei-Backups enthalten Dateien und Icons (keine Avatare wegen Serverbeschränkungen) -- Pseudo-Snapshots ermöglichen Serverkopien ohne Keypair -- Unterstützt Zstd-komprimierte Snapshots (3.10.0+-Format) - -### Anti-Flood-Schutz -- Konfigurierbare „Befehle bis Flood"-Einstellung (empfohlen: ~20) -- Konfigurierbare Verzögerung zwischen Befehlen (empfohlen: 340ms für fremde Server) -- SSH-Verbindungen umgehen Flood-Beschränkungen (127.0.0.1 auf Whitelist) - ---- - -## Konfiguration - -### Anwendungseinstellungen - -| Einstellung | Beschreibung | -|------------|-------------| -| Verbesserte XP-Unicode-Anzeige | Verwendet Arial Unicode MS für bessere CJK-Unterstützung | -| Daten bei Tabwechsel aktualisieren | Automatisch Daten aktualisieren | -| Lokale Zeit verwenden | Lokale Zeit statt UTC | -| Verbesserte Channel-Dropdowns | Baumansicht für Unterchannel | -| In den Tray minimieren | Minimieren in den Systemtray | -| Tray-Icon immer anzeigen | Permanent anzeigen | -| Icon-Caching aktivieren | Icons in `icons.res` cachen (empfohlen) | -| Keine Icons verwenden | Icon-Anzeige deaktivieren | -| Windows Aero verwenden | Aero-Design nutzen (Vista+) | -| Aero-Glow deaktivieren | Weißen Schatten hinter Menütext entfernen | -| Beim Start nach Updates suchen | Automatisch nach Updates suchen | -| Sortiereinstellungen speichern | Sortierpräferenzen merken | -| Sprunglisten aktivieren | Windows 7+-Sprunglisten-Integration | - -### Kompatibilitätseinstellungen - -| Einstellung | Beschreibung | -|------------|-------------| -| Befehle bis Flood | Verzögerung zwischen Befehlen (340 empfohlen für fremde Server) | -| Nicht-Standard-Query-Port erlauben | Verbindung zu anderen Ports als 10011 | -| Löschen wichtiger Gruppen erlauben | Löschen der ersten 5 Server-/4 Channelgruppen erlauben | -| Verlassen wichtiger Gruppen erlauben | serveradmin darf Admin Server Query verlassen | -| Machine-ID ändern erlauben | Änderung der Machine-ID ermöglichen | - -### SSH-Tunnel-Profile -SSH-Profile für Server konfigurieren. Bei Verbindung zu einem Server mit passendem SSH-Profil verwendet YaTQA automatisch den Tunnel. - -### Kreisdiagramm-Styles -Auswahl aus 4 verschiedenen Kreisdiagramm-Styles (durch Benutzerabstimmung ausgewählt). - ---- - -## Startparameter - -| Parameter | Beschreibung | -|-----------|-------------| -| `-a` | Verbindung zum Standardserver | -| `-b [IP]` | Blacklist-Prüfung | -| `-c IP Query_Port [User Pass [Voice_Port]]` | Verbindung zum angegebenen Server | -| `-d` | DNS-Auflösung | -| `-i` | Iconsammlung | -| `-p` | Rechtedateien-Editor | -| `-s [IP]` | Benutzerstatistik | -| `-debug` | Debug-Logging aktivieren | - ---- - -## Systemanforderungen - -### Mindestanforderungen -- **Betriebssystem:** Windows XP+ (Desktop), Windows 2012+ (Server) -- **Speicher:** 3 MB für YaTQA (mehr für Konfiguration/Snapshots) -- **Auflösung:** 960×720 (allgemein), 1024×720 (Serverbaum), 1024×768 (Konsole) - -### Fehlende Funktionen unter Windows XP -- Geist-Modus -- Nameserver für DNS-Auflösung ändern -- Einklappbare DNS-Ergebnisse -- Einklappbare Gruppen im Servergruppenmodus der Benutzer-DB - -### Fehlende Funktionen unter Windows Vista/XP -- Sprunglisten - -### Wine/Linux-Einschränkungen -- Speicherlecks (Wine unterstützt kein Entfernen von Link-Labels) -- Auch unter XP fehlende Funktionen fehlen unter Wine -- Zusätzliche Einschränkungen: Keine Array-Gruppierung, keine DNS-Gruppierung, kein Servergruppenmodus in der Benutzer-DB -- Plink muss manuell installiert werden (Version 0.61+) - ---- - -## Schlüsselkonzepte - -### ServerQuery-Interface -Das TeamSpeak-3-ServerQuery-Interface ist ein textbasiertes Protokoll zur Serververwaltung. YaTQA kapselt diese Schnittstelle in einer GUI mit: -- Befehlsautovervollständigung -- Parameterhilfe -- Werteauswahl -- Ergebnisanalyse - -### Virtueller Server -Ein virtueller Server ist eine unabhängige TeamSpeak-Serverinstanz, die auf einem einzelnen physischen Serverprozess läuft. Mehrere virtuelle Server können auf einer Instanz laufen. - -### Instanz -Der Serverprozess, der einen oder mehrere virtuelle Server hostet. Verwaltet über den „serveradmin"-Account. - -### Snapshot -Ein vollständiges Backup der Einstellungen eines virtuellen Servers (ohne Port und ID). Enthält keine Dateien, Icons oder Avatare. - -### Pseudo-Snapshot -Ein vom Benutzer manipulierter Snapshot, der zum Kopieren von Servern ohne Beibehaltung des originalen Keypairs verwendet werden kann. - -### Rechtesystem -TeamSpeak verwendet ein hierarchisches Rechtesystem mit: -- Servergruppen -- Channelgruppen -- Client-Rechte -- Rechte-Powers (Werte, die steuern, was gesetzt werden kann) - -### Anti-Flood -TeamSpeak-Server begrenzen die Häufigkeit von Query-Befehlen. YaTQA bietet konfigurierbare Verzögerungen und „Befehle bis Flood"-Einstellungen, um Bans zu vermeiden. - -### Blacklist / Blacklist2 -TeamSpeak führt Blacklists gebannter IPs (Blacklist1) und Server-UIDs (Blacklist2). - -### Abzeichen -Visuelle Indikatoren im TeamSpeak, die Benutzerstatus, Addon-Creator-Status usw. anzeigen. YaTQA kann Abzeichen konfigurieren. - -### DNS-Auflösung -TeamSpeak-Clients lösen Serveradressen über mehrere Methoden auf: A-Einträge, CNAME, SRV-Einträge und TSDNS. YaTQA visualisiert diesen Prozess. - ---- - -## Bekannte Einschränkungen - -- **Channel-Passwörter:** YaTQA sendet grundsätzlich keine Channel-Passwörter. Erfordert `b_channel_join_ignore_password` und `b_ft_ignore_password`-Rechte. -- **Unicode:** Nur Basic Multilingual Plane (BMP) unterstützt (TeamSpeak-Einschränkung). -- **Integrierte DNS-Auflösung:** Nur A- und CNAME-Einträge (TSDNS und SRV im integrierten Resolver nicht unterstützt). -- **Geist-Modus:** Viele Funktionen funktionieren nicht; Geist hat nur Query-Gast-Rechte. -- **Konsole:** Nur die üblichen Einschränkungen des TS3-Servers. - ---- - -## IPv6-Unterstützung - -Eckige Klammern `[]` um die Serveradresse schreiben. Unterstützt seit v1.4/2.0-pre für Query-Verbindungen. IPv4-Tunnel (z.B. `[::ffff:7f00:1]`) werden nicht unterstützt. - ---- - -## Projekthistorie - -- **10.04.2011:** Entwicklungsbeginn (ursprünglich „TS3Telnet" genannt) -- **29.06.2011:** Erste Alpha-Version veröffentlicht -- **18.04.2014:** v2.0 führte Registrierungserfordernis für einige Funktionen ein -- **22.08.2019:** YaTQA wieder uneingeschränkt Freeware -- **01.03.2023:** v3.9.9b veröffentlicht (Zeitlimit dauerhaft entfernt) - -### Namensherkunft -„Yet Another TeamSpeak³ Query App" — benannt, weil es beim Entwicklungsbeginn bereits viele Query-Tools gab, aber keines auf dem Rechner des Autors funktionierte. - -### Aussprache -[jatka] in IPA-Lautschrift — auch als deutsches Wort aussprechbar. - ---- - -## Globale Tastenkürzel - -| Kürzel | Aktion | -|--------|--------| -| Strg+F | Filtern (Rechte, Log) oder Suchen | -| Strg+Alt+F | In Listen suchen | -| F3 | Weiter suchen | -| Strg+A | Alles auswählen | -| Strg+C | Kopieren oder ausgewählte Daten speichern | -| Strg+Alt+A | Spalten automatisch anpassen | -| F2 | Umbenennen | -| F5 | Tab aktualisieren | -| NUM + | Ausgewählte Checkbox-Elemente aktivieren | -| NUM - | Ausgewählte Checkbox-Elemente deaktivieren | -| Strg+Leertaste | Parameterwert auswählen (Konsole) | -| Strg+E | Ausgewählten Text escapen (Konsole) | -| Strg+S | Diagramm als Bild speichern | - ---- - -## Ressourcen - -- **Website:** https://yat.qa/ -- **Download:** https://dl.yat.qa/stable/ -- **Funktionen:** https://yat.qa/funktionen/ -- **Anleitung:** https://yat.qa/manual/ (nur Englisch) -- **Changelog:** https://yat.qa/changelog/ (nur Englisch) -- **FAQ:** https://yat.qa/haeufige-fragen/ -- **Support:** https://yat.qa/unterstuetzung/ -- **Ressourcen:** https://yat.qa/ressourcen/ -- **Über:** https://yat.qa/ueber/ - ---- - -## Übersetzung - -YaTQAs Originalsprache ist Deutsch. Die Übersetzung erfolgt mit OmegaT und XLIFF-Dateien. Den Autor vorher kontaktieren. Das Übersetzungssystem verwendet: -- `%s` — Zeichenketten-Platzhalter -- `%d` — Dezimalzahl-Platzhalter -- `&` — Tastenkürzel -- `&&` — Tatsächliches Kaufmanns-Und -- `|` — Senkrechter Strich (Hinweistext-Trennzeichen) -- `\r\n` — Neue Zeile -- `\t` — Tabulator diff --git a/docs/offline-knowledge/external/yatqa-en.md b/docs/offline-knowledge/external/yatqa-en.md deleted file mode 100644 index 337499f..0000000 --- a/docs/offline-knowledge/external/yatqa-en.md +++ /dev/null @@ -1,348 +0,0 @@ -# YaTQA Knowledge Base (English) - -> Source: https://yat.qa/ — Last fetched: 2026-06-13 -> Version: v3.9.9b (01 Mar 2023) - -## Overview - -**YaTQA** (Yet Another TeamSpeak³ Query Admin Tool) is a Windows application for managing **TeamSpeak 3 servers and instances** using the ServerQuery interface. It provides a graphical interface to all query commands, eliminating the need to learn raw query syntax. - -- **Author:** Janni "Яedeemer" K. (northern Germany) -- **Language:** Written in Delphi 2009 (50,000+ lines of code) -- **Development started:** April 10, 2011 -- **First release:** June 29, 2011 -- **License:** Free and fully functional freeware (no adware/spyware) -- **Platforms:** Windows XP and up, Linux via Wine -- **Size:** ~1.3 MiB installer -- **Languages included:** English and German (selectable during installation) -- **Supported servers:** TeamSpeak 3.9.0 through 3.13.7, TeaSpeak 1.4.10-beta -- **Download:** https://dl.yat.qa/stable/ -- **Website:** https://yat.qa/ - -### Key Tagline -*"Dinosaurs weren't using TeamSpeak and wiped about 66 million years ago. Coincidence? I think not."* - ---- - -## Features - -**YaTQA supports ALL ServerQuery features with no exceptions.** The feature list below focuses on capabilities beyond what the standard TS3 client offers. - -### General Features (No Admin Required) - -- **DNS Resolver:** Detailed DNS lookup visualization simulating TeamSpeak client behavior (10 different client version lookups) -- **Blacklist Check:** Check TeamSpeak's blacklist for any IP -- **Blacklist2:** Check TeamSpeak's blacklist2 for virtual servers from an instance's server list -- **User Graph:** View server statistics from Planet TeamSpeak as a chart, save as PNG image -- **Client Cache:** Find avatars, icons, and chat logs in your client cache - -### Console (Query Interface) - -- **Autocomplete:** Command completion including undocumented commands -- **Parameter Help:** Displays every command's parameters based on extensive research -- **Parameter Value Selection:** Press Ctrl+Space to select values from a list -- **Result Analysis:** Groups datasets and explains most values -- **Scripting:** Load and execute command lists from files -- **Events:** Subscribe to server events and log them in the console - -### SSH Tunnel - -- **Encryption:** Fully encrypted connection (except file transfers) -- **Speed:** Notably faster on most servers (similar to `tcp_nodelay`) -- **Privacy:** Always hides your IP (you appear as 127.0.0.1) -- **Flood Bypass:** Circumvents all flood restrictions (127.0.0.1 is usually whitelisted) - -### Instance Features (Requires serveradmin) - -- View/edit instance settings and stats -- View license details and IP bindings -- See all virtual servers -- Add local notes to servers (stored locally) -- Start/stop/create/delete/rename virtual servers -- Become invisible (server bug, may be fixed) -- Send message to all servers -- Create/mass-create/deploy snapshots (including file-inclusive snapshots) -- Deploy manipulated snapshots -- Copy servers using snapshots -- Reset permissions to template groups -- Save/restore channel file backups (incremental backup supported) - -### Virtual Server Features - -- Ignore host message modal quit and high security level -- Very detailed virtual server statistics -- Edit multiple servers at once -- Collapsible server tree (optionally topmost) -- Move/kick/ban/describe multiple users at once -- Create multiple channels at once -- Use channel as template for other channels -- Edit multiple channels at once -- Send messages to multiple users/channels at once -- Edit permissions of multiple users/channels at once -- Move files between channels -- Image preview without download (bmp, gif, jpg, png, pbm, pgm, ppm, xbm, xpm) -- Upload/download entire folder structures -- Add users to groups by entering names -- Working permission overview with realtime editing -- Copy permissions between servers/instances -- Compare permission values and powers -- Find all clients/groups with a certain permission -- Edit multiple groups at once -- Enhanced client database with more details and search features -- Download full client database with one click -- Export client database to HTML or CSV -- Highlight banned users and IP-sharing profiles -- Browse log from any position -- Manage user custominfo (search, view, edit, add) -- Export log to HTML or TXT -- Download icons and avatars -- Identify avatar owners on your server -- Manage server template -- Monitor uploads/downloads - -### Supported Image Formats - -| Format | Description | -|--------|-------------| -| bmp | Windows Bitmap | -| gif | Graphics Interchange Format | -| jpg/jpeg | Joint Photographic Experts Group | -| png | Portable Network Graphics | -| pbm | Portable Bitmap (ASCII and binary) | -| pgm | Portable Graymap (ASCII and binary) | -| ppm | Portable Pixmap (ASCII and binary) | -| xbm | X BitMap | -| xpm | X PixMap | - ---- - -## Architecture / How It Works - -### Connection Methods -- **Raw TCP/Telnet:** Standard query connection (default port 10011) -- **YaTQA SSH Tunnel:** Via Plink (PuTTY suite) — encrypted, faster, hides IP -- **TeamSpeak SSH:** Native TS3.3+ SSH support (also supported but fewer advantages) - -### Data Storage -- **Portable Mode:** All data in installation directory (`yatqa.ini` present) -- **Standard Mode:** Some files stored in `%APPDATA%\YaTQA` -- **Icon Cache:** 16-bit RES format (`icons.res`) -- **Command History:** `commandhistory.txt` -- **Debug Log:** `RedeemerTS3.log` (created with `-debug` switch) - -### DNS Resolution -YaTQA simulates lookup steps done by TeamSpeak and displays them visually. Uses Google's DNS servers for reliability. Supports: -- A and CNAME records -- SRV records -- TSDNS lookups -- All 10 different client version DNS behaviors - -### Snapshot System -- Snapshots contain all server settings (except port and virtual server ID) -- Snapshots do NOT include files, icons, or avatars -- File backups include files and icons (not avatars due to server limitations) -- Pseudo snapshots allow server copying without keypair -- Supports Zstd-compressed snapshots (3.10.0+ format) - -### Anti-Flood Protection -- Configurable "Commands to Flood" setting (recommended: ~20) -- Configurable delay between commands (recommended: 340ms for non-own servers) -- SSH connections bypass flood restrictions (127.0.0.1 whitelisted) - ---- - -## Configuration - -### Application Settings - -| Setting | Description | -|---------|-------------| -| Improved XP Unicode display | Uses Arial Unicode MS for better CJK support | -| Refresh on tab change | Auto-refresh data when switching tabs | -| Use local time | Local time instead of UTC | -| Improved channel dropdowns | Tree view lines for sub-channels | -| Minimize to tray | Minimize to system tray | -| Always show tray icon | Persistent tray icon | -| Enable icon caching | Cache icons in `icons.res` (recommended) | -| Don't use icons globally | Disable icon display | -| Try Windows Aero | Use Aero theme (Vista+) | -| Disable Aero glow | Remove white shadow behind menu text | -| Search for updates on start | Auto-check for updates | -| Save sort settings | Remember sort preferences | -| Enable jump lists | Windows 7+ jump list integration | - -### Compatibility Settings - -| Setting | Description | -|---------|-------------| -| Commands to flood | Delay between commands (340 recommended for remote servers) | -| Allow non-default query port | Connect to ports other than 10011 | -| Allow deleting important groups | Enable deletion of first 5 server/4 channel groups | -| Allow leaving important groups | Allow serveradmin to leave Admin Server Query | -| Allow changing machine ID | Enable machine ID modification | - -### SSH Tunnel Profiles -Configure SSH profiles for servers. When connecting to a server with a matching SSH profile, YaTQA automatically uses the tunnel. - -### Pie Chart Styles -Choose from 4 different pie chart styles (selected by user voting). - ---- - -## Startup Parameters - -| Parameter | Description | -|-----------|-------------| -| `-a` | Connect to default server | -| `-b [IP]` | Blacklist check | -| `-c IP Query_Port [User Pass [Voice_Port]]` | Connect to specified server | -| `-d` | DNS lookup | -| `-i` | Icon collection | -| `-p` | Permission editor | -| `-s [IP]` | User statistics | -| `-debug` | Enable debug logging | - ---- - -## System Requirements - -### Minimum Requirements -- **OS:** Windows XP+ (desktop), Windows 2012+ (server) -- **Disk:** 3 MB for YaTQA (more for configuration/snapshots) -- **Resolution:** 960×720 (general), 1024×720 (server tree), 1024×768 (console) - -### Features Missing on Windows XP -- Ghost Mode -- Nameserver for DNS lookups -- DNS lookup group folding -- Folding server groups in user DB server group mode - -### Features Missing on Windows Vista/XP -- Jump lists - -### Wine/Linux Limitations -- Memory leaks (Wine doesn't support removing link labels) -- Features missing on XP also missing on Wine -- Additional limitations: no array property grouping, no DNS grouping, no server group mode in user DB -- Plink must be installed manually (version 0.61+) - ---- - -## Key Concepts - -### ServerQuery Interface -The TeamSpeak 3 ServerQuery interface is a text-based protocol for managing TeamSpeak servers. YaTQA wraps this interface in a GUI, providing: -- Command autocompletion -- Parameter help -- Value selection -- Result analysis - -### Virtual Server -A virtual server is an independent TeamSpeak server instance running on a single physical server process. Multiple virtual servers can run on one instance. - -### Instance -The server process that hosts one or more virtual servers. Managed via the "serveradmin" account. - -### Snapshot -A complete backup of a virtual server's settings (excluding port and ID). Does not include files, icons, or avatars. - -### Pseudo Snapshot -A user-manipulated snapshot that can be used to copy servers without preserving the original keypair. - -### Permissions System -TeamSpeak uses a hierarchical permission system with: -- Server groups -- Channel groups -- Client permissions -- Permission powers (values that control what can be set) - -### Anti-Flood -TeamSpeak servers limit query command frequency. YaTQA provides configurable delays and "Commands to Flood" settings to avoid bans. - -### Blacklist / Blacklist2 -TeamSpeak maintains blacklists of banned IPs (Blacklist1) and server UIDs (Blacklist2). - -### Badges -Visual indicators in TeamSpeak showing user status, addon creator status, etc. YaTQA can configure badges. - -### DNS Resolution -TeamSpeak clients resolve server addresses through multiple methods: A records, CNAME, SRV records, and TSDNS. YaTQA visualizes this process. - ---- - -## Known Limitations - -- **Channel passwords:** YaTQA never sends channel passwords. Requires `b_channel_join_ignore_password` and `b_ft_ignore_password` permissions. -- **Unicode:** Only Basic Multilingual Plane (BMP) supported (TeamSpeak limitation). -- **Integrated DNS lookups:** Only A and CNAME records (TSDNS and SRV unsupported in built-in resolver). -- **Ghost mode:** Many features don't work; ghost has Query Guest permissions. -- **Console:** Only limitations from TS3 server apply. - ---- - -## IPv6 Support - -Use square brackets `[]` around the server address. Supported since v1.4/2.0-pre for query connections. IPv4 tunnels (e.g., `[::ffff:7f00:1]`) are not supported. - ---- - -## Project History - -- **2011-04-10:** Development started (originally named "TS3Telnet") -- **2011-06-29:** First alpha version released -- **2014-04-18:** v2.0 introduced registration requirement for some features -- **2019-08-22:** YaTQA became unlimited freeware again -- **2023-03-01:** v3.9.9b released (removed time limit permanently) - -### Naming -"Yet Another TeamSpeak³ Query App" — named because there were already many query tools when development started, but none worked for the author. - -### Pronunciation -[jatka] in IPA notation — also suitable for German speakers. - ---- - -## Global Hotkeys - -| Shortcut | Action | -|----------|--------| -| Ctrl+F | Filter (permissions, log) or find | -| Ctrl+Alt+F | Find in lists | -| F3 | Find next | -| Ctrl+A | Select all | -| Ctrl+C | Copy or save selected data | -| Ctrl+Alt+A | Auto-adjust columns | -| F2 | Rename | -| F5 | Refresh tab | -| NUM + | Check selected checkbox items | -| NUM - | Uncheck selected checkbox items | -| Ctrl+Space | Select parameter value (console) | -| Ctrl+E | Escape selected text (console) | -| Ctrl+S | Save chart as image | - ---- - -## Resources - -- **Website:** https://yat.qa/ -- **Download:** https://dl.yat.qa/stable/ -- **Features:** https://yat.qa/features/ -- **Manual:** https://yat.qa/manual/ -- **Changelog:** https://yat.qa/changelog/ -- **FAQ:** https://yat.qa/faq/ -- **Support:** https://yat.qa/support/ -- **Resources:** https://yat.qa/resources/ -- **About:** https://yat.qa/about/ - ---- - -## Translation - -YaTQA's original language is German. Translation is done using OmegaT with XLIFF files. Contact the author before translating. The translation system uses: -- `%s` — String placeholder -- `%d` — Decimal number placeholder -- `&` — Shortcut key -- `&&` — Actual ampersand -- `|` — Vertical line (hint text separator) -- `\r\n` — New line -- `\t` — Tab diff --git a/docs/privacy/privacy-policy.md b/docs/privacy/privacy-policy.md deleted file mode 100644 index d84a49a..0000000 --- a/docs/privacy/privacy-policy.md +++ /dev/null @@ -1,51 +0,0 @@ -# Chanora Privacy Policy Baseline - -**Document status:** Engineering baseline candidate for DV review -**Date:** 2026-05-29 -**Release status:** Requires product/legal approval before public or store release - -## 1. Summary - -Chanora is a client application for connecting to TeamSpeak 3-compatible servers selected by the user. Chanora does not operate the external servers users connect to and does not control server-side data handling. - -## 2. Data Stored Locally - -Chanora may store the following data on the user's device: - -| Data | Purpose | Storage expectation | -|---|---|---| -| Server bookmarks | Reconnect to user-selected servers | Local database or app storage | -| Recent connection details | Improve reconnection and user workflow where implemented | Local app storage | -| Identity references and sensitive credentials | Authenticate to compatible servers | Platform secure storage or documented fallback | -| Audio and UI settings | Preserve user preferences | Local app storage | -| Diagnostic logs | Troubleshooting when the user chooses to export diagnostics | Local diagnostic storage/export bundle | - -## 3. Permissions - -Chanora may request platform permissions needed for voice communication and app operation: - -| Permission or platform capability | Purpose | -|---|---| -| Microphone | Capture user voice for channel communication | -| Audio session / audio routing | Manage playback, capture, route changes, and voice processing | -| Notifications or foreground service where applicable | Maintain expected voice-session behavior on mobile platforms | -| Keyboard/input monitoring where applicable | Support push-to-talk on desktop platforms when allowed by the OS | -| Network access | Connect to user-selected compatible servers | - -## 4. Diagnostics - -Diagnostic export is user-initiated for MVP. Chanora must not automatically upload diagnostics, telemetry, or crash reports unless a later approved requirement and privacy update authorize that behavior. - -Diagnostic bundles may include logs, platform information, app version, connection state, and error details. They must redact secrets before export. Users choose whether to share exported diagnostics with support or developers. - -## 5. External Servers - -When a user connects to a TeamSpeak 3-compatible server, communication occurs with that external server. Server operators may process connection, voice, text, identity, permission, and logging information according to their own policies. Chanora does not control those external policies. - -## 6. No Automatic Cloud Sync - -The MVP does not include automatic cloud sync of bookmarks, identities, settings, or diagnostics. - -## 7. Release Approval Requirement - -This privacy baseline is sufficient for DV discussion. It must be reviewed and approved by the product/legal owner before public or store release. 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 dbae734..0000000 --- a/docs/references/aspice-swe2-swe3-integration-note.md +++ /dev/null @@ -1,28 +0,0 @@ -# ASPICE SWE.2/SWE.3 Integration Note - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Purpose - -This note explains how Chanora's SWE.2 and SWE.3 documents support downstream verification. - -## 2. Lifecycle Chain - -```text -SysRS -> SysDes -> SRS -> SAD/SWE.2 -> SDD/SWE.3 -> SWE.4/SWE.5/SWE.6/SYS.4 verification -``` - -## 3. Integration Points - -| Process | Chanora document | Verification handoff | -|---|---|---| -| SWE.2 | `docs/architecture/sad.md` | Defines components, interfaces, runtime flows, dependency rules | -| SWE.3 | `docs/architecture/sdd.md` | Defines modules, detailed behavior, data/state design, verification hooks | -| SWE.4 | `docs/verification/swe4-unit-verification-plan.md` | Consumes SDD module hooks | -| SWE.5 | `docs/verification/swe5-software-integration-verification-plan.md` | Consumes SAD interfaces and SDD integration hooks | -| SWE.6 | `docs/verification/swe6-software-verification-plan.md` | Verifies integrated software against SRS | - -## 4. DV Conclusion - -The SWE.2/SWE.3 integration route is documented for DV. Further itemized IDs can be added if required by a stricter process audit. diff --git a/docs/references/external-references.md b/docs/references/external-references.md deleted file mode 100644 index 54c313c..0000000 --- a/docs/references/external-references.md +++ /dev/null @@ -1,21 +0,0 @@ -# Chanora External References - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Reference List - -| Reference | Use | -|---|---| -| Flutter documentation | Cross-platform UI, build, localization, platform integration | -| Flutter Rust Bridge documentation | Typed Flutter/Rust bridge generation | -| Rust Cargo documentation | Workspace builds, tests, dependency locking | -| TeamSpeak 3-compatible protocol/library documentation | Protocol compatibility through `tsclientlib` | -| Apple Developer documentation | iOS/macOS signing, AVAudioSession, TestFlight/App Store requirements | -| Android Developer documentation | Permissions, foreground services, target SDK, audio routing | -| Material 3 guidelines | UI system baseline | -| ASPICE SWE/SYS process references | Lifecycle terminology for SWE.2, SWE.3, SWE.4, SWE.5, SWE.6, SYS.4 | - -## 2. DV Use - -External references support review but do not override Chanora baselines. diff --git a/docs/release/dv-waiver-register.md b/docs/release/dv-waiver-register.md deleted file mode 100644 index 2224124..0000000 --- a/docs/release/dv-waiver-register.md +++ /dev/null @@ -1,36 +0,0 @@ -# Chanora DV Waiver Register - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Applies to:** DV review and internal candidate validation only - -## 1. Waiver Policy - -A waiver records a known gap that reviewers may accept for a limited decision scope. A waiver does not delete the underlying requirement and does not approve public/store release unless the release owner explicitly accepts that scope. - -## 2. Active Waivers and Deferrals - -| ID | Gap | Source evidence | Impact | Accepted DV scope | Unblock condition | -|---|---|---|---|---|---| -| DV-WVR-001 | DEC-012 legal/trademark/OSS review remains open | `docs/implementation-status-2026-05-28.md` | Blocks public/store release and final compatible-server wording approval | Documentation review and internal validation only | Legal/trademark/OSS owner signs off and required notices/reports are complete | -| DV-WVR-002 | Android Keystore-backed DEK deferred to v1.1 | `docs/implementation-status-2026-05-28.md` | Limits Android secure-storage claim; file-fallback DEK remains a release risk | Internal validation only with limitation stated | Android Keystore-backed DEK implemented or product/security owner accepts release waiver | -| DV-WVR-003 | iOS `AVAudioSession.Mode.voiceChat` status was recorded as a prior blocker but recent commit history indicates follow-up implementation | `docs/implementation-status-2026-05-28.md`, recent commit `feat(ios): use AVAudioSession .voiceChat mode` | Requires updated validation so documents and implementation status do not conflict | DV may proceed if treated as evidence-needs-validation, not as a closed release gate | Run iOS device audio verification and update implementation status | -| DV-WVR-004 | Standalone event replay and runtime reducer-integration evidence not yet complete | `docs/implementation-status-2026-05-28.md`, local `cargo test -p chanora_state --locked` evidence | Reducer unit coverage supports state synchronization, but file-based replay evidence and live-event integration evidence remain open | DV documentation pass and internal validation | Event replay tooling implemented or requirement reprioritized; runtime reducer integration evidence attached | -| DV-WVR-005 | Event replay tool not found | `docs/implementation-status-2026-05-28.md` | Limits P1 state verification hooks SRS-061/SRS-098 | Accepted as P1 deferral | Event replay tooling implemented or requirement reprioritized | -| DV-WVR-006 | Desktop and iOS artifacts are source-buildable or unsigned only | `docs/implementation-status-2026-05-28.md`, `docs/release/ios-build.md` | Blocks packaged public release claims | Internal validation from source/unsigned builds only | Signed/notarized/package artifacts exist and hashes are recorded | -| DV-WVR-007 | Silero VAD asset bundled while `VoiceActivity` is platform-scoped | `docs/implementation-status-2026-05-28.md` | Risk that UI/release wording overstates VAD availability beyond verified Windows/Linux desktop paths | DV may pass if VoiceActivity claims are limited to verified desktop evidence and unsupported platforms remain disabled/unavailable | Mobile/macOS implementation allocated in a later baseline or asset/wording reconciled | -| DV-WVR-008 | Artifact hashes, tag, and candidate run IDs are not recorded in release record | `docs/release/release-readiness-go-nogo-record.md` | Blocks final release approval and reproducibility | DV documentation review only | Candidate build run records, tag, commit SHA, and artifact hashes are recorded | -| DV-WVR-009 | Android target compile and runtime smoke blocked locally | `docs/governance/maintainability-review-2026-06-08.md`, `docs/release/release-readiness-go-nogo-record.md` | Blocks Android runtime, permission-flow, and audio-lifecycle success claims | Documentation review only; internal validation must keep Android limitation stated | Android NDK compiler `aarch64-linux-android-clang` is available, `adb devices -l` shows an authorized target, and Android build/install/smoke evidence is attached | - -## 3. Waiver Review Rules - -| Rule | Required behavior | -|---|---| -| Scope control | Waivers in this file apply to DV/internal validation unless explicitly promoted by release owner approval | -| User-visible claims | Release notes, UI, and marketing wording must not claim unsupported capabilities | -| Security/legal claims | Security, privacy, legal, and OSS claims require owner sign-off before public release | -| Closure | A waiver closes only when the unblock condition is satisfied and the release-readiness record is updated | - -## 4. DV Meeting Recommendation - -Accept the waiver register for DV documentation pass. Do not accept these waivers as public/store release approval. diff --git a/docs/release/platform-release-policy.md b/docs/release/platform-release-policy.md deleted file mode 100644 index a25290d..0000000 --- a/docs/release/platform-release-policy.md +++ /dev/null @@ -1,26 +0,0 @@ -# Chanora Platform Release Policy - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Purpose - -This policy defines platform release expectations for Chanora candidate builds. - -## 2. Platform Policy - -| Platform | Minimum release requirement | Current DV state | -|---|---|---| -| Android | Signed release or internal test artifact, target SDK compliance, permission/foreground-service validation | Internal validation only; Android DEK waiver active | -| iOS | Signed TestFlight/App Store build or explicitly unsigned verification build | Unsigned verification build only | -| Windows | Packaged build, smoke result, PTT capability evidence, signing decision | Source-buildable only | -| macOS | Universal build, signing/notarization, PTT capability evidence | Source-buildable only | -| Linux | Packaged build or documented source-build path, portal/fallback PTT evidence | Source-buildable only | - -## 3. Release Claim Rule - -Release notes and public wording must match the actual artifact and platform capability. A source-buildable platform must not be described as having a finished public binary release. - -## 4. DV Conclusion - -The platform policy is defined. Current candidate scope remains internal validation and documentation review. 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 04833d2..0000000 --- a/docs/release/release-readiness-go-nogo-record.md +++ /dev/null @@ -1,105 +0,0 @@ -# Chanora Release Readiness Go/No-Go Record - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Candidate:** documentation/DV evidence over Rust workspace version `0.2.0-beta.1`; Flutter app version/build `0.3.0+100` -**Decision:** No-Go for public/store release; Conditional Go only for documentation review and continued internal DV validation - -## 1. Decision Summary - -Chanora has enough documented structure for DV review and continued internal release-candidate validation. It is not ready for public, store, or broad external release because legal/trademark/OSS sign-off, platform release artifacts, signing/notarization, and several verification evidence items remain open. - -The phrase `Conditional Go` in this record is restricted to document-baseline review and internal validation planning. It is not a product release approval, not a public beta approval, and not a store-distribution approval. - -| Decision scope | Result | Rationale | -|---|---|---| -| Documentation baseline for DV meeting | Conditional Go | SysRS, SysDes, SRS, verification plans, traceability summary, and waiver register are available | -| Internal candidate validation | Conditional Go | Core product paths are implemented enough to continue targeted validation with recorded limitations | -| Public release | No-Go | DEC-012 and platform release gates remain open | -| Store release | No-Go | Signing, app-store build, legal/privacy/security evidence, and artifact records are incomplete | - -## 2. Candidate Metadata - -| Field | Value | -|---|---| -| Workspace version | `0.2.0-beta.1` | -| Flutter app version/build | `0.3.0+100` from `apps/chanora_flutter/pubspec.yaml` | -| CHANGELOG latest candidate | `v0.3.0` baseline entry; public release version not reached | -| Build number | `100` from `apps/chanora_flutter/pubspec.yaml` | -| Commit SHA | To be recorded from the candidate build job before release approval | -| Git tag | To be recorded if a candidate is tagged for release validation | -| Artifact hashes | Not recorded in current workspace; required before release approval | -| Release owner | Product / Release Operations | -| Verification owner | Software QA with System Engineering support | - -## 3. Current Implementation Readiness - -Current implementation status is summarized in `docs/implementation-status-2026-05-28.md`. - -| Area | Readiness statement | -|---|---| -| Core product path | Connect, channel/voice/chat/bookmark/storage/diagnostics paths are substantially implemented | -| CI baseline | Rust and Flutter automated checks are defined in `.github/workflows/ci.yml` | -| Audio benchmarks | Advisory workflow exists in `.github/workflows/bench-advisory.yml` | -| Platform coverage | Android and iOS platform work exists; desktop/iOS release artifacts are not ready for public distribution | -| Documentation | Verification plan set and DV gate summaries now exist for review | - -## 4. Release Gates - -| Gate | Status | Decision impact | -|---|---|---| -| Requirements/design baseline | Passed for DV | SysRS/SysDes/SRS available | -| Verification plan baseline | Passed for DV | `docs/verification/` plan set available | -| Traceability summary | Passed for DV | `docs/governance/traceability-matrix.md` available | -| Legal/trademark/OSS review DEC-012 | Blocked / open | Blocks public/store release | -| Privacy policy baseline | Baseline candidate | Requires owner/legal review before public/store release | -| Security/privacy evidence | Partial | Blocks strong secure-storage and diagnostic claims until audits attach evidence | -| Android secure-storage DEK | Deferred to v1.1 | Requires waiver for internal testing; limits release claim | -| Android target compile/install/smoke | Blocked locally | Missing Android NDK compiler `aarch64-linux-android-clang` and no authorized ADB target block Android runtime claims | -| iOS release build/signing | Unsigned verification only | Blocks TestFlight/App Store release | -| macOS signing/notarization | Not complete | Blocks macOS public binary release | -| Windows/Linux packaging | Source-buildable only for candidate | Blocks packaged public desktop release claims | -| Artifact hashes | Not recorded | Blocks final release approval | - -## 5. Verification Evidence Status - -| Evidence | Current status | Required action before public/store release | -|---|---|---| -| Rust workspace check/test | CI defined | Attach latest passing candidate run | -| Flutter analyze/test | CI defined | Attach latest passing candidate run | -| Cargo deny and cargo-about | CI defined | Attach latest passing candidate run and inventory records | -| Flutter license inventory | CI defined | Attach latest passing candidate run and inventory records | -| iOS unsigned build | CI defined | Attach latest passing candidate run; add signing evidence before release | -| Compatible-server demo | Evidence not attached in this record | Run and attach demo notes/logs | -| Audio send/receive and processing demo | Evidence not attached in this record | Run and attach platform evidence | -| Android target build/install/smoke | Blocked locally | Install/fix Android NDK compiler, connect/authorize a device or emulator, then attach build/install/smoke evidence | -| Diagnostics redaction/export demo | Evidence not attached in this record | Run and attach export review | -| Platform secure-storage audit | Partial | Attach per-platform audit or waiver | -| PTT capability evidence | Partial | Attach per-platform `PttCapabilityLevel` and backend record | - -## 6. Platform Readiness - -| Platform | Current readiness | Release decision | -|---|---|---| -| Android | Core platform implementation present; Android Keystore-backed DEK deferred; local target compile/install/smoke blocked by missing `aarch64-linux-android-clang` and no authorized ADB target | Conditional internal validation only after Android build/install/smoke evidence or explicit waiver | -| iOS | Unsigned build path present; signing and store pipeline incomplete | No-Go for store release | -| Windows | Source-buildable; smoke procedure exists | No-Go for packaged release until smoke/signing evidence exists | -| macOS | Source-buildable; public artifact not in candidate | No-Go for packaged release until signing/notarization evidence exists | -| Linux | Source-buildable; packaging not confirmed | No-Go for packaged release until artifact evidence exists | - -## 7. Waivers and Deferrals - -All current waivers and deferrals are controlled by `docs/release/dv-waiver-register.md`. A release approver may accept a waiver for internal validation, but public/store release waivers require explicit product, legal/security, and release-owner approval where applicable. - -## 8. Final DV Recommendation - -Recommended DV meeting outcome: - -| Question | Recommendation | -|---|---| -| Can the document baseline pass DV review? | Yes, with recorded limitations | -| Can internal release-candidate validation continue? | Yes, with the waiver register attached | -| Can Chanora be publicly released now? | No | -| Can store release proceed now? | No | - -The release decision remains **No-Go** until current candidate run evidence, legal/trademark/OSS approval, privacy/security approval, platform signing, and artifact records are complete. diff --git a/docs/requirements/srs.md b/docs/requirements/srs.md deleted file mode 100644 index 994ec81..0000000 --- a/docs/requirements/srs.md +++ /dev/null @@ -1,22 +0,0 @@ -# Software Requirements Specification - -**Document status:** DV entry-point record -**Canonical document:** `../srs.md` - -The canonical Chanora Software Requirements Specification currently lives at `docs/srs.md`. This file preserves the README-advertised path `docs/requirements/srs.md` for DV navigation. - -Reviewers shall use `docs/srs.md` as the authoritative SRS baseline until the repository migration moves the canonical file into this directory. - -## DV Review Summary - -| Topic | Canonical source | -|---|---| -| Software requirement attributes | `docs/srs.md` section 2 | -| Component requirement groups | `docs/srs.md` section 5 | -| MVP acceptance verification support | `docs/srs.md` SRS-128 | -| SysDes-to-SRS coverage | `docs/srs.md` section 9 | -| SWE lifecycle handoff | `docs/srs.md` section 8 | - -## DV Position - -The SRS baseline is reviewable for DV. SAD, SDD, and verification documents consume this baseline through `docs/architecture/sad.md`, `docs/architecture/sdd.md`, and `docs/verification/`. diff --git a/docs/requirements/sysrs.md b/docs/requirements/sysrs.md deleted file mode 100644 index 38836f2..0000000 --- a/docs/requirements/sysrs.md +++ /dev/null @@ -1,22 +0,0 @@ -# System Requirements Specification - -**Document status:** DV entry-point record -**Canonical document:** `../sysrs.md` - -The canonical Chanora System Requirements Specification currently lives at `docs/sysrs.md`. This file preserves the README-advertised path `docs/requirements/sysrs.md` for DV navigation. - -Reviewers shall use `docs/sysrs.md` as the authoritative SysRS baseline until the repository migration moves the canonical file into this directory. - -## DV Review Summary - -| Topic | Canonical source | -|---|---| -| System scope and context | `docs/sysrs.md` sections 2 through 5 | -| Verification and validation requirements | `docs/sysrs.md` section 24 | -| MVP acceptance requirements | `docs/sysrs.md` section 25, SysRS-241 through SysRS-257 | -| Traceability requirement | `docs/sysrs.md` SysRS-233 and SysRS-285 | -| No automatic telemetry posture | `docs/sysrs.md` SysRS-295 | - -## DV Position - -The SysRS baseline is reviewable for DV. Release approval remains controlled by `docs/release/release-readiness-go-nogo-record.md`. 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 29ca233..0000000 --- a/docs/security/dependency-and-supply-chain-report.md +++ /dev/null @@ -1,43 +0,0 @@ -# Chanora Dependency and Supply Chain Report - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Scope:** Dependency, license, advisory, and supply-chain evidence for DV review - -## 1. Purpose - -This report summarizes the current dependency and supply-chain controls visible in the repository. It is not the final DEC-012 legal sign-off. - -## 2. Automated Controls - -| Control | Location | Current behavior | -|---|---|---| -| Rust license/advisory/bans/sources check | `.github/workflows/ci.yml` supply-chain job | Runs `cargo deny check --workspace --all-features` | -| Rust license inventory freshness | `.github/workflows/ci.yml` license-inventory job | Regenerates cargo-about inventory and diffs `docs/security/license-inventory.md` | -| Flutter license inventory freshness | `.github/workflows/ci.yml` flutter-license-inventory job | Runs `tools/dump_flutter_licenses.sh` and fails if `docs/security/flutter-license-inventory.md` is stale | -| Rust dependency lock enforcement | `.github/workflows/ci.yml` Rust job | Uses `cargo check/test --locked` | -| Flutter dependency resolution | `.github/workflows/ci.yml` Flutter job | Runs `flutter pub get`, analyze, and tests | - -## 3. Dependency Areas - -| Area | Examples from current repository | DV status | -|---|---|---| -| Rust workspace crates | `chanora_protocol`, `chanora_audio`, `chanora_storage`, `chanora_diagnostics`, `chanora_bridge`, `chanora_resolver`, `chanora_prefetch`, `chanora_state`, `chanora_core` | In workspace and covered by CI commands | -| Flutter app dependencies | `flutter_rust_bridge`, `audio_session`, `flutter_foreground_task`, `package_info_plus`, `share_plus`, `shared_preferences` | Covered by Flutter dependency resolution and license inventory job | -| Native/audio dependencies | Opus, platform audio stacks, Android/iOS audio services | Require platform build and license review evidence | -| Patched Rust dependency | `cmake` patched to a pinned git revision for Android build support | Requires DEC-032 tracking and periodic reevaluation | -| Pinned Android audio fork | `oboe` uses `https://github.com/EdisonJwa/oboe-rs` at a fixed revision | Removes machine-local path dependency while preserving reviewed Android callback/session fixes | - -## 4. Open Evidence Gaps - -| Gap | Impact | Required action | -|---|---|---| -| `docs/security/license-inventory.md` and Flutter inventory are referenced by CI but were not present in the current document listing | CI may fail or the repository may have untracked/missing inventory artifacts | Generate and commit inventories or update CI/documentation to the actual artifact location | -| DEC-012 remains open | Blocks public/store release | Complete legal/trademark/OSS review | -| Candidate CI run IDs are not recorded in release readiness | Reviewers cannot tie evidence to a specific release candidate | Attach latest passing run IDs to release-readiness record | -| Patched `cmake` dependency requires monitoring | Long-term supply-chain risk if fork remains pinned indefinitely | Reevaluate when upstream release includes the needed Android fix | -| `audiopus_sys` unmaintained advisory `RUSTSEC-2026-0150` is explicitly ignored in `deny.toml` | Keeps current Opus path buildable but remains a supply-chain risk | Track replacement or upstream remediation before public release sign-off | - -## 5. DV Conclusion - -Automated supply-chain controls are defined, but final dependency/legal approval is not complete. This supports DV documentation pass with a public-release blocker. diff --git a/docs/security/diagnostic-redaction-audit-report.md b/docs/security/diagnostic-redaction-audit-report.md deleted file mode 100644 index 5783cb0..0000000 --- a/docs/security/diagnostic-redaction-audit-report.md +++ /dev/null @@ -1,31 +0,0 @@ -# Chanora Diagnostic Redaction Audit Report - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Scope - -This report defines the diagnostic redaction audit required before enabling diagnostics for external testers or public release. - -## 2. Redaction Targets - -| Data class | Required handling | -|---|---| -| Server passwords | Redact before export | -| Identity/private-key material | Redact before export | -| Tokens and known secrets | Redact through known-secret registry | -| Host/IP/email/path values | Redact or minimize according to diagnostic policy | -| User text content | Avoid unnecessary capture; redact when classified as sensitive | - -## 3. Evidence Required - -| Evidence | Required result | -|---|---| -| Unit tests | Redactor removes sample secrets and registered known secrets | -| Export demo | User-initiated export produces a JSON bundle without sample secrets | -| Manual review | Reviewer inspects candidate export before external release | -| Privacy alignment | Privacy policy describes user-initiated diagnostic sharing | - -## 4. DV Conclusion - -Audit expectations are defined. Candidate export evidence must be attached before external tester release. diff --git a/docs/security/flutter-license-inventory.md b/docs/security/flutter-license-inventory.md deleted file mode 100644 index dee1b81..0000000 --- a/docs/security/flutter-license-inventory.md +++ /dev/null @@ -1,5477 +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 | -| `audio_session` | 0.2.3 | 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` | 7.1.1 | hosted | yes | -| `connectivity_plus_platform_interface` | 2.1.0 | hosted | yes | -| `convert` | 3.1.2 | hosted | yes | -| `cross_file` | 0.3.5+2 | hosted | yes | -| `crypto` | 3.0.7 | 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 | -| `ffi_leak_tracker` | 0.1.2 | hosted | yes | -| `file` | 7.0.1 | hosted | yes | -| `fixnum` | 1.1.1 | hosted | yes | -| `flutter` | 0.0.0 | sdk | yes | -| `flutter_foreground_task` | 9.2.2 | hosted | yes | -| `flutter_lints` | 6.0.0 | hosted | yes | -| `flutter_local_notifications` | 22.0.0 | hosted | yes | -| `flutter_local_notifications_linux` | 8.0.1 | hosted | yes | -| `flutter_local_notifications_platform_interface` | 12.0.0 | hosted | yes | -| `flutter_local_notifications_web` | 1.0.0 | hosted | yes | -| `flutter_local_notifications_windows` | 3.1.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 | -| `haptic_kit` | 1.0.0 | hosted | yes | -| `hooks` | 1.0.3 | hosted | yes | -| `http` | 1.6.0 | 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.12.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.18.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 | -| `package_info_plus` | 10.1.0 | hosted | yes | -| `package_info_plus_platform_interface` | 4.1.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 | -| `rxdart` | 0.28.0 | hosted | yes | -| `share_plus` | 13.1.0 | hosted | yes | -| `share_plus_platform_interface` | 7.1.0 | hosted | yes | -| `shared_preferences` | 2.5.5 | hosted | yes | -| `shared_preferences_android` | 2.4.23 | hosted | yes | -| `shared_preferences_foundation` | 2.5.6 | hosted | yes | -| `shared_preferences_linux` | 2.4.1 | hosted | yes | -| `shared_preferences_platform_interface` | 2.4.2 | hosted | yes | -| `shared_preferences_web` | 2.4.3 | hosted | yes | -| `shared_preferences_windows` | 2.4.1 | 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.11 | hosted | yes | -| `timezone` | 0.11.0 | hosted | yes | -| `typed_data` | 1.4.0 | hosted | yes | -| `url_launcher` | 6.3.2 | hosted | yes | -| `url_launcher_android` | 6.3.30 | hosted | yes | -| `url_launcher_ios` | 6.4.1 | hosted | yes | -| `url_launcher_linux` | 3.2.2 | hosted | yes | -| `url_launcher_macos` | 3.2.5 | hosted | yes | -| `url_launcher_platform_interface` | 2.3.2 | hosted | yes | -| `url_launcher_web` | 2.4.3 | hosted | yes | -| `url_launcher_windows` | 3.1.5 | hosted | yes | -| `uuid` | 4.5.3 | 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 | -| `win32` | 6.2.0 | 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. -``` - -### audio_session 0.2.3 - -``` -MIT License - -Copyright (c) 2020 Ryan Heise and the project 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. -``` - -### 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 7.1.1 - -``` -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. -``` - -### cross_file 0.3.5+2 - -``` -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. -``` - -### 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. -``` - -### 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. -``` - -### ffi_leak_tracker 0.1.2 - -``` -BSD 3-Clause License - -Copyright (c) 2026, Halil Durmus - -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. -``` - -### 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_foreground_task 9.2.2 - -``` -MIT License - -Copyright (c) 2021 Dev-hwang - -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_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_local_notifications 22.0.0 - -``` -Copyright 2018 Michael Bui. 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 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 -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_local_notifications_linux 8.0.1 - -``` -Copyright 2018 Michael Bui. 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 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 -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_local_notifications_platform_interface 12.0.0 - -``` -Copyright 2020 Michael Bui. 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 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 -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_local_notifications_web 1.0.0 - -``` -Copyright 2020 Michael Bui. 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 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 -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_local_notifications_windows 3.1.0 - -``` -Copyright 2024 Michael Bui. 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 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 -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. -``` - -### haptic_kit 1.0.0 - -``` -MIT License - -Copyright (c) 2026 Eryk Kruk - -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. -``` - -### 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 1.6.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. -``` - -### 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.12.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.18.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. -``` - -### package_info_plus 10.1.0 - -``` -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. -``` - -### package_info_plus_platform_interface 4.1.0 - -``` -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. -``` - -### 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. -``` - -### rxdart 0.28.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. -``` - -### share_plus 13.1.0 - -``` -Copyright 2017, the Flutter 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. -``` - -### share_plus_platform_interface 7.1.0 - -``` -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. -``` - -### shared_preferences 2.5.5 - -``` -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. -``` - -### shared_preferences_android 2.4.23 - -``` -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. -``` - -### shared_preferences_foundation 2.5.6 - -``` -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. -``` - -### shared_preferences_linux 2.4.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. -``` - -### shared_preferences_platform_interface 2.4.2 - -``` -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. -``` - -### shared_preferences_web 2.4.3 - -``` -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. -``` - -### shared_preferences_windows 2.4.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. -``` - -### 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.11 - -``` -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. -``` - -### timezone 0.11.0 - -``` -Copyright (c) 2014, timezone 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. - -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 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. -``` - -### url_launcher 6.3.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. -``` - -### url_launcher_android 6.3.30 - -``` -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. -``` - -### url_launcher_ios 6.4.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. -``` - -### url_launcher_linux 3.2.2 - -``` -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. -``` - -### url_launcher_macos 3.2.5 - -``` -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. -``` - -### url_launcher_platform_interface 2.3.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. -``` - -### url_launcher_web 2.4.3 - -``` -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. -``` - -### url_launcher_windows 3.1.5 - -``` -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. -``` - -### uuid 4.5.3 - -``` -Copyright (c) 2021 Yulian Kuncheff - -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. -``` - -### 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. -``` - -### win32 6.2.0 - -``` -BSD 3-Clause License - -Copyright (c) 2024, Halil Durmus - -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. -``` - -### 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.md b/docs/security/license-inventory.md deleted file mode 100644 index 4dda47a..0000000 --- a/docs/security/license-inventory.md +++ /dev/null @@ -1,10970 +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` | 327 | -| `MIT License` | 74 | -| `Unicode License v3` | 19 | -| `BSD 3-Clause "New" or "Revised" License` | 14 | -| `ISC License` | 9 | -| `Community Data License Agreement Permissive 2.0` | 1 | -| `zlib License` | 1 | - -## Crates - -| Crate | Version | License | Source | -|-------|---------|---------|--------| -| powerfmt | 0.2.0 | `Apache License 2.0` | | -| deranged | 0.5.8 | `Apache License 2.0` | | -| oboe-sys | 0.6.3 | `Apache License 2.0` | | -| oboe | 0.6.3 | `Apache License 2.0` | | -| encoding_rs | 0.8.35 | `Apache License 2.0` | | -| ort-sys | 2.0.0-rc.12 | `Apache License 2.0` | | -| ort | 2.0.0-rc.12 | `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-collections | 0.3.2 | `Apache License 2.0` | | -| windows-core | 0.62.2 | `Apache License 2.0` | | -| windows-future | 0.3.2 | `Apache License 2.0` | | -| windows-implement | 0.60.2 | `Apache License 2.0` | | -| windows-interface | 0.59.3 | `Apache License 2.0` | | -| windows-link | 0.2.1 | `Apache License 2.0` | | -| windows-numerics | 0.3.1 | `Apache License 2.0` | | -| windows-registry | 0.6.1 | `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.53.5 | `Apache License 2.0` | | -| windows-threading | 0.2.1 | `Apache License 2.0` | | -| windows | 0.62.2 | `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.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.50 | `Apache License 2.0` | | -| allo-isolate | 0.1.27 | `Apache License 2.0` | | -| cpal | 0.18.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` | | -| foreign-types-shared | 0.1.1 | `Apache License 2.0` | | -| foreign-types | 0.3.2 | `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` | | -| native-tls | 0.2.18 | `Apache License 2.0` | | -| openssl-macros | 0.1.1 | `Apache License 2.0` | — | -| openssl | 0.10.80 | `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.12+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` | | -| rustfft | 6.4.1 | `Apache License 2.0` | | -| strength_reduce | 0.2.4 | `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.1 | `Apache License 2.0` | | -| reqwest | 0.12.28 | `Apache License 2.0` | | -| reqwest | 0.13.4 | `Apache License 2.0` | | -| http | 1.4.1 | `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` | | -| crossbeam | 0.8.4 | `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` | | -| tsproto-structs | 0.2.0 | `Apache License 2.0` | | -| cmake | 0.1.54 | `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.1 | `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.12.1 | `Apache License 2.0` | | -| cc | 1.2.63 | `Apache License 2.0` | | -| cfg-if | 1.0.4 | `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.14.2 | `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-queue | 0.3.12 | `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.6 | `Apache License 2.0` | | -| either | 1.16.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` | | -| hyper-tls | 0.6.0 | `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.31 | `Apache License 2.0` | | -| matrixmultiply | 0.3.10 | `Apache License 2.0` | | -| mime | 0.3.17 | `Apache License 2.0` | | -| ndarray | 0.17.2 | `Apache License 2.0` | | -| num-bigint | 0.4.6 | `Apache License 2.0` | | -| num-complex | 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` | | -| primal-check | 0.3.4 | `Apache License 2.0` | | -| rawpointer | 0.2.1 | `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` | | -| ring | 0.17.14 | `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.4 | `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.4 | `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` | | -| unicode-xid | 0.2.6 | `Apache License 2.0` | | -| url | 2.5.8 | `Apache License 2.0` | | -| uuid | 1.23.2 | `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` | | -| transpose | 0.2.3 | `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` | | -| bytemuck | 1.25.0 | `Apache License 2.0` | | -| bytemuck_derive | 1.10.2 | `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` | | -| tsproto-types | 0.1.0 | `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 | 0.2.0 | `Apache License 2.0` | | -| chanora_core | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_audio | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_bridge | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_diagnostics | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_prefetch | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_protocol | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_resolver | 0.2.0-beta.1 | `Apache License 2.0` | — | -| chanora_state | 0.2.0-beta.1 | `Apache License 2.0` | | -| chanora_storage | 0.2.0-beta.1 | `Apache License 2.0` | | -| alsa | 0.11.0 | `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` | | -| dispatch2 | 0.3.1 | `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.6.0 | `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.2 | `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-avf-audio | 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_json | 1.0.150 | `Apache License 2.0` | | -| serde_repr | 0.1.20 | `Apache License 2.0` | | -| serde_urlencoded | 0.7.1 | `Apache License 2.0` | | -| shlex | 2.0.1 | `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` | | -| sonora-agc2 | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| sonora-common-audio | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| sonora-fft | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| sonora-ns | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| sonora-simd | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| sonora | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| 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` | | -| sonora-aec3 | 0.1.0 | `BSD 3-Clause "New" or "Revised" License` | | -| encoding_rs | 0.8.35 | `BSD 3-Clause "New" or "Revised" License` | | -| webpki-roots | 1.0.7 | `Community Data License Agreement Permissive 2.0` | | -| untrusted | 0.9.0 | `ISC License` | | -| simple_asn1 | 0.6.4 | `ISC License` | | -| ring | 0.17.14 | `ISC License` | | -| libloading | 0.9.0 | `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` | | -| sdl2-sys | 0.38.0 | `MIT License` | | -| openssl-sys | 0.9.116 | `MIT License` | | -| mio | 1.2.1 | `MIT License` | | -| nom | 7.1.3 | `MIT License` | | -| libsqlite3-sys | 0.30.1 | `MIT License` | | -| rusqlite | 0.32.1 | `MIT License` | | -| hyper | 1.10.1 | `MIT License` | | -| schannel | 0.1.29 | `MIT License` | | -| memoffset | 0.9.1 | `MIT License` | | -| version-compare | 0.1.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` | | -| tokio-native-tls | 0.3.1 | `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.11 | `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.16.0 | `MIT License` | | -| zbus_macros | 5.16.0 | `MIT License` | | -| zbus_names | 4.3.2 | `MIT License` | | -| zvariant | 5.12.0 | `MIT License` | | -| zvariant_derive | 5.12.0 | `MIT License` | | -| synstructure | 0.13.2 | `MIT License` | | -| fs_extra | 1.3.0 | `MIT License` | | -| alsa-sys | 0.4.0 | `MIT License` | | -| dashmap | 5.5.3 | `MIT License` | | -| tokio-macros | 2.7.0 | `MIT License` | | -| oslog | 0.2.0 | `MIT License` | | -| block2 | 0.6.2 | `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` | | -| webrtc-vad | 0.4.0 | `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` | | -| zmij | 1.0.21 | `MIT License` | | -| zvariant_utils | 3.4.0 | `MIT License` | | -| winnow | 1.0.3 | `MIT License` | | -| sdl2 | 0.38.0 | `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.1 | `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` | | -| derive_more-impl | 2.1.1 | `MIT License` | | -| derive_more | 2.1.1 | `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` | | -| sdl2-sys | 0.38.0 | `zlib License` | | - -## 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 {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) 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 Crossbeam Project 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 2022 The transpose 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: - -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 [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 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) 2011, The WebRTC Project Authors. All rights reserved. -Copyright (c) 2016, Arun Raghavan and contributors. All rights reserved. -Copyright (c) 2026, dignifiedquire. 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 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. - -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. - -``` - -### Community Data License Agreement Permissive 2.0 - -``` -# Community Data License Agreement - Permissive - Version 2.0 - -This is the Community Data License Agreement - Permissive, Version -2.0 (the "agreement"). Data Provider(s) and Data Recipient(s) agree -as follows: - -## 1. Provision of the Data - -1.1. A Data Recipient may use, modify, and share the Data made -available by Data Provider(s) under this agreement if that Data -Recipient follows the terms of this agreement. - -1.2. This agreement does not impose any restriction on a Data -Recipient's use, modification, or sharing of any portions of the -Data that are in the public domain or that may be used, modified, -or shared under any other legal exception or limitation. - -## 2. Conditions for Sharing Data - -2.1. A Data Recipient may share Data, with or without modifications, so -long as the Data Recipient makes available the text of this agreement -with the shared Data. - -## 3. No Restrictions on Results - -3.1. This agreement does not impose any restriction or obligations -with respect to the use, modification, or sharing of Results. - -## 4. No Warranty; Limitation of Liability - -4.1. All Data Recipients receive the Data subject to the following -terms: - -THE DATA IS PROVIDED ON AN "AS IS" BASIS, WITHOUT REPRESENTATIONS, -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. - -NO DATA PROVIDER SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING -WITHOUT LIMITATION LOST PROFITS), 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 DATA OR RESULTS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -## 5. Definitions - -5.1. "Data" means the material received by a Data Recipient under -this agreement. - -5.2. "Data Provider" means any person who is the source of Data -provided under this agreement and in reliance on a Data Recipient's -agreement to its terms. - -5.3. "Data Recipient" means any person who receives Data directly -or indirectly from a Data Provider and agrees to the terms of this -agreement. - -5.4. "Results" means any outcome obtained by computational analysis -of Data, including for example machine learning models and models' -insights. - -``` - -### 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 - -``` -Copyright 2015-2025 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 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 - -``` -Copyright © 2015, Simonas Kazlauskas - -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 - -``` -#ifndef _imKStoUCS_h -#define _imKStoUCS_h - -/* -Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett -Copyright © 2009 Red Hat, Inc. -Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. -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 (including the next -paragraph) 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. -*/ - -extern unsigned int SDL_KeySymToUcs4(Uint32 keysym); - -#endif /* _imKStoUCS_h */ - -``` - -### MIT License - -``` -Copyright (c) 2014 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) 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 Tim Visée - -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) <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 (including the next paragraph) 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) 2013 Mozilla Foundation - -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) 2016 Jelte Fennema - -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. - -``` - -### zlib License - -``` -Copyright (C) 1997-2023 Sam Lantinga <slouken@libsdl.org> - -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. - - -``` - - ---- - -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 9799c4d..0000000 --- a/docs/security/secure-storage-audit-report.md +++ /dev/null @@ -1,31 +0,0 @@ -# Chanora Secure Storage Audit Report - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Scope - -This report defines the secure-storage audit expected before public/store release. - -## 2. Audit Matrix - -| Platform | Expected backend | Current evidence state | -|---|---|---| -| Android | Android secure storage / Keystore-backed protection where implemented | Android Keystore-backed DEK deferred to v1.1 | -| iOS | Keychain | Device audit required | -| macOS | Keychain | Device audit required | -| Windows | Credential Manager | Device audit required | -| Linux | Secret Service with documented fallback behavior | Device audit required | - -## 3. Required Checks - -| Check | Required result | -|---|---| -| Secret persistence | Server passwords and identity secrets are not stored as unprotected plaintext | -| Fallback disclosure | Any file fallback is disclosed in release/security records | -| Diagnostic interaction | Stored secrets are registered for redaction where they can enter logs/export | -| CI behavior | CI keyring disabling is limited to headless test environments | - -## 4. DV Conclusion - -Secure-storage audit requirements are defined, but per-platform audit evidence is not complete. Public/store release remains blocked for strong secure-storage claims. diff --git a/docs/security/security-privacy-legal-guideline.md b/docs/security/security-privacy-legal-guideline.md deleted file mode 100644 index 8e68b32..0000000 --- a/docs/security/security-privacy-legal-guideline.md +++ /dev/null @@ -1,63 +0,0 @@ -# Chanora Security, Privacy, and Legal Guideline - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Scope:** Release-gate expectations for security, privacy, diagnostics, legal wording, and OSS review - -## 1. Purpose - -This guideline defines the minimum security, privacy, and legal checks that must be satisfied before Chanora moves beyond internal validation. It supports DV review by making gate ownership and evidence expectations explicit. - -## 2. Gate Summary - -| Gate | Requirement source | Required evidence | Current DV status | -|---|---|---|---| -| Secure storage | SysRS-237, SysRS-256, SRS-090 through SRS-095, SRS-126, SRS-137 | Platform audit for secret storage and fallback behavior | Partial; Android DEK waiver active | -| Diagnostic redaction | SysRS-238, SysRS-257, SRS-093 through SRS-102, SRS-126 | Redaction tests and export review | Evidence must be attached before external tester enablement | -| No automatic telemetry/upload | SysRS-295 and related SysDes/SRS privacy clauses | Inspection of runtime behavior and privacy wording | Baseline policy: no automatic upload in MVP | -| Dependency and OSS review | DEC-012, CI supply-chain jobs | Cargo deny/about, Flutter license inventory, legal sign-off | CI checks defined; DEC-012 remains open | -| Trademark/non-affiliation wording | SysRS-006, SysRS-240 | Legal/trademark review and UI/release wording inspection | Blocks public release until signed off | -| Privacy policy | Privacy and release readiness requirements | Published or approved privacy text | Baseline candidate exists; owner/legal review required | - -## 3. Secure Storage Expectations - -Sensitive data includes server passwords, identity/private-key material, tokens, diagnostic known secrets, and any credential-equivalent values. The application must use platform secure storage where available and must not silently advertise stronger protection than the active backend provides. - -Required release evidence: - -| Platform | Required evidence | -|---|---| -| Android | Key storage and DEK behavior review; Android Keystore-backed DEK gap is a release limitation until closed | -| iOS | Keychain behavior review on device | -| macOS | Keychain behavior review | -| Windows | Credential Manager behavior review | -| Linux | Secret Service behavior review and fallback limitation disclosure | - -## 4. Diagnostic Redaction Expectations - -Diagnostics must be user-initiated. Logs and export bundles must redact credentials, tokens, private paths when sensitive, host/IP/email where configured, and known secrets registered by runtime code. - -Diagnostic evidence must include: - -| Evidence | Required result | -|---|---| -| Redaction tests | Known secret classes are removed or replaced before export | -| Export demo | User can create a diagnostic bundle without automatic upload | -| Manual inspection | Exported JSON does not contain sample secrets used during the test | -| Privacy wording | User-facing policy explains what diagnostics contain and how sharing occurs | - -## 5. Legal and OSS Expectations - -Before public/store release, DEC-012 must close with approval covering: - -| Topic | Required result | -|---|---| -| TeamSpeak compatibility wording | Wording states compatibility without implying official affiliation | -| App name and metadata | Store, README, About dialog, and release notes avoid prohibited claims | -| OSS license inventory | Rust and Flutter dependencies have reviewed license inventory | -| NOTICE and attribution | Notices are complete for bundled or linked third-party software | -| Vulnerability/advisory review | Known critical issues are resolved, waived, or documented by owner approval | - -## 6. DV Conclusion - -Security, privacy, and legal gates are sufficiently documented for DV discussion. They are not sufficiently closed for public/store release. diff --git a/docs/security/threat-model.md b/docs/security/threat-model.md deleted file mode 100644 index 1c8564e..0000000 --- a/docs/security/threat-model.md +++ /dev/null @@ -1,33 +0,0 @@ -# Chanora Threat Model - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Scope - -This threat model covers the Chanora client, local storage, diagnostics, bridge boundary, protocol adapter, audio path, platform services, and release artifacts. External compatible servers are outside Chanora control. - -## 2. Assets - -| Asset | Protection goal | -|---|---| -| Server passwords and identities | Prevent plaintext persistence and diagnostic leakage | -| Voice audio | Avoid unintended transmit and preserve user control | -| Diagnostic logs | Redact secrets before user-initiated export | -| Local bookmarks/settings | Preserve integrity and avoid accidental disclosure | -| Release artifacts | Preserve integrity and accurate capability claims | - -## 3. Primary Threats - -| Threat | Mitigation | Current DV status | -|---|---|---| -| Secret leakage in diagnostics | Known-secret registry and redactor | Requires export evidence | -| Plaintext or weak secret storage | Platform secure-storage abstraction and encryption | Android DEK waiver active | -| Stuck push-to-talk transmit | Missed-key-up watchdog and transmit gate | Requires platform PTT evidence | -| Protocol-library leakage into UI | Protocol adapter isolation | Architecture baseline covers boundary | -| Malicious or misconfigured external server | Treat server as external dependency and expose safe errors | Requires compatible-server/negative evidence | -| Over-claiming platform support | Capability records and release policy | Release record controls claims | - -## 4. DV Conclusion - -Major threats and mitigations are identified. Final release requires audit evidence for secure storage, diagnostics, platform PTT, and release artifacts. diff --git a/docs/srs.md b/docs/srs.md deleted file mode 100644 index a194c7c..0000000 --- a/docs/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. The session shall be configured for VoIP (`.playAndRecord` + `.voiceChat` + `.mixWithOthers`) only while a voice channel is active, and shall return to a non-disruptive idle state (`.ambient`, inactive, with `.notifyOthersOnDeactivation`) at all other times so that other apps' audio (music, podcasts, navigation) is preserved when the user opens Chanora to read text chat. - -- 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`. `VoiceActivity` shall be selectable only on platforms with an implemented and verified VAD capture path in this baseline (currently Windows/Linux desktop); mobile, macOS, and unverified-platform enablement remain deferred per DEC-030. The setting shall be persisted per identity via the identity store where the selected platform supports it. The default value for a fresh install shall be `Ptt`. The UI shall render `VoiceActivity` as disabled/unavailable on unsupported platforms rather than claiming runtime support. - -- 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`, platform-scoped `VoiceActivity` per DEC-030) persisted per identity where supported, `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/sysdes.md b/docs/sysdes.md deleted file mode 100644 index 5066c94..0000000 --- a/docs/sysdes.md +++ /dev/null @@ -1,3047 +0,0 @@ -# Chanora SysDes — ASPICE SYS.3 System Architectural Design - -**Product name:** Chanora -**Document type:** SysDes / System Architectural Design -**Process alignment:** Automotive SPICE SYS.3 System Architectural Design -**Version:** 0.9.8 -**Status:** Baseline Candidate -**Input baseline:** Chanora SysRS v0.6 -**Target application type:** Cross-platform voice client application system -**Target client platforms:** Windows, macOS, Linux, iOS, Android -**Architecture baseline:** Flutter + Rust Core + `tsclientlib` protocol adapter - -**Repo path:** `docs/architecture/sysdes.md` --- - -## 1. Document Control - -### 1.1 Purpose - -This document defines the **system architectural design** for the Chanora application system. - -Chanora is an application, not an operating system. In this document, the word **system** means the complete Chanora application system and its runtime environment: the installed client application, operating system services, client device hardware, audio devices, network environment, external TeamSpeak 3-compatible servers, deployment environment, diagnostics, and engineering evidence. - - -**SysDes-001**: This SysDes shall establish the Chanora system architectural design and allocate all SysRS requirements to system elements. - -- Status: Baseline -- Type: Process / Description -- 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 overall purpose, BP1, BP4 -- Allocated SysRS: SysRS-001 through SysRS-257 - -**SysDes-002**: This SysDes shall treat Chanora as a cross-platform application system, not as an operating system. - -- 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 system boundary -- Allocated SysRS: SysRS-001, SysRS-006 through SysRS-010 - -**SysDes-003**: This SysDes shall be used as the system-level design baseline for downstream SRS, SAD, SDD, and Verification artifacts. - -- 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 communication and traceability -- Allocated SysRS: SysRS-233 through SysRS-240 - - -### 1.2 ASPICE SYS.3 Document Intent - -This SysDes is structured around the ASPICE SYS.3 intent: - -- Define static aspects of the system architecture. -- Define dynamic aspects of the system architecture. -- Analyze the system architecture and record design rationale. -- Ensure consistency and bidirectional traceability between SysRS and SysDes. -- Communicate the agreed system architecture to affected parties. - -This document is an ASPICE-style engineering artifact for Chanora. It does not claim formal Automotive SPICE assessment certification. - - -**SysDes-004**: The SysDes structure shall provide evidence for static architecture, dynamic architecture, architecture analysis, bidirectional traceability, consistency, and architecture communication. - -- 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 BP1 through BP5 -- Allocated SysRS: SysRS-233 through SysRS-240 - - -### 1.3 Downstream Lifecycle Relationship - -```text -SysRS -> 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 (call-scoped VoIP activation with `.mixWithOthers`, idle `.ambient` baseline), 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 `VoiceActivity`. `VoiceActivity` shall be surfaced only when the current platform has an allocated, implemented, and verified VAD capture path in this baseline (currently Windows/Linux desktop); mobile, macOS, and unverified-platform enablement remain deferred per DEC-030. The active mode shall be persisted in the identity store where the selected platform supports it; unsupported platforms shall surface `VoiceActivity` as disabled/unavailable rather than claiming runtime support. - -- 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` / platform-scoped `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/sysrs.md b/docs/sysrs.md deleted file mode 100644 index e2d714d..0000000 --- a/docs/sysrs.md +++ /dev/null @@ -1,2014 +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. Note: macOS has no AVAudioSession-equivalent surface; the macOS audio lifecycle in the current baseline is limited to launch-time microphone permission (`AVCaptureDevice.requestAccess`), the VPIO engine restart on Core Audio HAL default-device change (`kAudioHardwarePropertyDefaultInputDevice` / `DefaultOutputDevice` listeners), and the VPIO startup readback at engine start. Full audio route change + interruption handling — as available on iOS via AVAudioSession observers in `apps/chanora_flutter/ios/Runner/AppDelegate.swift` — is not present in the current macOS baseline; closing the gap is DEC-level scope, not a P0-MVP item. - -- 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`, `Continuous`, and `VoiceActivity`. `VoiceActivity` shall be enabled only on platforms with an implemented and verified VAD capture path in this baseline (currently Windows/Linux desktop); mobile, macOS, and unverified-platform enablement remain deferred per DEC-030. The default mode on a fresh install shall be `Ptt`; the user-selected mode shall be persisted per identity where the selected platform supports it. 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 13.0 (Ventura) 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 = 13.0`) and provides explicit cross-platform-baseline coverage parallel to SysRS-286 (iOS) and SysRS-288 (Android). Rationale: macOS 13.0 is the floor that supports the modern CoreAudio / VoiceProcessingIO 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 14 / Sonoma to gain the `kAUVoiceIOProperty_OtherAudioDuckingConfiguration` AudioUnit property) 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 13.0 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`, and platform-scoped `VoiceActivity` 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). | - - -## Baseline Candidate 0.9.12 Update - -| Version | Date | Description | -|---|---|---| -| 0.9.12 | 2026-06-07 | Raised the macOS minimum runtime baseline in `SysRS-310` from macOS 10.15 (Catalina) to macOS 13.0 (Ventura) to match the actual floor encoded in `apps/chanora_flutter/macos/chanora_bridge.podspec` (`MACOSX_DEPLOYMENT_TARGET = 13.0`) and `apps/chanora_flutter/macos/macos_deployment_target.rb`. The previous 10.15 text was a documentation lag; no behavioural change, no DEC-level raise, and the podspec + Xcode project are unchanged. macOS 13.0 is the floor that supports native arm64 Apple Silicon without Rosetta, modern CoreAudio / VoiceProcessingIO surfaces, and the podspec lipo step that produces the universal binary. Strict layered sourcing preserved (`SysDes -> SysRS` only). | 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 a08785a..0000000 --- a/docs/ui-ux/adaptive-layout-platform-guide.md +++ /dev/null @@ -1,27 +0,0 @@ -# Chanora Adaptive Layout and Platform Guide - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Layout Policy - -Chanora prioritizes compact/mobile layout for MVP while preserving a path to medium and expanded layouts. - -| Layout class | Current expectation | -|---|---| -| Compact | Primary supported layout for mobile and narrow windows | -| Medium | Must preserve connection and voice control visibility; side navigation rail remains a P1 gap where not implemented | -| Expanded | Persistent side panes are deferred beyond current candidate | - -## 2. Platform Policy - -| Platform concern | Required behavior | -|---|---| -| Safe areas/system bars | Critical controls remain reachable | -| Android back | Back intent service mediates app behavior | -| iOS gestures/haptics | Platform services handle iOS-specific behavior | -| Desktop PTT | UI displays actual PTT capability level and fallback state | - -## 3. DV Conclusion - -Adaptive layout policy is documented. Medium/expanded hardening remains a tracked post-MVP/P1 gap where not implemented. diff --git a/docs/ui-ux/material3-component-catalog.md b/docs/ui-ux/material3-component-catalog.md deleted file mode 100644 index 8efe3e8..0000000 --- a/docs/ui-ux/material3-component-catalog.md +++ /dev/null @@ -1,38 +0,0 @@ -# Chanora Material 3 Component Catalog - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Component Catalogue - -| Component area | Source files | Purpose | -|---|---|---| -| Connect and bookmarks | `connect_widgets.dart`, `input_dialogs.dart` | Server input, bookmarks, connect actions | -| Channel and client view | `snapshot_view.dart`, `client_info_sheet.dart`, `channel_spacer.dart` | Channel tree, clients, client details | -| Chat | `chat_views.dart`, `bbcode_text.dart` | Channel text and BBCode rendering | -| Voice controls | `voice_bar.dart`, `voice_compact.dart`, `voice_settings*.dart` | Mute, deaf, PTT, levels, processing controls | -| Platform/permission indicators | `permission_state_banner.dart`, `ptt_capability_badge.dart`, `talk_power_warning.dart` | Platform readiness and safety warnings | -| Diagnostics | `audio_debug_stats_panel.dart` and diagnostics surfaces in app shell | Runtime/debug evidence and export support | - -## 2. Acceptance Criteria - -| Component area | DV acceptance criterion | -|---|---| -| Connect and bookmarks | User can enter server details, save/reuse bookmarks, and receive user-safe errors | -| Channel and client view | Channel tree and online clients remain visible after snapshot updates | -| Chat | Channel text renders without corrupting Unicode or unsafe BBCode display | -| Voice controls | Mute, deaf, PTT, metering, and processing controls expose current state clearly | -| Platform/permission indicators | Permission and capability limitations are visible and not color-only | -| Diagnostics | Diagnostic/debug surfaces do not expose unredacted secrets in release evidence | - -## 3. Evidence Required Before Release - -| Evidence | Purpose | -|---|---| -| Flutter widget test run | Confirms component behavior remains stable | -| Accessibility review | Confirms critical states are not color-only and controls are reachable | -| Candidate screenshots or demo notes | Supports DV review and release readiness | - -## 4. DV Conclusion - -The component catalog is sufficient for DV navigation. Final UI audit should attach screenshots or test evidence for each critical component. diff --git a/docs/ui-ux/material3-design-tokens.md b/docs/ui-ux/material3-design-tokens.md deleted file mode 100644 index edc5787..0000000 --- a/docs/ui-ux/material3-design-tokens.md +++ /dev/null @@ -1,21 +0,0 @@ -# Chanora Material 3 Design Tokens - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 - -## 1. Source - -Implementation token source is `apps/chanora_flutter/lib/design/chanora_tokens.dart`. - -## 2. Token Areas - -| Token area | Purpose | -|---|---| -| Color roles | Connection, voice, permission, diagnostic, warning, and neutral states | -| Typography roles | App shell, status, channel/client lists, chat, settings, diagnostics | -| Spacing roles | Compact/mobile layout, control grouping, list density | -| Shape/elevation roles | Material 3 cards, sheets, banners, controls | - -## 3. Verification - -Token usage is verified through Flutter widget tests, visual review, and accessibility checks that critical state is not represented by color alone. diff --git a/docs/ui-ux/material3-guideline.md b/docs/ui-ux/material3-guideline.md deleted file mode 100644 index ccd1f00..0000000 --- a/docs/ui-ux/material3-guideline.md +++ /dev/null @@ -1,8 +0,0 @@ -# Chanora Material 3 Guideline - -**Document status:** DV path record -**Canonical source:** `../material3-guideline.md` - -The current Material 3 guideline lives at `docs/material3-guideline.md`. This file preserves the README-advertised path `docs/ui-ux/material3-guideline.md` for DV navigation. - -Reviewers shall use `docs/material3-guideline.md` as the canonical UI/UX guideline until the migration moves it into `docs/ui-ux/`. diff --git a/docs/verification/swe4-unit-verification-plan.md b/docs/verification/swe4-unit-verification-plan.md deleted file mode 100644 index c27dcc7..0000000 --- a/docs/verification/swe4-unit-verification-plan.md +++ /dev/null @@ -1,60 +0,0 @@ -# SWE.4 Unit Verification Plan - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Scope:** Unit-level verification for Chanora software components - -## 1. Purpose - -This plan defines unit verification coverage for the software modules that implement Chanora behavior. The plan is based on the current repository state and the SRS verification hooks. It is acceptable for DV only when open unit gaps remain visible in the waiver register. - -## 2. Unit Verification Scope - -| Area | Components | Verification method | Current evidence | -|---|---|---|---| -| Rust core orchestration | `core/chanora_core` | Cargo unit tests, integration-oriented crate tests | `cargo test --workspace --locked --no-fail-fast` in CI | -| Protocol adapter | `crates/chanora_protocol` | Protocol DTO and error mapping tests | Workspace tests; protocol compatibility still needs SWE.5/SYS.4 evidence | -| State sync | `crates/chanora_state` | Snapshot, delta, reducer, malformed-event, reconnect, deterministic ordering, unknown-client, and channel-delete/client cleanup unit tests | Local `cargo test -p chanora_state --locked` passes with 27 tests | -| Audio subsystem | `crates/chanora_audio` | DSP, Opus, mixer, gate, PTT logic, baseline examples, benches | Workspace tests and benchmark harnesses; platform loopback evidence is integration/system scope | -| Storage | `crates/chanora_storage` | Bookmark repository, identity store, encryption behavior, keyring-disabled CI mode | Workspace tests with `CHANORA_DISABLE_KEYRING=1` in CI | -| Diagnostics | `crates/chanora_diagnostics` | Redaction, known-secret registry, diagnostic export JSON, log sink | Workspace tests and security audit plan | -| Resolver and prefetch | `crates/chanora_resolver`, `crates/chanora_prefetch`, Flutter prefetch debouncer | Resolver fallback, cache TTL, generation safety, debouncer tests | Workspace tests and `apps/chanora_flutter/test/services/prefetch_debouncer_test.dart` | -| Flutter services | `apps/chanora_flutter/lib/services` | Dart unit tests | Service tests under `apps/chanora_flutter/test/services/` | -| Flutter widgets | `apps/chanora_flutter/lib/widgets` and screen widgets | Widget tests | Widget tests under `apps/chanora_flutter/test/widgets/` | - -## 3. Required CI Commands - -| Command | Owner | Expected use | -|---|---|---| -| `cargo check --workspace --locked` | Software | Rust compile verification | -| `CHANORA_DISABLE_KEYRING=1 cargo test --workspace --locked --no-fail-fast` | Software / QA | Rust unit and crate tests without host keyring dependency | -| `cargo clippy --workspace --all-targets -- -D warnings` | Software | Advisory static analysis in current CI | -| `flutter analyze` in `apps/chanora_flutter` | Software | Dart static analysis | -| `flutter test --exclude-tags e2e` in `apps/chanora_flutter` | Software / QA | Flutter unit and widget tests | - -For local code-change reviews, a Rust change is not complete until `cargo fmt --all`, `cargo check --workspace`, and `cargo test --workspace` have been run fresh and read for failures. Flutter or bridge changes additionally require Flutter analysis/tests. - -## 4. SRS Unit Coverage Focus - -| SRS group | Unit focus | Status for DV | -|---|---|---| -| SRS-036 through SRS-043 | Rust core and state behavior | Reducer unit evidence present; candidate CI/run ID still required for release record | -| SRS-054 through SRS-061 | State sync reducers and replay support | Reducer unit coverage present; standalone event replay support remains P1/not complete | -| SRS-062 through SRS-083 | Audio capture, processing, codec, playback, controls | Partial; unit and benchmark evidence exists, full platform loopback is SWE.5/SYS.4 | -| SRS-084 through SRS-095 | Storage, secure storage, diagnostics | Partial; CI avoids real keyring and must be supplemented by platform audits | -| SRS-165 through SRS-178 | Localization and Unicode handling | Partial; generated localization exists and targeted tests should be reviewed | -| SRS-184 and platform behavior items | App initialization and platform services | Partial; service tests exist for back intent, permissions, bootstrap, and lifecycle | - -## 5. Known SWE.4 Gaps - -| Gap | Impact | Required DV handling | -|---|---|---| -| Standalone event replay tool is not yet complete | Limits P1 replay-based state-sync verification claims | Keep event replay waiver; reducer unit evidence is available | -| Event replay tool not found | P1 verification hook is incomplete | Mark deferred/P1 in SWE.6 and waiver register if discussed | -| Platform keyring behavior not exercised in CI | Secure-storage unit evidence is incomplete for real OS services | Cover through platform audit/SYS.4, not CI-only claims | -| Audio device hot-plug recovery follow-up exists | Limits reliability evidence for SRS-082 | Mark as P1 gap | -| Android runtime smoke cannot run without attached target | Rust unit tests do not exercise Android permission/audio/lifecycle fail-safes | `adb devices -l` must show a device or emulator before Android runtime success can be claimed | - -## 6. SWE.4 DV Decision Rule - -SWE.4 can pass for documentation readiness if all existing unit commands are identified and open unit gaps are listed as limitations. SWE.4 cannot be used to approve public release until required unit evidence is executed on the release candidate and attached to the release-readiness record. 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 be4231e..0000000 --- a/docs/verification/swe5-software-integration-verification-plan.md +++ /dev/null @@ -1,71 +0,0 @@ -# SWE.5 Software Integration Verification Plan - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Scope:** Integration verification across Chanora software components - -## 1. Purpose - -This plan defines how Chanora verifies that independently tested software components work together. It covers the integration paths identified by SRS section 8 and SysDes verification handoff items. - -## 2. Integration Paths - -| Integration path | Covered components | Primary requirements | Evidence method | -|---|---|---|---| -| Flutter to bridge to Rust core | Flutter UI/state, generated FRB bindings, `chanora_bridge`, `chanora_core` | SRS-031 through SRS-035, SRS-103 | Flutter integration tests, Rust bridge tests, manual candidate smoke | -| Core to protocol adapter | `chanora_core`, `chanora_protocol`, `tsclientlib` | SRS-044 through SRS-053, SRS-131, SRS-134 | Protocol integration tests and compatible-server demo | -| Protocol to state | Protocol events, Rust core state handling, `chanora_state`, Flutter snapshot mapper | SRS-054 through SRS-061, SRS-124 | Reducer tests, snapshot mapper tests, reconnect/error tests | -| Audio to platform | `chanora_audio`, OS audio APIs, Flutter voice controls, platform permissions | SRS-062 through SRS-083, SRS-104 through SRS-115, SRS-135 | Audio loopback tests, platform smoke, mobile device tests | -| Storage to platform secure storage | `chanora_storage`, keyring adapters, Flutter bookmark/identity UI | SRS-084 through SRS-095, SRS-126, SRS-137 | Storage tests, platform secure-storage audit | -| Diagnostics export | Diagnostics crate, Flutter diagnostics UI, redaction, share/export surface | SRS-095 through SRS-102, SRS-126, SRS-128 | Redaction tests, diagnostic export review, manual export demo | -| Server resolution prefetch | Flutter host-field debouncer, `chanora_prefetch`, `chanora_resolver`, connect path | Resolver/prefetch design specs and connection requirements | Unit tests, Android connect smoke, manual connect demo | -| Packaging and release build | Flutter build, Rust cdylib/framework/DLL/SO packaging, CI workflows | SRS-116 through SRS-123, SRS-127 | CI build evidence, unsigned iOS build, platform-specific smoke | - -## 3. Required Integration Evidence - -| Evidence | Current state | DV conclusion | -|---|---|---| -| CI Rust workspace test run | Defined in `.github/workflows/ci.yml` | Accept as automated baseline when latest run is attached | -| CI Flutter analyze/test run | Defined in `.github/workflows/ci.yml` | Accept as automated baseline when latest run is attached | -| iOS unsigned release build | Defined in `.github/workflows/ci.yml` and `docs/release/ios-build.md` | Accept for unsigned build verification only | -| Audio benchmark advisory | Defined in `.github/workflows/bench-advisory.yml` | Accept as advisory performance evidence, not a release blocker | -| Windows smoke procedure | Defined in `tools/windows-smoke.md` | Accept only when an executed result is attached | -| Android connect and permission smoke | Referenced by implementation status and tests | Requires executed evidence for release decision | - -## 4. Integration Acceptance Criteria - -An integration path passes when: - -| Criterion | Requirement | -|---|---| -| Buildability | Integrated components compile in CI or on the declared target build host | -| Data contract stability | DTOs and bridge boundaries preserve required fields and error states | -| Error behavior | Integration failures produce user-safe errors, not crashes or secret leakage | -| Platform behavior | Platform-specific permission, audio, and lifecycle behavior matches the target platform policy | -| Evidence attachment | Test logs, CI run IDs, smoke records, or manual demo notes are referenced in the release-readiness record | - -## 5. Known SWE.5 Gaps - -| Gap | Impact | Required DV handling | -|---|---|---| -| Desktop release artifacts are source-buildable only for current candidate | Blocks binary distribution readiness for Windows/macOS/Linux | Release record must state source-build-only scope | -| iOS build is unsigned | Blocks App Store/TestFlight release approval | Release record must state unsigned verification only | -| Android Keystore-backed DEK deferred | Limits secure-storage integration claim on Android | Waiver required for internal testing; public release claim blocked | -| Event replay infrastructure not found | Limits protocol-state integration stress evidence | Mark P1 gap | -| Android target compile/runtime blocked during local review | Missing NDK compiler `aarch64-linux-android-clang` and no attached authorized target block device/emulator verification of Android audio, permission, lifecycle, and storage fail-safe behaviour | Fix/install the NDK toolchain, connect a device/emulator, confirm with `adb devices -l`, then run Android build/install/smoke before claiming Android success | - -## 6. Android Runtime Verification Gate - -Android integration changes require a working Android target toolchain and a connected device or emulator. The minimum local gate is: - -1. The Android NDK compiler needed by the target build, including `aarch64-linux-android-clang` for arm64, is available. -2. `adb devices -l` shows one authorized target. -3. Android app builds for that target. -4. The app installs and launches. -5. Permission, connect-screen, audio-start/stop, and diagnostic-export smoke paths are exercised or explicitly marked not applicable to the change. - -If the NDK compiler is unavailable or no target is connected and authorized, Android verification is blocked rather than passed. - -## 7. SWE.5 DV Decision Rule - -SWE.5 can pass for DV documentation readiness if every integration path has an identified evidence method and every incomplete path has a waiver or follow-up. SWE.5 does not pass for public release until current candidate integration runs are attached to the release-readiness record. diff --git a/docs/verification/swe6-software-verification-plan.md b/docs/verification/swe6-software-verification-plan.md deleted file mode 100644 index 86d04de..0000000 --- a/docs/verification/swe6-software-verification-plan.md +++ /dev/null @@ -1,62 +0,0 @@ -# SWE.6 Software Verification Plan - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Scope:** Integrated software verification against `docs/srs.md` - -## 1. Purpose - -This plan verifies the integrated Chanora software against the SRS. It focuses on SRS-128 and the MVP acceptance requirements inherited from SysRS-241 through SysRS-257. - -## 2. SRS Verification Strategy - -| SRS area | Verification approach | Evidence source | -|---|---|---| -| Software process and traceability | Review and inspection | `docs/srs.md`, `docs/governance/traceability-matrix.md` | -| UI and app shell | Flutter widget/service tests and demo | `apps/chanora_flutter/test/` | -| Bridge and Rust core | Workspace tests and integration smoke | CI Rust job, bridge/core tests | -| Protocol and connection | Protocol integration and compatible-server demo | Protocol tests, manual server demo | -| State sync | Reducer tests, snapshot mapper tests, reconnect/error scenarios, and runtime integration evidence | Rust state tests, Flutter mapper tests, compatible-server runtime evidence | -| Audio | Audio tests, processing tests, benchmark advisory, platform demo | `chanora_audio` tests/benches and manual platform evidence | -| Storage and secure storage | Storage tests and platform secure-storage audit | Rust storage tests, platform audit | -| Diagnostics and redaction | Redaction tests, diagnostic export demo, security review | Diagnostics tests, export review | -| Platform and release | Platform smoke and release build inspection | CI, platform smoke docs, release record | - -## 3. MVP Acceptance Matrix - -| SysRS | Acceptance requirement | SRS coverage | Required evidence | Current DV status | -|---|---|---|---|---| -| SysRS-241 | Connect to TeamSpeak 3-compatible server using `tsclientlib` | SRS-045, SRS-046, SRS-049, SRS-050, SRS-128, SRS-134 | Compatible-server connection demo and protocol integration evidence | Passed with limitation when demo log is attached; not sufficient for public release alone | -| SysRS-242 | Display server channel tree | SRS-019 through SRS-022, SRS-054 through SRS-058, SRS-128 | UI demo, snapshot/state tests | Reducer unit evidence present; candidate UI/demo and runtime reducer-integration evidence must still be attached | -| SysRS-243 | Display online clients | SRS-019 through SRS-022, SRS-054 through SRS-058, SRS-128 | UI demo, snapshot/state tests | Reducer unit evidence present; candidate UI/demo and runtime reducer-integration evidence must still be attached | -| SysRS-244 | Allow user to join a voice channel | SRS-023, SRS-024, SRS-045 through SRS-051, SRS-128 | Channel join demo, error mapper tests | Passed with limitation when candidate demo is attached | -| SysRS-245 | Send voice | SRS-062 through SRS-071, SRS-077, SRS-079, SRS-128 | Audio loopback/platform demo | Partial; platform evidence must be attached | -| SysRS-246 | Receive voice | SRS-071 through SRS-076, SRS-078, SRS-081, SRS-128 | Audio loopback/platform demo | Partial; platform evidence must be attached | -| SysRS-247 | Support microphone mute | SRS-025, SRS-077, SRS-079, SRS-128 | UI/audio gate demo or test | Passed with limitation when candidate demo is attached | -| SysRS-248 | Support output deaf | SRS-025, SRS-078, SRS-128 | UI/audio gate demo or test | Passed with limitation when candidate demo is attached | -| SysRS-249 | Support push-to-talk | SRS-077 through SRS-079, SRS-197 through SRS-200, SRS-128 | PTT backend tests, platform capability evidence | Partial; release record must state platform capability level | -| SysRS-250 | Support Echo Canceller | SRS-064 through SRS-067, SRS-125, SRS-128 | Audio processing test/demo | Partial; attach audio evidence | -| SysRS-251 | Support Automatic Gain Control | SRS-064 through SRS-067, SRS-125, SRS-128 | Audio processing test/demo | Partial; attach audio evidence | -| SysRS-252 | Support Noise Suppression | SRS-064 through SRS-067, SRS-125, SRS-128 | Audio processing test/demo | Partial; attach audio evidence | -| SysRS-253 | Support High-Pass Filter | SRS-064 through SRS-067, SRS-125, SRS-128 | Audio processing test/demo | Partial; attach audio evidence | -| SysRS-254 | Send and receive channel text messages | SRS-019, SRS-036 through SRS-038, SRS-170 through SRS-174, SRS-128 | Chat UI tests and compatible-server demo | Passed with limitation when candidate demo is attached | -| SysRS-255 | Save and reuse server bookmarks | SRS-084 through SRS-089, SRS-128 | Storage tests and UI demo | Passed with limitation when candidate demo is attached | -| SysRS-256 | Use secure storage for sensitive data | SRS-090 through SRS-095, SRS-126, SRS-137 | Security audit and platform storage evidence | Partial; Android Keystore-backed DEK deferred | -| SysRS-257 | Export redacted diagnostic logs | SRS-028, SRS-093 through SRS-102, SRS-126, SRS-128 | Redaction tests and export demo | Passed with limitation when redaction/export evidence is attached | - -## 4. Candidate Software Verification Runs - -For a release decision, the following run records must be attached or linked from `docs/release/release-readiness-go-nogo-record.md`: - -| Run record | Command or method | Required for | -|---|---|---| -| Rust workspace CI | `cargo check --workspace --locked` and `cargo test --workspace --locked --no-fail-fast` | All Rust-backed SRS behavior | -| Flutter CI | `flutter analyze` and `flutter test --exclude-tags e2e` | UI, service, and widget SRS behavior | -| Candidate compatible-server demo | Manual or scripted demo against a controlled TeamSpeak-compatible server | SysRS-241 through SysRS-246, SysRS-254 | -| Candidate audio demo | Manual or scripted loopback/platform run | SysRS-245 through SysRS-253 | -| Candidate diagnostics demo | Export and inspect redacted diagnostic bundle | SysRS-257, SRS-093 through SRS-102 | -| Candidate secure-storage audit | Platform inspection for Windows, macOS, Linux, iOS, Android | SysRS-256, SRS-090 through SRS-095 | - -## 5. SWE.6 DV Decision Rule - -SWE.6 can pass the DV meeting if the acceptance matrix is accepted as the controlling checklist and each partial item is carried into the release-readiness record. SWE.6 cannot approve public release while DEC-012, Android secure-storage limitation, platform signing, and incomplete candidate evidence remain open. 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 791add9..0000000 --- a/docs/verification/sys4-system-integration-verification-plan.md +++ /dev/null @@ -1,58 +0,0 @@ -# SYS.4 System Integration Verification Plan - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Scope:** System integration verification against `docs/sysdes.md` - -## 1. Purpose - -This plan verifies Chanora as an integrated application system, including software, operating-system services, hardware, network dependencies, external compatible servers, diagnostics, and release operations. - -## 2. System Elements Under Verification - -| Element | Integration concern | Verification method | -|---|---|---| -| External TeamSpeak 3-compatible server | Connection, authentication, channel tree, clients, voice, channel text, server permissions | Compatible-server demo and protocol compatibility matrix | -| OS audio services | Capture, playback, route changes, permissions, mobile audio session, foreground behavior | Platform audio tests and manual device smoke | -| Audio hardware | Microphone/headset/speaker availability and failure handling | Platform smoke and user-safe error checks | -| Platform secure storage | Keychain/Credential Manager/Secret Service/mobile key stores and fallback behavior | Platform security audit | -| Network | DNS/SRV/TSDNS resolution, unreachable server behavior, reconnect | Resolver tests and network failure smoke | -| Platform packaging | Android, iOS, Windows, macOS, Linux build and packaging behavior | CI build, unsigned iOS build, platform smoke, release inspection | -| Diagnostics export | User-initiated export and secret redaction | Export demo and security review | -| Public wording | Non-affiliation and compatible-server claims | Legal/trademark review | - -## 3. SysDes Verification Handoff Coverage - -| SysDes item | Handoff | SYS.4 handling | -|---|---|---| -| SysDes-102 | Protocol verification via protocol probe and compatibility matrix | Requires compatible-server evidence and protocol adapter review | -| SysDes-103 | State verification via reducer and event replay tests | Reducer evidence handled in SWE.4/SWE.5; event replay remains P1 gap | -| SysDes-104 | Audio loopback and processing tests | Requires platform audio evidence and processing tests | -| SysDes-105 | Security audit for storage, keys, passwords, validation, redaction | Requires security/privacy/legal gate review | -| SysDes-106 | Deployment package, signing, notarization, app-store build, metadata | Release-readiness record controls final decision | -| SysDes-107 | MVP acceptance verification for SysRS-241 through SysRS-257 | SWE.6 acceptance matrix controls software evidence; SYS.4 adds environment evidence | - -## 4. Platform Matrix - -| Platform | Current candidate status | Required SYS.4 evidence before public/store release | -|---|---|---| -| Android | Implemented features include permissions, foreground service, Oboe audio, MODE_IN_COMMUNICATION; Android Keystore-backed DEK deferred; local target compile/runtime smoke blocked by missing `aarch64-linux-android-clang` and no authorized ADB target | NDK target compilation, `adb devices -l` authorized target evidence, device smoke, permission flow, foreground voice, secure-storage limitation waiver, Play target SDK inspection | -| iOS | Source-buildable and unsigned; AVAudioSession work exists; public artifact not ready | Unsigned build evidence, device audio session smoke, signing/TestFlight evidence before release | -| Windows | Source-buildable; smoke procedure exists | Executed smoke result, PTT capability evidence, packaging/signing evidence before release | -| macOS | Source-buildable; not in current release artifacts | Build evidence, PTT capability evidence, signing/notarization evidence before release | -| Linux | Source-buildable; GlobalShortcuts portal behavior depends on environment | Build/smoke evidence, portal/focused fallback capability evidence, packaging evidence before release | - -## 5. SYS.4 Acceptance Criteria - -| Criterion | Required result | -|---|---| -| External server compatibility | Candidate connects to a controlled compatible server and exercises connection, channel, voice, and text flows | -| Platform behavior transparency | Release notes and UI do not overstate platform PTT, packaging, or secure-storage capabilities | -| Security/privacy/legal readiness | DEC-012 and privacy/security gates are signed off or explicitly block release | -| Release artifact integrity | Build number, commit SHA, tag, artifact hashes, and signing status are recorded | -| Environmental limitations | Source-build-only, unsigned, or platform-specific limitations are listed in release readiness | -| Android runtime claim control | No Android runtime, permission-flow, or audio-lifecycle success is claimed until target compile, install, and device/emulator smoke evidence are attached | - -## 6. SYS.4 DV Decision Rule - -SYS.4 can pass the documentation baseline if system integration responsibilities, platform evidence needs, and release blockers are explicit. SYS.4 cannot pass for public/store release until platform-specific evidence and legal/signing gates are complete. diff --git a/docs/verification/verification-master-plan.md b/docs/verification/verification-master-plan.md deleted file mode 100644 index 4866a85..0000000 --- a/docs/verification/verification-master-plan.md +++ /dev/null @@ -1,91 +0,0 @@ -# Chanora Verification Master Plan - -**Document status:** DV meeting baseline candidate -**Date:** 2026-05-29 -**Applies to:** Chanora Rust workspace `0.2.0-beta.1`, Flutter app `0.3.0+100`, and current DV/release-candidate evidence -**Primary upstream documents:** `docs/sysrs.md`, `docs/sysdes.md`, `docs/srs.md`, `docs/architecture/sad.md`, `docs/architecture/sdd.md`, `docs/implementation-status-2026-05-28.md` - -## 1. Purpose - -This plan defines the verification evidence Chanora must present at the DV meeting. It does not approve release by itself. It gives reviewers a single route from requirements and design baselines to available tests, demos, audits, waivers, and release gates. - -The DV meeting may approve the verification posture for continued internal candidate work if the open gates are accepted as explicit waivers. Public or store release remains blocked until the release-readiness record reaches `Go`. - -## 2. Verification Lifecycle Mapping - -| Lifecycle level | Plan | Primary input | Verification focus | -|---|---|---|---| -| SWE.4 | `docs/verification/swe4-unit-verification-plan.md` | `docs/architecture/sdd.md` module behavior plus current crate and Flutter tests | Unit behavior of reducers, protocol mappers, audio processors, storage, diagnostics, UI services, and utility logic | -| SWE.5 | `docs/verification/swe5-software-integration-verification-plan.md` | `docs/architecture/sad.md` component interfaces and `docs/architecture/sdd.md` module integration hooks | Integration across Flutter, bridge, Rust core, protocol, audio, storage, diagnostics, resolver, and packaging boundaries | -| SWE.6 | `docs/verification/swe6-software-verification-plan.md` | `docs/srs.md` | Integrated software verification against SRS, especially SRS-128 MVP acceptance | -| SYS.4 | `docs/verification/sys4-system-integration-verification-plan.md` | `docs/sysdes.md` and external environment assumptions | System integration with compatible servers, OS services, hardware, network, app stores, diagnostics, and release operations | - -## 3. Verification Policy - -Verification evidence shall be recorded as one of these states: - -| State | Meaning | DV handling | -|---|---|---| -| Passed | Evidence exists and satisfies the stated criterion | Accept as supporting evidence | -| Passed with limitation | Evidence exists, but scope is narrower than final release scope | Accept only with documented limitation | -| Not run | Criterion is defined but no run is recorded for the candidate | Requires waiver or follow-up action | -| Failed | Evidence exists and does not satisfy the criterion | Blocks the covered release scope unless waived by the release owner | -| Deferred | Requirement is intentionally outside current candidate scope | Requires requirement stage or waiver reference | -| Blocked | External decision, platform access, legal sign-off, or environment prevents completion | Requires owner and unblock condition | - -No document in this pack may convert an implementation gap into a pass. Gaps must be represented as `Not run`, `Deferred`, or `Blocked`. - -## 4. Current Evidence Sources - -| Evidence source | Current content | DV use | -|---|---|---| -| `.github/workflows/ci.yml` | Rust workspace check/test, advisory clippy, cargo-deny, cargo-about inventory check, Flutter analyze/test, unsigned iOS release build | Build, unit, static-analysis, supply-chain, Flutter test, and iOS unsigned build evidence | -| `.github/workflows/bench-advisory.yml` | Advisory-only realtime audio benchmark workflow for PR/push events | Performance trend evidence, not a hard quality gate | -| `docs/implementation-status-2026-05-28.md` | Current implementation status, blockers, partial areas, and P1/P2 gaps | Primary readiness and waiver input | -| `apps/chanora_flutter/test/` | Flutter widget/service/e2e-labeled tests | SWE.4/SWE.5/SWE.6 evidence depending on test type | -| Rust crate tests and benches | Workspace tests plus audio benchmark harnesses | SWE.4/SWE.5 performance and component evidence | -| `tools/windows-smoke.md` | Windows source-build smoke procedure | SYS.4/SWE.5 manual platform evidence when executed | -| `docs/release/ios-build.md` | Unsigned iOS verification build note | Release and platform build evidence | - -## 5. Entry Criteria for DV Review - -| Criterion | Status | Evidence | -|---|---|---| -| SysRS baseline available | Met | `docs/sysrs.md` | -| SysDes baseline available | Met | `docs/sysdes.md` | -| SRS baseline available | Met | `docs/srs.md` | -| SAD baseline available | Met | `docs/architecture/sad.md` | -| SDD baseline available | Met | `docs/architecture/sdd.md` | -| Verification plans available | Met by this pack | `docs/verification/` | -| Traceability summary available | Met by this pack | `docs/governance/traceability-matrix.md` | -| Release decision record available | Met by this pack | `docs/release/release-readiness-go-nogo-record.md` | -| Open gates represented as waivers or blockers | Met by this pack | `docs/release/dv-waiver-register.md` | - -## 6. Exit Criteria for DV Meeting - -The DV meeting can pass the documentation baseline if reviewers agree that: - -| Exit criterion | Required result | -|---|---| -| Requirements-to-verification route is reviewable | SysRS/SysDes/SRS items map to verification plans and acceptance evidence | -| MVP acceptance criteria are explicit | SysRS-241 through SysRS-257 appear in SWE.6 with evidence status | -| Verification scope is honest | Known gaps are not marked as passed | -| Waivers are explicit | Each release-affecting gap has owner, impact, mitigation, and unblock condition | -| Release recommendation is clear | Current candidate is not represented as public-release-ready while DEC-012 and other gates remain open | - -## 7. Open Gates Affecting Release - -| Gate | Status | Release impact | Owning document | -|---|---|---|---| -| DEC-012 legal/trademark/OSS sign-off | Blocked / open | Blocks public or store release | `docs/legal/trademark-and-attribution-review.md`, `docs/release/dv-waiver-register.md` | -| Android Keystore-backed DEK | Deferred to v1.1 | Blocks claim that Android secrets use hardware-backed DEK protection | `docs/release/dv-waiver-register.md` | -| Android target compilation and runtime smoke | Blocked locally | Blocks Android runtime, permission-flow, and audio-lifecycle success claims until NDK compiler and authorized target evidence exist | `docs/governance/maintainability-review-2026-06-08.md`, `docs/release/dv-waiver-register.md` | -| Full state reducer test suite | Partial | Blocks full claim for SysRS-235/SysDes-103/SRS-059 through SRS-061 | `docs/release/dv-waiver-register.md` | -| Desktop and iOS release artifacts | Source-buildable / unsigned only | Blocks broad binary distribution claims | `docs/release/release-readiness-go-nogo-record.md` | -| Store signing and notarization | Not complete for candidate | Blocks production release | `docs/release/release-readiness-go-nogo-record.md` | - -## 8. DV Recommendation - -Recommended DV outcome: **Pass documentation baseline with release waivers recorded**. - -This means the project has enough document structure to conduct DV review and continue internal candidate validation, but it does not mean the candidate is approved for public release. The release decision remains **No-Go for public/store release** until legal, signing, platform, and evidence gates are closed or formally waived by the accountable owners.