Harness
工程护栏与执行环境:定义约束、工具、角色、环境和质量门禁,让失败可见、执行可重复。
可信产品不是单靠生成代码得到的。VLSC 把明确约束、可重复执行环境、嵌套反馈循环和活的设计契约结合起来,让现场证据持续校准架构与交付。
Harness、Loop 与 SDD 不是产品族,而是把现场问题转化为测试增量、可追溯证据、可运行产品和可复用知识的三根协同支柱。
工程护栏与执行环境:定义约束、工具、角色、环境和质量门禁,让失败可见、执行可重复。
工程闭环:让意图经过实现、验证、观测和学习,并运行于每个 FDE 阶段内部。
活的双向契约:连接设计意图、实现事实、证据、偏差、已知问题和可复用决策。
Harness 是让工程活动可约束、可执行、可验证、可重复的完整环境,不只是 AI 编码工具或文档模板。
为什么需要 harness,为什么每一次事故都必须变成一条规则:
千丈之堤,以蝼蚁之穴溃;百尺之室,以突隙之烟焚。
千丈长的大堤,因为一个蚂蚁洞而溃决;百尺高的房子,因为烟囱缝里的一缕火星而被烧毁。
《韩非子·喻老》
外层 Loop 降低产品风险;内层 Loop 让每个增量可实现、可审查、可观测、可修正。
声明意图、约束、接口、验收条件和证据要求,再实现能够推翻假设的最小增量。
使用与主张匹配的验证方法,并审查规格符合性、代码质量、安全边界和事实口径。
收集运行行为、性能和故障,把决策、偏差、证据和已知问题写回活契约。
FDE 的第四项回路实践:支持链对自己迭代。一次 🐞 上报变成带出处的证据、公开的答复、看板卡片,对已排期的 bug,还会变成等待人点头的、经测试的补丁。
| 分类 | 自动动作 | 边界 |
|---|---|---|
| noise——环境 / 误报 / 已修复签名 | 答复用户;看板列「已答复」,终态 | 无代码工作;答复已在公开答复页 |
| bug,可定位的产品缺陷 | 答复用户,并自动排期进无人值守实施队列 | 修它是验证问题,不是产品选择 |
| feature——新能力 / 新参数 | 答复用户;看板列「待决策」 | 排期是产品决策;由操作员决定 |
| need_more_info | 永不闭环,留在待决策 | 未答复的上报不允许假装闭环 |
模型只读;补丁以 unified-diff JSON 契约交付;保护路径(工具护栏 JS、certs/、win/、packaging/、.iss)一律拒绝;单补丁最多 8 个文件;先跑 git apply --check。
补丁只落在从干净 main 工作区新拉出的 fde/<id> 分支。无人值守进程永不触碰 main;合入是人的动作。
全套 unittest 决定:绿则提交到分支(看板记录 branch@hash 与测试结果行);红则删除分支、还原工作区并记录原因。
fde_board.py list|decide|implement。分诊 · 10 分钟 → 答复 · 当天 → 实施 · 小时级(单飞) → 发布 · 天级 → 免疫 · 永久系统的学习速率由「能捕捉每一类事故的最快回路」决定。现场回路补上了最外侧的周期:那些永远不会出现在仓库里的类别,没有声卡的虚拟机、USB 重枚举、macOS 权限弹窗、Gatekeeper。
软件设计文档既指导实现,也由实现校准。规划架构与观测到的成熟度必须显式分开。
系统为何存在、拥有何种边界、哪些质量属性重要,以及为什么选择某种架构。
实际存在什么、如何验证、在哪里运行、发生过什么故障、还有哪些限制。
planned已规划,尚未实现。
implemented已实现,验证范围仍有限。
tested通过明确的自动化或模拟测试。
bench-verified已通过实物台架验证。
field-verified已在目标运行环境现场验证。
released已公开发布或投入生产运行。
deferred已明确延期并保留边界。
known-issue已知问题,绝不表述为完成。
Claim · Source artifact · Version / commit · Environment · Verification method · Result · Limitations · Date缺少这些字段,状态标签就是没有溯源的主张。
Harness 约束执行,Loop 产生证据和反馈,SDD 保存并持续修订共同契约。
只有工具和规则,系统不会学习。
迭代可能很快,但结果不可重复、不可审计。
文档会成为过期预测。
知识停留在个人、终端或聊天记录。
Agent、测试和部署缺乏共享语义与验收标准。
矩阵展示 Engineering System 如何适配每个产品族,不用于产品排名。
| 产品族 | Harness 重点 | Loop 突破 | SDD 作用 | Engineering 证据 |
|---|---|---|---|---|
| MRRC Universal | Hamlib、服务端权威、Web/PWA | 现场网络与状态漂移反馈 | 固化通用电台边界 | 已发布和现场运行证据 |
| MRRC Direct USB | USB、机型后端、客户端安全门禁 | FT-710 垂直验证 → Modern 平台 | 提炼 RadioBackend 与 RadioCapabilities | FT-710:439 项测试;Modern:1897 项测试。实机验收单列;FT710Mobile P0 PTT 仍为已知问题。 |
| SunMRRC | 抓包、DSP、媒体诊断、原生客户端 | 未知协议 → Direct-IQ 产品 | 持续同步协议、媒体和安全契约 | 服务端、Web 与 SunsdrMobile 客户端分别取证 |
| MRRC-FT8 | 时钟、音频、工作流状态、TX 保护 | 现场 QSO 周期驱动状态机演化 | 分离公开发布和 SDD V1.8 现场演进 | 发布证据与后续现场演进不是同一工件 |
| EFHW | 固件、传感器、舵机、RF 台架 | 测量—执行有界搜索 | 区分设计、固件、PCB、台架和现场状态 | V3.0 设计/固件完成;PCB 和台架验证待完成 |
成熟度描述工程体系,不评价产品优劣或团队价值。文档数量和测试数量都不能单独提升等级。
知识存在于个人操作和临时记录。
已经有基础 Harness 和可重复执行路径。
规格、代码、测试、发布和证据能够关联。
主张包含来源、环境、方法、结果和限制。
经过验证的架构、约束和资产可跨产品迁移。
再详细的 SDD 也不能证明硬件行为。
覆盖数量不能证明环境、范围或实机验收。
快速输出仍需规格、质量、安全和溯源门禁。
软件包可以发布,但某个场景或客户端仍可能未经验证。
忽略实现和现场证据的契约会变成虚构。
planned、implemented、tested 和 field-verified 是不同陈述。
项目可以采用不同章节编号;语义职责、生命周期状态和证据字段才是稳定契约。
Claim / 主张:
Source artifact / 来源工件:
Version / commit:
Environment / 环境:
Verification method / 验证方法:
Result / 结果:
Limitations / 限制:
Date / 日期: