LoadLynx
LoadLynx 是 STM32G431 + ESP32-S3 便携式电子负载。README.md 明确采用分体式架构:STM32G431 执行快速电流/功率闭环与保护,ESP32-S3 负责 UI/Wi-Fi/OTA/记录/标定及上位机桥接。这是典型 device mono-repo,不能只从一个 firmware 目录理解。
- Device mono-repo
- Embedded Rust
- STM32 firmware
- ESP32 firmware
- Async embedded
- TypeScript web
- React app
- Storybook component QA
- Playwright e2e
- Web demo
- UI version display
- Release failure notification
- MCU flashing integration
- Embedded device control plane
目录
技术栈
运行与交付
- CI 工作流
- check.yml
- dev-release.yml
- digital-check.yml
- notify-release-failure.yml
- release.yml
- web-check.yml
- web-pages.yml
- 能力标记
- github_actions
- package_json
- package_lock
依赖与工具
- package.json
- 开发依赖
- @commitlint/cli
- @commitlint/config-conventional
- commitlint-plugin-function-rules
- 项目脚本
- commitlint
配置与质量
- 配置文件
- .env.example
- .gitignore
- .gitmodules
- lefthook.yml
- package-lock.json
- package.json
{
"ci_workflows": [
"check.yml",
"dev-release.yml",
"digital-check.yml",
"notify-release-failure.yml",
"release.yml",
"web-check.yml",
"web-pages.yml"
],
"configs_root": [
".env.example",
".gitignore",
".gitmodules",
"lefthook.yml",
"package-lock.json",
"package.json"
],
"markers_present": [
"github_actions",
"package_json",
"package_lock"
],
"package_json": {
"deps_dev": [
"@commitlint/cli",
"@commitlint/config-conventional",
"commitlint-plugin-function-rules"
],
"scripts": [
"commitlint"
]
}
}Purpose
LoadLynx 是 STM32G431 + ESP32-S3 便携式电子负载。README.md 明确采用分体式架构:STM32G431 执行快速电流/功率闭环与保护,ESP32-S3 负责 UI/Wi-Fi/OTA/记录/标定及上位机桥接。这是典型 device mono-repo,不能只从一个 firmware 目录理解。
Taxonomy
- Tags: Device mono-repo, Embedded Rust, STM32 firmware, ESP32 firmware, Async embedded, TypeScript web, React app, Storybook component QA, Playwright e2e, Web demo, UI version display, Release failure notification, MCU flashing integration, Embedded device control plane
- Why / evidence: 这些 tags 来自 checked-out repo 和 catalog record。主要证据包括
README.md、firmware/analog/、firmware/digital/、libs/、web/package.json、web/.storybook/main.ts、.github/workflows/check.yml。Topic token 的大小写以对应技术/工作流的官方写法为准;slug 只作为稳定 ID,不直接充当项目标题。
Repository map
firmware/analog/是 G431 Rust + Embassy 快速闭环侧。firmware/digital/是 ESP32-S3 Rust + esp-hal + Embassy UI/网络/桥接侧。libs/保存共享协议/库,web/是 TypeScript/React UI。
Runtime and delivery
Web 子项目有端口脚本、test:e2e、Storybook、Storybook CI、Biome/typecheck/build 和 version writer。web/README.md 还明确提供 simulation device、mock backend 与生产模式演示开关,说明这个前端除了开发/QA,还承担正式 product surface 的安全演示职责。硬件侧保持 ESP32-S3 与 STM32G431 artifact 及 target 的明确分工。根 package 主要提供 commitlint,说明真正运行入口分布在 firmware/web/scripts。
Architecture notes
架构核心是快控制环与 UI/联网桥的分离。G431 负责 CC/CV、保护、ADC/PID、热传感;S3 负责本地 UI、Web UI、Wi-Fi/OTA、日志和标定。UART 帧/共享协议是两个 MCU 的关键接口,后续 refactor 必须保持协议文档和 firmware 同步。
证据锚点:README.md。
Workflow and quality gates
.github/workflows/check.yml、digital-check.yml、web-check.yml、web-pages.yml、dev-release.yml、release.yml、notify-release-failure.yml 拆分模拟/数字/网页/发布。这个拆分比单一 CI 更适合分体式硬件。
Reusable decisions
- 模拟闭环和数字 UI 分仓内目录,不分仓库,有利于协议同步。
- ESP32-S3 与 STM32G431 的 target 分工明确,适合多 MCU bring-up。
- Web Storybook/e2e 是设备 UI 的早期验证面。
- Web demo 直接复用正式设备页面与状态模型,再用 simulation device / mock backend 提供安全输入,比单独复制一套 demo 页面更稳。
Risks and open questions
- 双 MCU 协议漂移是最大风险。
- 电子负载保护逻辑不能只靠 Web/UI 测试。
- release failure notification 应保留,因为 firmware/web 任一 artifact 失败都会影响使用。
Evidence index
README.mdfirmware/analog/firmware/digital/libs/web/package.jsonweb/README.mdweb/.storybook/main.ts.github/workflows/check.yml.github/workflows/digital-check.yml.github/workflows/web-check.yml.github/workflows/release.yml.github/workflows/notify-release-failure.yml
相关内容
Async embedded
主题Async embedded 表示嵌入式 Rust 代码把 async 当成正式 API surface 或正式 runtime contract 来维护,而不是只在某个样例里顺手用了异步。
Config-driven ops
主题Config-driven ops 表示操作命令、硬件目标、端口、artifact、backend 或运行策略优先通过 checked-in 配置声明,而不是让维护者每次手写临时命令。它适合 MCU flashing、服务端口、部署资源和多 Agent 协作场景。
Device mono-repo
主题Device mono-repo 表示一个仓库同时承载硬件资料、固件、Web/desktop UI、docs/specs、测试工具或发布流程。它强调边界协调:硬件、firmware、UI 和文档互相影响,不应把仓库当作单一应用。 这个 Topic 的核心是设备级知识不能被某一个技术栈吞掉。
Embedded device control plane
主题Embedded device control plane 表示设备把 ESP32-S3 作为正式控制面 MCU,并依赖其板载 USB 与 Wi‑Fi 同时承载本地与局域网控制入口。这里的主语不是“某一种传输协议”,而是 devd、CLI、Web App、可选 desktop/local agent、Web Serial 与 native USB 如何围绕同一设备事实、安全边界、发现机制、连接 ownership 和运行态协议协作。
Embedded Rust
主题Embedded Rust 表示 Rust 代码运行在 MCU、driver、firmware 或硬件 bring-up 环境中,通常涉及 no_std、Embassy、esp-hal、STM32/ESP32、probe-rs、espflash 或 embedded-hal。它不是所有 Rust 项目的泛化标签。
ESP32 firmware
主题ESP32 firmware 表示项目把 ESP32 家族 MCU 作为正式固件目标来维护,并围绕 toolchain、烧录、板级职责、连接能力和与其他 MCU/上位机的分工建立了稳定约定。这里的重点不是“芯片型号”,而是 ESP32 在系统里承担什么角色。 这个 Topic 往往不只是单片机源码。
MCU flashing integration
主题MCU flashing integration 表示项目通过 espflash 管理 ESP32 系列,通过 probe-rs 管理 STM32/其他 probe-supported MCU,并把这些 backend 接入项目配置或明确的本地操作入口。Topic token 使用可复用工程模式命名;espflash 与 probe-rs 作为具体工具名放在定义和证据里。 这个 Topic 关注的是“硬件操作入口可复现且可审计”。
Playwright e2e
主题Playwright e2e 指仓库把真实浏览器里的关键用户流程当成正式质量门禁,而不是“顺手写了几条页面脚本”。它强调的是产品行为验证:路由、认证、交互链路、浏览器 API、嵌入式控制台或多 runtime 页面组合,必须在接近真实使用路径的浏览器环境里被证明可用(projects/blog-26.md、projects/proxy-broker.md、projects/octo-rill.
React app
主题React app 标记 React 是主要用户界面、管理台、控制台或嵌入式操作面 runtime。这里关心的是 route、component tree、client state、表单流、dashboard 交互和前端构建后的真实运行边界,而不是“项目依赖里有 React”。 这个 Topic 用来回答“用户实际操作的是不是一个 React runtime,以及它在系统里承担什么职责”。
Release failure notification
主题Release failure notification 指一个仓库为所有“预期成功但最终以 failure 结束”的交付 workflow 建立显式、可审查的告警路径。范围包括 release、deploy、CI、Docs Pages 和 required gate,但必须由 checked-in allowlist 声明;成功、skipped、cancelled 和通知 workflow 自身不属于通知条件。
STM32 firmware
主题STM32 firmware 表示项目把 STM32 系 MCU 作为正式固件目标来维护,并围绕工具链、.ioc 硬件配置、刷写后端、板级职责和与其他 MCU/外设的分工建立了稳定契约。这里的主语不是“用了 STM32”,而是 STM32 固件在系统中的角色。
Storybook component QA
主题Storybook component QA 表示仓库把 Storybook 当作组件级文档、状态枚举、视觉检查或 interaction smoke 的稳定入口。它不等同于 Storybook accessibility:只有项目明确引入 a11y addon 或等价 Axe sweep 时,才同时打 accessibility Topic。这个拆分用于避免“只要有 Storybook 就叫 a11y”的误判。
TypeScript web
主题TypeScript web 表示项目把 TypeScript 作为一个或多个 Web surface 的主语言,并围绕它建立 workspace scripts、typecheck、bundler、lint/format、env contract 和前端构建门禁。这里的主语不是“仓库里出现了 .ts 文件”,而是 TypeScript 已经决定了维护者怎样启动、构建、校验和交付实际 Web surface。
UI version display
主题UI version display 指产品有意识地把“当前运行的到底是哪一版”暴露给用户或操作者查看,而不是把版本号藏在构建日志或开发者工具里。它通常包含一个稳定的人类可读显示位点,以及一条由运行时或构建链提供的版本真相路径,用于支持排障、远程协作和发布确认(projects/codex-vibe-monitor.md、projects/dockrev.
Web demo
主题Web demo 表示仓库刻意提供一个可直接给 owner、评审者或潜在用户体验的 Web 演示面,而且这个演示面复用正式产品前端与正式路由,而不是单独做一套只用于截图的 demo 页面。它允许用 mock backend、simulation device、read-only seed data 或等价安全输入来稳定复现产品行为,但默认不要求接入真实生产登录、真实后端写路径或真实硬件危险写操作。