Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 28 additions & 2 deletions .github/ISSUE_TEMPLATE/device-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ labels: ["device-compatibility", "needs-triage"]
body:
- type: markdown
attributes:
value: "Do not attach recordings, user content, callsigns, keys or serial numbers."
value: "Read docs/operations/device-acceptance.md first. Do not attach recordings, user content, callsigns, keys, serial numbers, MAC addresses or account names. A schema-valid report is format evidence only, not a support claim."
- type: input
id: app_version
attributes:
Expand All @@ -26,9 +26,35 @@ body:
placeholder: e.g. Acoustic-1 / Balanced
validations:
required: true
- type: input
id: revision_and_fixture
attributes:
label: App revision, fixture and SHA-256
placeholder: e.g. 52a5aa3; acoustic-1-v1-text-balanced.wav; SHA-256
validations:
required: true
- type: textarea
id: reproducible_settings
attributes:
label: Reproducible settings
description: Include source/sink device classes (not serial numbers), OS version, carrier/profile, command or app settings, nominal sample rate and run count.
validations:
required: true
- type: dropdown
id: recording_availability
attributes:
label: Recording availability
options:
- not collected
- private and available on request
- public redacted
- public unrestricted
validations:
required: true
- type: textarea
id: result
attributes:
label: Result and anonymised metrics
label: Result and anonymised totals
description: State accepted, rejected and inconclusive runs. Do not report BER, SNR, range or compatibility without a dedicated reviewed method.
validations:
required: true
7 changes: 7 additions & 0 deletions .github/workflows/site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ jobs:
grep -q 'docs/guides/getting-started_RU.md' site/ru/index.html
grep -q 'README_RU.md' README.md
grep -q 'README.md' README_RU.md
- name: Validate device-acceptance tooling fixtures
run: |
node tools/device-acceptance/validate-report.mjs \
tools/device-acceptance/fixtures/report-template-v1.json
node tools/device-acceptance/test-validator.mjs
- name: Verify English and Russian document pairs
run: |
pairs=(
Expand All @@ -37,6 +42,8 @@ jobs:
"docs/roadmap.md:docs/roadmap_RU.md"
"docs/research/acoustic-1-phy-sources.md:docs/research/acoustic-1-phy-sources_RU.md"
"docs/research/acoustic-2-measurement-sources.md:docs/research/acoustic-2-measurement-sources_RU.md"
"docs/research/device-acceptance-sources.md:docs/research/device-acceptance-sources_RU.md"
"docs/operations/device-acceptance.md:docs/operations/device-acceptance_RU.md"
"spec/protocol-v1.md:spec/protocol-v1_RU.md"
"spec/acoustic-1.md:spec/acoustic-1_RU.md"
"spec/acoustic-2.md:spec/acoustic-2_RU.md"
Expand Down
2 changes: 2 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ This directory holds the human-readable technical documentation for AudioModem.
| Reference | [Platform support](reference/platform-support.md) | [Поддержка платформ](reference/platform-support_RU.md) | Runners versus supported features |
| Reference | [Transmission presets](reference/presets.md) | [Пресеты передачи](reference/presets_RU.md) | Profile identifiers and intent |
| Operations | [Troubleshooting](troubleshooting.md) | [Диагностика](troubleshooting_RU.md) | Reproducible observations and reports |
| Operations | [Device acceptance](operations/device-acceptance.md) | [Приёмка устройств](operations/device-acceptance_RU.md) | Evidence contract and decision gates for future live routes |
| Project | [Roadmap](roadmap.md) | [Дорожная карта](roadmap_RU.md) | Verified work and upcoming milestones |
| Architecture | [Flutter ↔ Rust WAV bridge](architecture/flutter-rust-bridge.md) | [Flutter ↔ Rust WAV bridge на русском](architecture/flutter-rust-bridge_RU.md) | Native facade and in-memory WAV verification boundary |
| Research | [Flutter Rust Bridge integration](research/flutter-rust-bridge-integration.md) | [Flutter Rust Bridge integration на русском](research/flutter-rust-bridge-integration_RU.md) | Generated-code layout and regeneration command |
| Research | [Acoustic-1 PHY sources](research/acoustic-1-phy-sources.md) | [Источники Acoustic-1 PHY](research/acoustic-1-phy-sources_RU.md) | Design sources and explicit receiver/FEC constraints |
| Research | [Acoustic-2 measurement sources](research/acoustic-2-measurement-sources.md) | [Источники измерений Acoustic-2](research/acoustic-2-measurement-sources_RU.md) | Controlled PCM transform and timing-acquisition constraints |
| Research | [Device-acceptance sources](research/device-acceptance-sources.md) | [Источники device acceptance](research/device-acceptance-sources_RU.md) | Reproducible evidence, metadata and privacy constraints |
| Specification | [ADLP v1](../spec/protocol-v1.md) | [ADLP v1 на русском](../spec/protocol-v1_RU.md) | Normative wire object and WAV bootstrap carrier |
| Specification | [Acoustic-1](../spec/acoustic-1.md) | [Acoustic-1 на русском](../spec/acoustic-1_RU.md) | Experimental B-FSK carrier and compatibility boundary |
| Specification | [Acoustic-2](../spec/acoustic-2.md) | [Acoustic-2 на русском](../spec/acoustic-2_RU.md) | Experimental controlled PCM measurement contract |
Expand Down
2 changes: 2 additions & 0 deletions docs/README_RU.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
| Reference | [Platform support](reference/platform-support.md) | [Поддержка платформ](reference/platform-support_RU.md) | Runners и supported features |
| Reference | [Transmission presets](reference/presets.md) | [Пресеты передачи](reference/presets_RU.md) | Profile identifiers и назначение |
| Operations | [Troubleshooting](troubleshooting.md) | [Диагностика](troubleshooting_RU.md) | Воспроизводимые наблюдения и отчёты |
| Operations | [Device acceptance](operations/device-acceptance.md) | [Приёмка устройств](operations/device-acceptance_RU.md) | Evidence contract и decision gates для будущих live routes |
| Project | [Roadmap](roadmap.md) | [Дорожная карта](roadmap_RU.md) | Проверенная работа и ближайшие milestones |
| Architecture | [Flutter ↔ Rust WAV bridge](architecture/flutter-rust-bridge.md) | [Flutter ↔ Rust WAV bridge на русском](architecture/flutter-rust-bridge_RU.md) | Граница native facade и проверки WAV в памяти |
| Research | [Flutter Rust Bridge integration](research/flutter-rust-bridge-integration.md) | [Flutter Rust Bridge integration на русском](research/flutter-rust-bridge-integration_RU.md) | Структура generated code и команда повторной генерации |
| Research | [Acoustic-1 PHY sources](research/acoustic-1-phy-sources.md) | [Источники Acoustic-1 PHY](research/acoustic-1-phy-sources_RU.md) | Источники дизайна и явные receiver/FEC constraints |
| Research | [Acoustic-2 measurement sources](research/acoustic-2-measurement-sources.md) | [Источники измерений Acoustic-2](research/acoustic-2-measurement-sources_RU.md) | Ограничения controlled PCM transforms и timing acquisition |
| Research | [Device-acceptance sources](research/device-acceptance-sources.md) | [Источники device acceptance](research/device-acceptance-sources_RU.md) | Ограничения reproducible evidence, metadata и privacy |
| Specification | [ADLP v1](../spec/protocol-v1.md) | [ADLP v1 на русском](../spec/protocol-v1_RU.md) | Нормативный wire object и WAV bootstrap carrier |
| Specification | [Acoustic-1](../spec/acoustic-1.md) | [Acoustic-1 на русском](../spec/acoustic-1_RU.md) | Экспериментальный B-FSK carrier и граница compatibility |
| Specification | [Acoustic-2](../spec/acoustic-2.md) | [Acoustic-2 на русском](../spec/acoustic-2_RU.md) | Экспериментальный controlled PCM measurement contract |
Expand Down
60 changes: 60 additions & 0 deletions docs/operations/device-acceptance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Device-acceptance protocol

**Status:** Experimental operations contract · **Last reviewed:** 2026-08-20 · **English (canonical)** · [Русский](device-acceptance_RU.md)

This protocol governs future evidence for a live audio route. It does **not** make any platform, device, cable, Bluetooth path, radio interface or Acoustic-1/Acoustic-2 experiment supported. A single report is an observation awaiting review; it is not a performance claim.

> The protocol curates the evidence bundle behind a claim: input artifact, method, environment, outputs and provenance. Structured metadata and provenance are required for independent evaluation, while raw audio is optional because it may be sensitive.[1] [2]

## Report classes

| Report class | What it establishes | What it does not establish |
| --- | --- | --- |
| `template` | The repository has a schema-valid, unexecuted reporting form. | Any device measurement or support claim. |
| `codec_reproduction` | A named WAV fixture and command reproduce a codec result. | A physical audio path. |
| `controlled_pcm` | A declared Acoustic-2 PCM transform produced its specified codec-observable result. | A device, room, SNR, BER or live-route result. |
| `physical_route` | A reviewable run was observed over the named physical route and settings. | Broad compatibility, range, reliability or “supported” status. |

## Required measurement evidence

Only a `measurement` record can contain physical-route evidence. It must identify the app revision, operating system/version, route type, source and sink device classes, selected carrier/profile, fixture path and SHA-256, exact command/settings, run count and accepted/rejected totals. The report schema deliberately excludes callsigns, serial numbers, personal content and raw-audio upload requirements.

The sidecar JSON report is authoritative for configuration metadata. The WAV bytes and their SHA-256 are the primary recording artifact because audio metadata can fail to persist across recording applications.[3]

| Evidence field | Required purpose | Privacy requirement |
| --- | --- | --- |
| App revision and command | Binds behavior to a reviewable implementation and invocation. | Never include credentials or paths containing personal identifiers. |
| Device class and optional public model | Distinguishes broad hardware category from device identity. | Do not record serial numbers, MAC addresses or account names. |
| Carrier, profile, fixture and SHA-256 | Pins the input and protocol interpretation. | Use public fixtures or a hash only. |
| Run totals and outcome class | Makes success, rejection and inconclusive outcomes visible. | Do not convert totals into BER/SNR/range without a dedicated method. |
| Recording availability state | States whether raw evidence can be reviewed. | Use `not_collected`, `private_available_on_request`, `public_redacted` or `public_unrestricted`; never upload sensitive audio by default. |

## Procedure

The contributor starts from a committed fixture and a clean app/CLI revision, records the exact route settings, runs the declared trial count, and preserves output logs plus SHA-256 values. A report may be submitted even when every trial is rejected or inconclusive. It must not omit those outcomes, substitute another fixture, or describe an unexecuted plan as a measurement.

Before opening a compatibility issue, validate the JSON sidecar locally:

```bash
node tools/device-acceptance/validate-report.mjs \
tools/device-acceptance/fixtures/report-template-v1.json
```

The committed fixture above is intentionally an **unexecuted template**, not a device result. A contributor creates a new measurement sidecar only after obtaining real hardware observations.

## Decision gates

| Gate | Required evidence | Permitted label |
| --- | --- | --- |
| Schema gate | Report passes repository validator. | `report format valid` only. |
| Observation gate | A reviewed `physical_route` record has complete fields and no privacy violation. | `observed`, with its exact scope. |
| Candidate-route gate | Repeated real runs, declared device/route settings, fixture hashes, failures and a maintainer review are available. | `experimental route candidate`. |
| Supported-route gate | A separate adapter RFC, reproducible target build, route-specific acceptance tests, published compatibility note and maintainer approval all exist. | `supported` for only the documented scope. |

The schema cannot establish the last three gates by itself. It only prevents incomplete evidence from being mistaken for a measurement. The existing [audio-route boundaries](../guides/audio-routes.md) and [platform matrix](../reference/platform-support.md) remain authoritative for current support status.

## References

[1]: https://pmc.ncbi.nlm.nih.gov/articles/PMC8441584/ "The role of metadata in reproducible computational research"
[2]: https://www.rd-alliance.org/wp-content/uploads/2022/04/1020Things20for20Curating20Reproducible20and20FAIR20Research20v1.1.pdf "10 Things for Curating Reproducible and FAIR Research"
[3]: https://www.weareavp.com/a-study-of-embedded-metadata-support-in-audio-recording-software/ "A Study of Embedded Metadata Support in Audio Recording Software"
62 changes: 62 additions & 0 deletions docs/operations/device-acceptance_RU.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Протокол device acceptance

[English (canonical)](device-acceptance.md) · **Русский перевод**

> **Translation of:** [docs/operations/device-acceptance.md](device-acceptance.md). **Last synced:** 2026-08-20. Английский оригинал определяет contract implementation.

Этот protocol регулирует будущие evidence для live audio route. Он **не** делает supported ни платформу, ни устройство, ни кабель, ни Bluetooth path, ни radio interface, ни Acoustic-1/Acoustic-2 experiment. Один report — observation, ожидающее review, а не performance claim.

> Protocol курирует evidence bundle за claim: input artifact, method, environment, outputs и provenance. Structured metadata и provenance нужны для independent evaluation, тогда как raw audio опционален, поскольку может быть sensitive.[1] [2]

## Классы отчётов

| Report class | Что он устанавливает | Чего он не устанавливает |
| --- | --- | --- |
| `template` | В repository существует schema-valid, unexecuted reporting form. | Любое device measurement или support claim. |
| `codec_reproduction` | Named WAV fixture и command воспроизводят codec result. | Physical audio path. |
| `controlled_pcm` | Declared Acoustic-2 PCM transform дал specified codec-observable result. | Device, room, SNR, BER или live-route result. |
| `physical_route` | Reviewable run наблюдался через named physical route и settings. | Broad compatibility, range, reliability или статус “supported”. |

## Обязательные evidence измерения

Только record класса `measurement` может содержать physical-route evidence. Он обязан указывать app revision, operating system/version, route type, source и sink device classes, selected carrier/profile, fixture path и SHA-256, exact command/settings, run count и accepted/rejected totals. Report schema намеренно исключает callsigns, serial numbers, personal content и обязательную загрузку raw audio.

Sidecar JSON report является авторитетным для configuration metadata. WAV bytes и их SHA-256 — primary recording artifact, поскольку audio metadata может не сохраняться между recording applications.[3]

| Evidence field | Обязательное назначение | Privacy requirement |
| --- | --- | --- |
| App revision и command | Связывает behavior с reviewable implementation и invocation. | Никогда не включайте credentials или paths с personal identifiers. |
| Device class и optional public model | Отличает broad hardware category от device identity. | Не записывайте serial numbers, MAC addresses или account names. |
| Carrier, profile, fixture и SHA-256 | Фиксирует input и protocol interpretation. | Используйте public fixtures или только hash. |
| Run totals и outcome class | Делает success, rejection и inconclusive outcomes видимыми. | Не превращайте totals в BER/SNR/range без отдельной method. |
| Recording availability state | Сообщает, можно ли review raw evidence. | Используйте `not_collected`, `private_available_on_request`, `public_redacted` или `public_unrestricted`; не загружайте sensitive audio по умолчанию. |

## Процедура

Contributor начинает с committed fixture и clean app/CLI revision, записывает exact route settings, выполняет declared trial count и сохраняет output logs вместе с SHA-256 values. Report может быть отправлен, даже если все trials rejected или inconclusive. Он не должен скрывать эти outcomes, подменять fixture или описывать unexecuted plan как measurement.

Перед открытием compatibility issue проверьте JSON sidecar локально:

```bash
node tools/device-acceptance/validate-report.mjs \
tools/device-acceptance/fixtures/report-template-v1.json
```

Committed fixture выше намеренно является **unexecuted template**, а не device result. Новый measurement sidecar создаётся только после получения реальных hardware observations.

## Decision gates

| Gate | Required evidence | Permitted label |
| --- | --- | --- |
| Schema gate | Report проходит repository validator. | Только `report format valid`. |
| Observation gate | Reviewed `physical_route` record имеет complete fields и не нарушает privacy. | `observed` с его exact scope. |
| Candidate-route gate | Доступны repeated real runs, declared device/route settings, fixture hashes, failures и maintainer review. | `experimental route candidate`. |
| Supported-route gate | Существуют separate adapter RFC, reproducible target build, route-specific acceptance tests, published compatibility note и maintainer approval. | `supported` только для documented scope. |

Schema сама по себе не устанавливает последние три gates. Она лишь не даёт принять incomplete evidence за measurement. Текущие статусы остаются в [границах audio routes](../guides/audio-routes_RU.md) и [platform matrix](../reference/platform-support_RU.md).

## Ссылки

[1]: https://pmc.ncbi.nlm.nih.gov/articles/PMC8441584/ "The role of metadata in reproducible computational research"
[2]: https://www.rd-alliance.org/wp-content/uploads/2022/04/1020Things20for20Curating20Reproducible20and20FAIR20Research20v1.1.pdf "10 Things for Curating Reproducible and FAIR Research"
[3]: https://www.weareavp.com/a-study-of-embedded-metadata-support-in-audio-recording-software/ "A Study of Embedded Metadata Support in Audio Recording Software"
Loading
Loading