feat(ft8): add native multistream QSO and WW Digi contest support - #91
Open
boybook wants to merge 23 commits into
Open
feat(ft8): add native multistream QSO and WW Digi contest support#91boybook wants to merge 23 commits into
boybook wants to merge 23 commits into
Conversation
boybook
force-pushed
the
codex/ww-digi-multistream
branch
2 times, most recently
from
August 25, 2026 13:19
729bd4c to
48a7eba
Compare
Owner
Author
|
补充标准频率硬限制(
验证:Core 195/195、Web 565/565、RadioOperatorManager 80/80、TransmissionPipeline 21/21、PhysicalTxCoordinator 28/28;整仓构建 12/12、lint 0 error、i18n 与 diff check 通过。 |
boybook
force-pushed
the
codex/ww-digi-multistream
branch
2 times, most recently
from
August 28, 2026 16:28
37920a6 to
7061dd1
Compare
boybook
force-pushed
the
codex/ww-digi-multistream
branch
from
August 28, 2026 17:38
7061dd1 to
b901452
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
本 PR 原生加入 WW Digi FT4/FT8 比赛模式,并补齐它所依赖的通用基础能力:
本次没有把并行通联做成 WW Digi 的特例。Host 负责 RF 准入、物理帧、混音、持久化和安全边界;插件负责协议状态机、队列策略和比赛语义。
规则与日志格式参考:
设计约束
架构数据流
1. 子流与批量传输模型
Plugin API 与 Contracts
streamId,并以operatorId + streamId组成 Host 内部trackId。StrategyTransmission同时携带子流身份、精确报文和音频中心频率。StrategyDecisionResult.transmissions允许一次决策返回多条报文;旧策略仍可只实现transmission/getTransmitText(),由 Host 映射到default子流。StrategyStreamSnapshot独立投影每条子流的协议状态、目标、网格、频率和 QSO lifecycle epoch。StreamPhysicalReceipt将物理确认按子流返回插件,协议不能仅因“已排队”就推进发射次数。streamId。parallelTargetQueue、queueActivation、manualInitiation和策略级并发上限。Host 原子性
生命周期与目标预约
preserve-distinct持久化策略允许比赛中的重复 QSO 保留为独立记录,不被原有五分钟邻近 QSO 合并逻辑吞并。2. 全局 RF 混音与功率/IMD 边界
FrameAudioRepository和物理帧由 operator 维度扩展到 track 维度,支持一个操作员贡献多条音频波形。0.95,只对整帧做统一线性回退;不使用 limiter、compressor 或逐样本 clipping,以免主动制造互调产物。软件只能约束送入声卡/调制链路的线性 PCM,不能证明真实发射机、ALC、功放和天线系统的 RF IMD 合规。假负载校准向导留作后续工作。
3. 可复用并行 QSO 队列
新增
_shared/parallel-qso,将“队列调度”和“具体通联协议”拆开:ParallelQSOCoordinator管理有版本号的队列、稳定 lane 绑定、补位、重排、删除、清空、checkpoint/restore 和逐流 settlement。ProtocolLane<TData>只负责一个目标的协议状态机、下一条报文、物理回执和 QSO effect。辅助队列迁移
StandardQSOProtocolLane保留标准 TX1 至 TX5 协议语义。queueActivation: immediate保持首个目标可启动空闲操作员的既有体验。WW Digi 差异
queueActivation: operator-toggle:加入目标只排队,不自动打开 TX 开关。manualInitiation: 1:新目标只能由操作员双击/点击加入;requestCall()明确拒绝自动起呼入口。CQ WW <CALL> <GRID>。4. WW Digi 通联协议
专用 lane 支持 WW Digi 四位网格交换,并兼容对端使用标准报告流程的情况。
主动选择 CQ:
人工选择直接来呼:
兼容标准报告路径:
每条 lane 独立维护
wait-r-grid、wait-rr73、wait-standard-final、send-rr73、closing和review:review,不会静默释放目标。no-response,由操作员显式重试并生成新的 authorizationId。5. 应用交互与状态呈现
CQ WW <CALL> <GRID>前端调整:
currentTransmissions投影;显式空数组不会回退到陈旧 TX slot。TX6下拉框;展开区以只读列表展示每路 ID、协议状态、目标、频率和精确文本。6. 通用日志、比赛账本与 Cabrillo
通用 ADIF
CONTEST_ID=WW-DIGI。CONTEST_ID往返。preserve-distinct,确保同波段重复 QSO 保持为独立日志记录。插件比赛账本
CONTEST_ID=WW-DIGI、FT4/FT8、六个比赛波段、有效本机呼号和四位发送网格的记录。degraded;在重新对账成功前禁止下载 Cabrillo,避免输出已知不完整日志。Cabrillo 3.0
.log,采用 CRLF 行尾。CONTEST: WW-DIGI、CATEGORY-MODE: DIGI、band/power/location 等头字段。DG模式和双方四位网格;缺失接收交换写为ZZ00。X-QSO,但 Dupe 不会自动变成 X-QSO。LOCATION默认DX;美加参赛者需要填写有效 section。兼容性与失败安全
defaultstream。<...>防线在完整 transmission set 上继续执行;任何一条非法会拒绝整组。当前边界
CLAIMED-SCORE,最终分数由官方日志检查器计算。SINGLE-OP / ONE / DIGI / FIXED,仅开放 band、power 和 location;尚不支持多人比赛类别。.log文件;它保存可对账账本,并在下载时生成 Cabrillo。Reviewer 导航
packages/plugin-api/src/runtime.ts:多子流 StrategyRuntime 公共契约packages/builtin-plugins/src/_shared/parallel-qso/:可复用并行队列协调器packages/builtin-plugins/src/ww-digi/:比赛协议、运行时、账本、Cabrillo 与面板packages/server/src/plugin/DecisionOrchestrator.ts:决策校验、上限与逐流 settlementpackages/server/src/operator/RadioOperatorManager.ts:批量准入、持久化与失败恢复packages/server/src/transmission/:track-aware 物理帧生命周期packages/server/src/audio/AudioMixer.ts:全局线性功率归一与指标packages/web/src/components/radio/operators/:队列和操作员多流交互验证
yarn build:12/12 workspace tasks 通过yarn workspace @tx5dr/contracts test:125/125yarn workspace @tx5dr/core test:191/191yarn workspace @tx5dr/plugin-api test:53/53yarn workspace @tx5dr/builtin-plugins test:262/262yarn workspace @tx5dr/web test:550/550yarn lint:0 errors;保留 9 个既有 warningsyarn check:i18n:通过git diff --check:通过