EdgeMemory-MVP 定稿总纲

硬件 EdgeHippo · 网络 EdgeMesh · 软件 EdgeMemory | v1.0(定稿) | 2026-10-26
本文档是 EdgeMemory 项目 MVP 阶段的唯一权威入口,面向开发团队、测试与项目管理分发。
上游依据:《EdgeMemory 设备端记忆外设 市场与产品战略报告 v1.0》《EdgeMemory-MVP 产品设计与开发任务书 v1.2》《EdgeMemory Studio Web 控制台设计与开发任务书 v1.0》。
本总纲只做三件事:① 锁定命名与范围;② 锁定架构与硬指标;③ 锁定决策与分工。所有实现细节转引分册。

1. 本文档的读法与分发对象

角色必读分册读完应能回答的问题
项目负责人 / PM本总纲 + 06-开发排期与任务分派谁在什么时间交什么;哪个里程碑可以叫停
固件工程师 A(引擎)02-EdgeMemory-固件规格书 第 2–6、9–10 章emlite 的数据布局、事务与 HAL 签名;掉电如何保证
固件工程师 B(接口 / 网络)02- 第 7–8、11 章 + 03-EdgeMesh-网络协议规范USB/WiFi/串口三条通路怎么通;碎片接力消息怎么走
工具链工程师02- 第 5 章(.emf)+ 04-Studio 第 4–5 章.emf 怎么打包;离线向量在哪算
Web 前端工程师04-EdgeMemory-Studio-Web控制台规格五步向导的状态机;P0–P5 Prompt 怎么落地
测试 / QA05-测试与验收计划96 条用例怎么跑;G7 掉电一票否决怎么判
硬件 / 采购01-EdgeHippo-EdgeMesh-硬件规格书分区表改了什么;α 形态的 PHY 冲突何时必须定案
阅读顺序建议:本总纲 → 硬件规格(建立物理边界)→ 固件规格(建立数据边界)→ 网络协议(建立互联边界)→ Studio(建立用户路径)→ 测试计划(建立放行标准)→ 排期(建立时间承诺)。

2. 命名体系(权威定义)

三个名称各管一层,不得混用。此前文档中的「EdgeMemory」「EdgeMemory-MVP」「EdgeMemory Studio」等代号自本版起全部收敛到下表。

层名称英文指代范围反例(禁止)
硬件EdgeHippoEdgeHippo Device 物理设备、模组、Dongle、载板及其 PCB / BOM / 结构件。产品主张:边缘上的另一个你——承载一枚或多枚记忆碎片(.emf)的随身容器 把软件栈叫 EdgeHippo;把协议叫 EdgeHippo;继续使用旧名 EdgeMan(ADR-013 已废止)
网络EdgeMeshEdgeMesh Network 设备间发现、互联、知识库碎片接力、账本同步的协议层。含 BLE / Wi-Fi / UART / USB 四种承载 提「算力共享」「分布式算力」;把单机功能叫 EdgeMesh
软件EdgeMemoryEdgeMemory Stack 设备端固件软件栈(引擎 + 策略 + 运行时)及其配套 PC / Web 工具链 把硬件叫 EdgeMemory;把网络叫 EdgeMemory

2.1 派生命名(开发团队直接使用)

名称类型定义
EdgeMemory Core固件子系统引擎抽象层(HAL)。后端实现二选一:emdb(eXtremeDB)/ emlite(自研)
EdgeMemory Runtime固件子系统策略层:遗忘、去重、冲突消解、时效与优先级
EdgeMemory StudioWeb 应用浏览器端控制台(原代号 EMP Studio)。连接设备、生成知识库、一键烧录
emeCLI 工具PC 端命令行:构建 / 校验 / 烧录 .emf,固件 OTA 与串口刷写,设备体检
.emf文件格式EdgeMemory Fragment —— 知识库碎片包。32 B 文件头 EMKBIMG1
EME-XXXXXX设备 IDEME- + MAC 后 3 字节大写 HEX(例:Dev-B = EME-21E980)。旧前缀 EMGW- 在 MVP 期间仅做兼容识别,不再新发
edgehippom-<board>-<ver>.bin固件产物例 edgehippom-devb-v1.0.0.bin。构建入口仍是 build_board.ps1

2.2 硬件型号体系

型号载体MVP 形态说明
EdgeHippo Dev-AXIAO ESP32-S3 N8R8
(8 MB Flash + 8 MB PSRAM)
γ 磁吸卡形态原型
(form=gamma-card)
MAC 44:BD:8D:71:FA:C8;App 0x300000;LED GPIO21(低电平点亮);容量 稳态 3,300 条(方案 B 后;灌入上限 3,700 条)。
与 Dev-B 同为 EdgeHippo 外设本体,两者对等、无上下级关系,差异仅来自容量与接口
EdgeHippo Dev-BESP32-S3-DevKitC N16R8
(16 MB Flash + 8 MB PSRAM)
β USB Dongle 形态原型
(form=usb-dongle)
MAC 14:C1:9F:21:E9:80;App 0x410000;WS2812 GPIO48;USB-OTG GPIO19/20

2.3 两块板为什么并存(形态与容量,不是角色分工)

本小节回答一个团队必然会追问的问题:「既然两块板都是 EdgeHippo 外设本体,为什么不一块板打天下?」结论见下表,并据此纠正 v1.0 中的一处过时表述。

问题答案依据
① Dev-A 容量够做一台外设吗? 够。方案 B 后 N8R8 稳态容量 3,300 条(灌入上限 3,700 条,占 93.00% 触发淘汰),完全是一台可用外设 对照 S2 场景:一个野外巡检专家包 = 1,800 条,在 Dev-A 上只占一半,还剩一半余量接纳现场新增记录。
⚠️ v1.0 曾写「2,500 条只够装一个人的偏好档案」——那是方案 B 之前的数字,现已作废
② 那为什么还需要两块板? 因为要覆盖两种形态。Dev-A 是 γ 磁吸卡形态原型(BLE),Dev-B 是 β USB Dongle形态原型(USB CDC+MSC)——两者对等、无上下级关系,差异只来自容量与接口 形态直接决定接口与使用场景:γ 走 BLE、贴手机背面;β 走 USB、拖文件即灌库(首个自销 SKU)。容量差同时给出了天然分层:Dev-B 约 12,900 条(门槛 12,000),Dev-A 稳态 3,300 条。没有任何一块板是「上位机」
③ 它真的不可替代吗? 不完全。诚实地讲,PC + Studio 可以顶替它做宿主侧验证——WebUSB / Web Serial / HTTP 三条通路都能调 Dev-B 真正不可替代的只有两件事:
① BLE 直连互联:EdgeMesh 的 M1/M2/M3 碎片接力必须有第二台设备(浏览器没有 BLE Central 到板的能力)
② γ 形态的成本 / 尺寸 / 功耗实测:N8R8 撑不撑得住决定 γ 磁吸卡能不能做出来
④ 资源紧张时可以砍吗? 不建议,但可以降级为 P2 它是 §4.1 中「三条宿主通路」与「碎片接力」两项 MVP 承诺的唯一载体。砍掉 = S2 场景的接力验证与 γ 形态定型同时推迟。优先级:必须先砍别的东西
由此衍生的一个产品结论(建议进入路线图):既然 EdgeHippo 的主张是「边缘上的你」,那么「一次克隆」就应当有不同粒度。两板的容量差恰好给出了天然分层——
· 全量分身 ≈ 12,000 条 → Dev-B / β 形态(一个人的全部:知识 + 履历 + 偏好 + 红线)
· 角色切片 ≈ 3,300 条(稳态) → Dev-A / γ 形态(「工作中的我」「巡检时的我」这类单一身份)
· 偏好档案 ≈ 500 条 → γ 磁吸卡(只带口味与忌讳的最小「你」;与上一档同属 γ 形态,差别在内容粒度而非板级定位)
这与 ADR-013 的「克隆 Clone」支点一致:分身不是复制全盘,而是按需裁剪。

产品形态(MVP 之后,用于定价与路线图,不在 MVP 交付范围内):

形态产品名称接口单位毛利定位
αEdgeHippo α 板载模组UART / SPI¥80B2B 主收入。焊进客户设备,客户主控不改架构即获得记忆能力。α 模组强制保留双槽 OTA(焊死后无救砖通道)
βEdgeHippo β USB DongleUSB CDC + MSC¥327首个自销 SKU,¥399。唯一销量可达且不依赖单一大客户的形态
γEdgeHippo γ 磁吸卡BLE¥692贴手机背面的个人记忆卡。P2
δEdgeHippo δ SD 卡SDIO—期权,不排期

3. 产品定义与三条设计原则

EdgeHippo —— 边缘上的另一个你。

它把一个人(或一台设备)的所知、所好、所忌、所经历,压缩成一枚可携带的记忆碎片(.emf),装进任意宿主。宿主负责思考,EdgeHippo 负责让这次思考有边界、有参考——而且在没有网络的任何环境里都一样成立。

一句话破题:它不提供算力,只提供「我是谁、我记得什么、我不该答什么」。

3.0 名字的三层含义(对外讲述可直接用)

拆解含义它支撑什么
Edge + Me边缘上的「我」品牌主张:一个随身的分身,而不是一台设备
Edge-Me(mory)读作 Edge Memory 的缩略与软件栈 EdgeMemory 天然同源,不用解释第二次;.emf、eme CLI 顺理成章
Me = 最小单位一个人 / 一台设备的最小记忆单元支撑产品机制:碎片可克隆、可分身、可回收——同一枚碎片可灌进多台设备,也可整包撤销

改名沿革:本产品曾用名 EdgeMan(v1.0 定稿)。改名为 EdgeHippo 的原因是——EdgeMan 描述的是「一台硬件」,EdgeHippo 描述的是「一个被安放在边缘的你」。前者是品类词,后者是主张句。硬件名称随之变更为 EdgeHippo,EdgeMesh(网络)与 EdgeMemory(软件)不受影响。

3.0.1 EdgeHippo 的三个工程支点(把主张翻译成规格)

「有边界、有参考」如果不落到字段与接口上,就只是一句广告语。下表左列是用户语言,右列是它在本项目里的实际落点——这是本产品的叙事与技术之间唯一被允许的连接方式。

支点用户语言工程定义已有落点 / 本版变更
① 克隆
Clone
把「我」放到设备上 一个人的知识、偏好、红线、履历被打包成自洽的碎片;同一碎片可灌入任意 EdgeHippo 形成分身;可整包 frag.delete 撤销 落点:em_mem_t.frag_id、.emf 32 B 头 EMKBIMG1、em_frag_* HAL、Studio P0–P5 生成规程(W5-*)
② 边界
Boundary
让思考有边界 不只回答「这像什么」,还要能回答「这不在我的范围内」。三类拒答:红线条目 / 时效过期 / 置信度低于阈值 落点:meta.refusal 红线条目、ttl_h 时效、本版新增 em_query_t.min_score(低于阈值返回空结果而非勉强命中)
③ 参考
Reference
有参考,不是凭空生成 每次返回必须是可被引用的证据:片段 + 出处 + 时间戳 + 置信度,宿主可直接引用,无需黑盒信任 落点:em_hit_t{score, matched_by}、EM_Q_EXPLAIN、meta.src、Studio P4 打进包内的 20 条验收用例
由此产生的一条硬约束,写死不商量:
EdgeHippo 宁可返回「不知道」,也不返回超出其碎片范围的内容。这与云端 RAG 的默认取向相反(云端追求"尽量答")。
工程后果:任何绕过 min_score、或在未命中时返回向量空间内"最接近但不相关"结果的做法,一律视为缺陷——它破坏的正是「有边界」这一产品承诺。

3.1 三条设计原则(所有设计争议的裁决依据)

原则内容它否决了什么
① 不共享算力,只接力知识 设备之间交换的是知识库碎片(.emf)与查询结果,不是计算任务 否决「分布式推理」「算力市场」「任务竞标」。实测:ESP32-S3 跑 2890 万参数模型仅 9.88 tok/s,无交换价值
② 向量离线算,板上只检索 embedding 一律在 PC / Hub / 云端 API 侧算好后灌入;板上只做 ANN 检索与混合过滤,不跑模型 否决「板上做 embedding」「端侧生成」。板上算力留给检索与事务
③ 事务一致优先于峰值召回 宁可召回略低,也不能出现「库打不开 / 索引与数据不一致」。可预测性 > 峰值指标 否决「先写数据、后异步建索引」这类最终一致方案;否决为凑召回率牺牲 P99
原则③的两处权威印证(可直接用于对外沟通):
· Andrei Gorine(McObject CTO):「控制时间比收集每一条数据更重要——在航电场景中,使用过期的传感器数据可能比直接跳过它更危险。」
· eXtremeDB 官方调优白皮书:「为可预测性调优,而非峰值召回(tune for predictability, not peak recall)。」
两句话是同一条原则,也正是判据 G2 中 P99/P50 < 4 的来源。

3.2 一句话区分「记忆」与「硬盘」

硬盘什么都留,记忆会挑。去重(新 Pattern 与已有条目余弦 > 0.95 则合并而非新增)就是 L2 层的容量控制阀——这是「记忆会挑」的工程实现,也是本产品与「一个带检索的 U 盘」的本质区别。

4. MVP 范围:做什么 / 明确不做什么

4.1 MVP 交付(必须完成)

  1. EdgeHippo Dev-B 上跑通完整记忆引擎:12,000 条库可灌入、可检索、可回写
  2. 时序 + ANN 闭环:合成数据源 → 窗口特征化 → 向量检索 → 命中回写 → 下次可命中
  3. 事务一致性:随机掉电 100 次,库 100% 可开(G7,一票否决)
  4. 三条宿主通路:USB(CDC + MSC)、Wi-Fi(HTTP)、串口(行协议)
  5. EdgeMesh 碎片接力:Dev-A ↔ Dev-B 三模式(直连取块 / Hub 中转 / 离线投递)与账本记账
  6. EdgeMemory Studio:连接 → 五步向导生成知识库 → 打包 .emf → 一键烧录
  7. 三场景知识库:S1 工业振动 / S2 野外巡检 / S3 私域知识库,共用同一套固件、同一份 schema、同一个 .emf 格式
  8. 固件与知识库更新:同时支持 USB 串口刷写与 OTA(双槽 + rollback)

4.2 明确不做(写死,避免范围蠕变)

不做原因何时可能做
算力共享 / 分布式推理S3 无可交易算力(9.88 tok/s);跨板拆分实验困惑度从 192 崩到 358永不(方向已废弃)
板上跑模型 / 做 embedding违反原则②;算力留给检索与事务永不(S3 世代)
代币 / 钱包 / 提现银发〔2026〕42 号:RWA 代币化境内严禁,且「提供中介、信息技术服务」被一并点名永不(境内)
摄像头 / 麦克风 / GPS占用大量 RAM 与 Flash,是容量与延迟的主要干扰项。实测裁剪仅省 ≈120 KB,但去掉的是并发与内存峰值压力P2,按形态决定
真实传感器采集MVP 用板内确定性合成数据源(CWRU 风格参数化模型,seed 可控、逐字节可复现)W4-07 真实采集对照,P2
多 Hub 集群 / 广域网MVP 只做单局域网 / 单 HubP2
移动端 AppWeb 优先;γ 形态再评估P2
eXtremeDB 后端落地SDK 未在开发机;emlite 先行。HAL 接口不变,替换不改上层授权到位后 W1-12/W1-13
范围纪律:任何试图加回上表条目的请求,必须走 ADR 变更(新增 ADR 编号 + 更新本表 + 更新排期),不得在实现层静默加入。

5. 系统总架构

┌──────────────────────────────────────────────────────────────────────┐
│  宿主 Host(不属于本项目,但要能接进来)                               │
│  机器人主控 / AGV / 巡检仪 / PC / 手机 App                            │
└───────────────┬──────────────────────────────────────────────────────┘
                │  UART / SPI / USB / Wi-Fi
┌───────────────▼──────────────────────────────────────────────────────┐
│  EdgeMemory Runtime  —— 策略层(软件 · EdgeMemory)                    │
│  遗忘策略 · 去重(L2 余弦>0.95 合并) · 冲突消解 · 时效与优先级 · 拒答话术│
├──────────────────────────────────────────────────────────────────────┤
│  EdgeMemory Core     —— 引擎 HAL(软件 · EdgeMemory)                  │
│  ┌────────────────────────────┬───────────────────────────────────┐  │
│  │ 后端 A: emlite(自研·先行) │ 后端 B: emdb(eXtremeDB·后替换) │  │
│  │ flash-backed HNSW + IVF     │ 原生 ANN + sequence 时序 + ACID   │  │
│  │ 列式时序环 + WAL + CoW      │ Active Replication Fabric         │  │
│  └────────────────────────────┴───────────────────────────────────┘  │
│  统一 HAL:em_open/put/get/query/ts_* /tx_* /sync_*                    │
├──────────────────────────────────────────────────────────────────────┤
│  宿主接口层(软件 · EdgeMemory)                                       │
│  USB CDC+MSC(TinyUSB) │ HTTP+CORS │ 串口行协议 │ CLI                   │
├──────────────────────────────────────────────────────────────────────┤
│  EdgeMesh —— 网络层(局域网 · 发现 / 接力 / 账本)                 │
│  发现 · 目录 · 碎片接力 · 账本记账 · 冲突消解                          │
│  承载:BLE(NimBLE) │ Wi-Fi(HTTP) │ UART1 │ USB MSC(离线投递)        │
└──────────────────────────────────────────────────────────────────────┘
                ▲                                   ▲
                │ .emf 灌入                          │ 生成
┌───────────────┴──────────────┐   ┌────────────────┴─────────────────┐
│  EdgeMemory Studio(Web)     │   │  PC 工具链 eme CLI               │
│  连接→向导→打包→烧录         │   │  离线 embedding / 打包 / 烧录    │
└──────────────────────────────┘   └──────────────────────────────────┘
        (无后端,浏览器直连厂商 API + 直连设备)

5.1 五个分层各自的交付归属

层代码位置负责人关键约束
宿主接口层main/FW-B通用层改动必须两板回归
EdgeMesh 网络能力main/(复用 link_mgr + /api/mesh/*)FW-B语义从「算力竞标」改为「碎片接力」,消息名可保留,字段重定义
策略层 Runtimemain/em_*FW-A不得直接访问 flash;只经 HAL
引擎 Core / HALcomponents/edgehippom/FW-AHAL 接口在 emdb 替换时不得变更
PC / Web 工具tools/ + web/TOOL / WEB.emf 版本兼容:v1 固件可安全跳过 v2 向量段

6. 硬指标总表(Go/No-Go)

判据分两级:G1–G5 是可行性门槛(不过则 MVP 失败);G6–G9 是完整性门槛(不过则不可对外销售)。G7 为一票否决项。

ID维度判据级别用例
G1容量Dev-B(N16R8)≥ 12,000 条(可行性门槛 8,000);Dev-A(N8R8)≥ 2,500 条。条 = int8/384d 向量 + ≤150 B 摘要。库可正常打开并检索门槛TC-N-01
G2延迟12,000 条库上混合查询:P50 < 10 ms,P99 < 30 ms(板侧,不含 USB 往返),且 P99/P50 < 4门槛TC-N-02
G3内存稳态 PSRAM ≤ 5 MB,DRAM ≤ 180 KB;运行期 malloc 调用次数 = 0门槛TC-N-03/04
G4闭环时序 → 特征 → ANN 命中 → 回写新指纹 → 下一次查询可被命中门槛TC-S1-07
G5灌库12,000 条 .emf:HTTP ≤ 60 s|USB bulk ≤ 90 s|串口 921600 ≤ 240 s|MSC ≤ 60 s。四通道分别计,不合并门槛TC-N-05/06
G6断网拔网线 / 关 Wi-Fi 后,本地灌库、检索、回写、接力全部可用;联网后复测全过完整性TC-N-07
G7掉电随机掉电 100 次,库 100% 可开且索引与数据一致 —— 一票否决否决TC-N-08
G8引擎实现emlite:.text ≤ 60 KB;运行期 malloc 0 次;abort P99 ≤ 2 × P50完整性TC-N-11/12
G9网络三节点(Dev-A / Dev-B / Studio)碎片接力可完成;账本双向一致,误差 0完整性TC-M-*
G5 为什么必须分通道:「≤60 s」只对 HTTP 成立。7.9 MB 经串口 921600 理论 86 s,含板端写入实测约 2–4 分钟。不要为了凑 60 s 砍掉串口通路——它是最可靠的;只要进度条清晰、支持断点续传即可。

6.1 派生指标(不判生死,但必须记录)

指标目标用途
首字节启动时间< 800 ms宿主上电后多久可查询
单条写入 P99< 8 ms在线学习能力
compact(碎片整理)耗时< 30 s @ 满库维护窗口
S1 场景 top-1 召回≥ 85%,误报 ≤ 5%合成数据源下;真实数据验证前不得对外宣称
Studio 端到端成功率≥ 95%(首次使用,无引导)决定 β 形态能否自销
ADR-014 拒答正确率TC-C-09…TC-C-12 四条全过不判 MVP 生死,但属 MVP 交付项——它验收的是产品承诺「有边界」,缺了它 EdgeHippo 就退化成一个带检索的 U 盘

7. 架构决策记录 ADR

每条 ADR 记录一个已经做过权衡、不再重新讨论的决策。若要推翻,必须新增一条更新的 ADR 并在本文档留痕。

ID决策依据影响
ADR-001放弃算力共享,改设备端记忆外设S3 实测 2890 万参数 9.88 tok/s;跨板拆分实验困惑度 192→358;DePIN 板块已出清 83%(202 亿→34.6 亿美元)全部叙事、硬件形态、商业模式
ADR-002引擎双后端 HAL,emlite 先行eXtremeDB SDK 不在开发机;不能让商务阻塞开工。HAL 接口不变,替换不改上层授权谈判从「阻塞全部」降级为「性能优化项」
ADR-003分区采用方案 B:app 槽 2 MB × 2固件实测 1.459 MiB;2 MB 槽余量 34–38%;1.5 MB 槽余量仅 1–4%(方案 C 已否决)Dev-B 容量 12,900 条(门槛 12,000)
ADR-004保留 OTA 双槽OTA 只写 app 分区不碰 edgehippom(升级不破坏已灌记忆);现有 ota_mgr.c 已实现双槽 + rollback + 启动自证,保留零工作量、去掉反而要改代码。真实净代价仅 −16%α 形态强制保留(焊死后无救砖通道)
ADR-005MVP 不接传感器,用板内确定性合成源只用基础主板;合成源放板内 → 写入吞吐、窗口特征化、L0 环形覆盖仍是真实的,只有「数据从哪来」是假的真实采集对照 W4-07 移 P2;此前不得宣称 S1 召回率已获真实数据验证
ADR-006L0 原始波形不落 flash,放 PSRAM 环形缓冲10 s @ 4 kHz × 3 轴 int16 = 240 KB;只有判定异常的窗口才转存取证区。flash 放不下 80 分钟原始波形时序区预算可实测回收
ADR-007L2 靠去重收敛(余弦 > 0.95 合并)L2 不能无限生长;去重即容量控制阀「记忆会挑」的工程实现
ADR-008Studio 无后端 Serverless产品卖「私域记忆、数据不出设备」;若灌库过程把内容过一遍我方服务器,卖点自相矛盾,且是竞品最好用的攻击点。附带:零运维、零合规敞口、API Key 不经我方板端须加 CORS + OPTIONS 预检;页面必须 http/localhost
ADR-009USB 通道:WebUSB 优先 / Web Serial 兜底 / esptool-js 救砖浏览器无法访问 USB MSC(虚拟 U 盘是 OS 层概念)。拖 .emf 进虚拟 U 盘是 OS 行为,Web 端只负责生成 + 引导UX 依然成立,但不得当成浏览器功能排期
ADR-010.emf 向量置记录末尾,前后向兼容现有 em_kb_search 是文本/标签匹配(无向量)→ .emf 分 v1 纯文本 / v2 带向量;v1 固件可安全跳过多余字节schema 从第一天预留向量字段
ADR-011EdgeMesh 复用现有骨架、重定义语义固件已有 /api/mesh/{query,bid,request,result,award} 与 mesh.query/mesh.ledger 命令消息名可保留,字段从「算力竞标」改为「碎片接力」
ADR-012积分 = 内部记账配额,非代币银发〔2026〕42 号:RWA 代币化境内严禁,且「提供中介、信息技术服务」被一并点名UI 中禁止出现钱包、币价、提现、收益等词
ADR-013硬件名 EdgeMan → EdgeHippo,定位升维为「边缘上的另一个你」EdgeMan 描述的是「一台设备」(品类词),EdgeHippo 描述的是「一个被安放在边缘的你」(主张句);且读作 Edge-Me(mory) 与软件栈同源。产品承诺从「记得住、查得到」升维为「让思考有边界、有参考」派生一并调整:eme CLI(原 eman)、设备 ID EME-(原 EMAN-)。EdgeMesh / EdgeMemory 不变。对外口径中的所有 EdgeMan 表述即日废止。板级定位(形态标识)见 ADR-018
ADR-014拒答优先于勉强命中:em_query_t.min_score 为强制接口「有边界」是产品承诺而非特性。云端 RAG 追求"尽量答",EdgeHippo 必须能说"这不在我的范围内"。三者构成拒答面:红线(meta.refusal)/ 过期(ttl_h)/ 低置信(min_score)未命中时返回空结果 + 拒因,禁止返回"最接近但不相关"的结果。绕过阈值的实现一律判为缺陷
ADR-015Dev-B 时序区预算由 1.375 MB 压到 0.4375 MB机械理由:按原预算,12,000 条装载后记录区占用 89.8% > 85% 淘汰线 → 策略层随即淘汰 → 稳态仅约 10,022 条 → G1(≥12,000)不达标。压到 0.4375 MB 后占用降至 80.6%,稳态 12,500 条,G1 达标(余量 649 条)代价(定案):L1 保留期由 30 天降至 9.68 天(Dev-B)/ 8.26 天(Dev-A),3 流——此为已批准的时序区扩容后的目标值;扩容实施前的当前实现为 7.56 天,引用时必须注明是哪一个。
本数字为派生量快照,不得在本表硬锁:换算链 = ts_l1_pages ÷ ts_streams × 每页行数 ÷ 1440,行大小/时序区页数/流数任一变动即需重算,权威链见 SPEC.md §2.8。
演进轨迹(留痕,不再据此反复改文档):30 天 → 5.69 天 → 11.33 天(布局优化,8 B 行)→ 10.07 天(一度定案 9 B 行,被 A2 否决)→ 11.33 天(改回 mark 但沿用 8 B 行)→ 7.56 天(落地:mark 需 4 B,为满足 A2 步长升至 12 B)→ 9.68 / 8.26 天(定案:扩时序区补回,且 rec_cap 零损失)。
三项改动:① L1 行砍掉 rms / p2p(读取时用 p2p = max−min、rms = sqrt(mean²+std²) 现算,EM_AGG_RMS/PP 接口完全不动,属无损压缩);② 行内 minute(4 B)上提至页头;③ 半写行检出采用行尾提交标记 mark(4 B,最后写),判据为「等于固定值」——已用位级撕裂注入实测 100% 检出,不依赖数据取值与端序,无残留风险。
关键推论(请一并引用):PSRAM 上限恒为 12,603 → rec_cap 无论记录区多大都不可能超过 12,600。故记录区只需够到临界点(X ≥ 2,340 页且取整余量 ≥ 30),多给纯属浪费,省下的全给时序区。推论的另一半同样重要:只有记录区被压到 2,340 以下,瓶颈才转移到记录区,此时改记录区才影响 rec_cap;当前稳态 12,633 > 12,603,瓶颈仍在 PSRAM。
最终定案:Dev-B 记录区 2,346 / 时序区 139,Dev-A 619 / 122;rec_cap Dev-B 12,600、Dev-A 3,300,零损失(取整余量 33 条)。G1 余量分别为 600 / 800 条。升级档(默认不启用):Dev-B 2,325 / 160 → L1 11.33 天,但 rec_cap 降至 12,500;仅当 S1/S2 实测确认 L1 需求 > 9.68 天时才切换。代价是 rms 有约 1 LSB 定点量化误差,且每流须占整数页。
回滚条件:W1-14 降维/量化一旦成功,释放的容量优先回划时序区。若 S1/S2 实测需要更长 L1 窗口,须新增 ADR 重新分配
ADR-016emlite 批准新增六个模块:em_core.c(装配体)/ em_pool.c(内存池)/ em_util.c(CRC32 + UTF-8 截断)/ em_tx.c(事务)/ em_mem.c(记录编解码)/ em_wal_rec.c(启动恢复)第 9 章原目录是在实现细节未知时写的。实现倒逼出三个真实模块:装配体塞进 em_wal.c 会造成「事务 + API 编排」双职责并突破单文件 300 行;CRC32 / UTF-8 截断必须下沉,因组件不得反向依赖 main(否则板无关性与 PC 单测可编性双重失效);内存池是 malloc-free 约束的落地单元。原则:目录服务于实现,而非让实现迁就目录02 分册第 9 章目录已同步标注【ADR-016 批准新增】。配套依赖铁律:只有 em_store_blk.c 可 include em_flash_io.h 并调用 em_flash_*,其余模块调用一律视为架构违规——破例则 PC 仿真与板端等价性失效。配套流程规则:凡为守住「单文件 ≤ 300 行」而拆分的新文件,无需事前批准,事后回填 SPEC 即可
ADR-017契约单点原则:HAL 契约只能有一份权威定义,且必须在构建期强制撞号事故:QA 侧自抄 EM_ERR_NOT_FOUND = -2,与权威 EM_E_NOMEM = -2 撞号。后果是「内存池耗尽」被静默解释成「条目不存在」——不崩溃、不报编译错,只让异常路径上的断言判错方向。这是测试代码自己造出来的沉默逻辑错误,review 看不出来权威定义固定在 include/edgehippom.h;其他位置(含测试脚手架)必须无条件 include 它,拿不到即编译失败。不得靠 review 或约定维持一致性——凡是能靠人记住的,终将漂移
ADR-018取消网关角色分层,板级定位改用形态标识:两板均为 EdgeHippo 外设本体,对等无层级;板级属性一律用形态(form factor)表达根因是旧架构遗留:上一代 EdgeMemory Gateway 方案把「边缘节点(edge)/ 网关(gateway)」的上下级分层照搬进了新方案,但新方案的本体是外设记忆体——Dev-A 与 Dev-B 只是不同形态(γ 磁吸卡 / β USB Dongle)与不同容量,不存在谁在上、谁在下的关系。「角色」一词会把两台对等外设误读成主机与从机,与「装进任意宿主」的定位直接冲突(见 ADR-001 放弃算力共享、ADR-013 边缘上的另一个你)。板级形态与产品形态矩阵(§2.4 / 01 号分册 §4)本就是两套东西:形态标识只描述这块板长什么样,不描述它在网络里是什么影响面:① 板位映射——Dev-A = γ 磁吸卡形态原型(form=gamma-card,EME-71FAC8,8MB,稳态 3,300 条 / 灌入上限 3,700 条);Dev-B = β USB Dongle 形态原型(form=usb-dongle,EME-21E980,16MB,约 12,900 条,门槛 12,000)。② Kconfig——EMGW_ROLE_EDGE / EMGW_ROLE_GATEWAY 二选一改为 EMGW_FORM_GAMMA_CARD / EMGW_FORM_USB_DONGLE;固件运行时字符串 edge / gateway 改为 gamma-card / usb-dongle。③ 板级命名——文档中不再以 gateway / 网关 / 边缘节点 / HOST 宿主原型 描述板位;EdgeMesh 自身的网络分层协议语义(L2/L3、发现/接力/账本)保留不变,但不得与板级形态混用。④ 设备 ID 前缀统一为 EME-(原 EMAN- 已废止)。本 ADR 不废止 ADR-001..017,只补正板级定位这一层
ADR-019时序窗口为左闭右开 [t0, t1):em_ts_window 与 em_ts_agg 必须用同一套分钟序号判定,含 t0 所属分钟、不含 t1 所属分钟规格(02 分册 §ts.query / §ts.agg)原只给了函数签名,未定义开闭区间,实现选了闭区间并由此产生实测缺陷:按「第 i 分钟」的自然写法查询,逐分钟曲线整体错位一格且相邻窗口重复计入边界行。取证——注入 12 个分钟窗口(第 8 分钟幅值 ×8),逐分钟 rms 实测 111×6, 634, 634, 111×4:第 6 格本应 111 却拿到 634,因其 t1 正落在第 7 分钟起点、闭区间把第 7 分钟那行也算了进去;sqrt((111²+890²)/2)=634 与实测完全吻合,是闭区间的数学确证而非巧合。左闭右开是时序 API 通行约定(相邻窗口不重不漏)。附带的实现铁律:两函数不可一个比微秒、一个比整除分钟——t1 非整分钟时二者会分叉(实测 6/6 全分叉),故统一按 minute = t / EM_TS_MIN_PER_US 的序号比较影响面:① 引擎——em_ts_query.c 两处判定改为 mi >= m1 排除(window 与 agg 逐字一致口径)。② 调用方——逐分钟查询必须写 t1 = 下一分钟起点,CLI ts.agg / ts.window 注释已写明。③ 验收——新增实测脚本 em_scenarios.py 的 S1-08b 会随区间语义回退而变红(正常段 max/mean < 1.5)。④ 规格——02 分册 §ts.query / §ts.agg 条款回填本口径。本 ADR 不废止 ADR-001..018,只补上规格缺口的一层

8. 交付物清单与文档地图

编号分册责任内容
00EdgeMemory-MVP 定稿总纲(本文档)PM命名、范围、架构、硬指标、ADR、分工、排期、风险
01EdgeHippo 硬件规格书硬件双板规格、分区表(可直接替换)、容量账、形态矩阵、引脚分配、PHY 冲突、BOM
02EdgeMemory 固件规格书FW-A分层、双后端 HAL、数据模型、.emf 格式、存储布局、命令集、HTTP API、闭环实现、构建规范
03EdgeMesh 网络协议规范FW-B拓扑、传输矩阵、消息 envelope、六种原语、三种接力模式、账本、安全
04EdgeMemory Studio Web 控制台规格WEB四通道连接、五步向导、P0–P5 Prompt 全文、.emf 打包、烧录通路矩阵
05EdgeMemory-MVP 测试与验收计划QA96 条用例、判据映射、自动化、缺陷分级、放行规则、报告模板
06开发排期与任务分派PM角色 RACI、WBS 全表(101 项)、甘特、关键路径、里程碑
07开发团队启动指南(README.md)PM环境搭建、构建命令、目录结构、第一天任务、每周节奏
上游文档(背景,不必分发给全员):
· 01-产品与战略/EdgeMemory-设备端记忆外设-市场与产品战略报告_v1.0_20261026.html —— 市场验证、竞争定位、单位经济
· 02-工程任务书/EdgeMemory-MVP-产品设计与开发任务书_v1.2_20261026.html —— v1.0→v1.2 的推导过程(容量重算、方案 C 否决依据)
· 04-EdgeMesh-历史方案/ —— 已废弃的算力共享方案,仅供理解 ADR-001

9. 团队角色、分工与协作纪律

9.1 角色定义

代号职责投入交付物
PM架构裁决、范围控制、对外沟通、里程碑放行0.5ADR、排期、验收报告
FW-AEdgeMemory Core(emlite)+ 策略层 + 数据模型 + 事务1.0components/edgehippom/、掉电测试、PC 仿真单测
FW-B宿主接口(USB CDC/MSC、HTTP+CORS、串口)+ OTA + EdgeMesh1.0main/ 接口与协议、两板回归
TOOLeme CLI、.emf 打包器、PC 侧离线 embedding、flash 仿真1.0tools/、.emf 校验器
WEBEdgeMemory Studio 前端1.0web/、向导状态机、Prompt 集成
QA用例执行、自动化、长稳与掉电台架0.5测试报告、缺陷库

9.2 协作纪律(沿用既有约定,违反者一律退回)

  1. 固件分层纪律:通用层(main/ 框架与协议)改动必须两板回归;板级差异一律走 boards/sdkconfig.<board_id> + 分区表 + CONFIG_EMGW_*。禁止跨板拷贝 sdkconfig
  2. 构建唯一入口:build_board.ps1 -Board xiao|devkit|all [-Flash] [-Port]。必须在 PowerShell 显式设 IDF_PATH / IDF_PYTHON_ENV_PATH / IDF_PYTHON_CHECK_CONSTRAINTS=0 + PATH(Git Bash 不支持)。日常增量用 inc_build.sh
  3. 验是否上新板看 sys.info 的 build_time,不要靠 idf.py build 的退出码(build | while read 会吞退出码)
  4. 升级首选 OTA(POST /ota,token emgw-ota-demo),串口只用于首刷与排障。KB 镜像 OTA 用 POST /kbota(?dry=1 预检),改前必 --backup
  5. 行协议 = 单行 JSON {"id":n,"cmd":"name","args":{}}。新增命令必须同步更新 02 号分册第 7 章命令表与 Studio 的协议适配层
  6. 多任务共串口须单锁整行原子写(cmd_console_write + esp_log_set_vprintf)
  7. JSON 缓冲含中文用 ≥768 B;h_index 页面 HTML 约 24 KB
  8. 禁止在 UI / 文档 / 代码注释中出现:钱包、币价、提现、收益、算力共享、代币

10. 排期总览与里程碑

阶段周次目标并行角色出口判据
M0
基线
W1–W2源码树核对、分区表改并整片重烧、USB 复合设备冒烟、CORS 冒烟、性能基线测量FW-A + FW-BCDC+MSC 枚举成功;浏览器可 fetch 到板子;sys.info 报出 11.875 MB
M1
引擎
W3–W8emlite 存储布局 + 事务 + WAL + 掉电保护;PC 仿真单测全绿FW-A + TOOLG7 掉电 100 次全过;G8 三项达标
M2
检索
W6–W11HNSW/IVF 建索引与查询、混合过滤、策略层去重与冲突消解FW-AG1 + G2 + G3 达标
M3
接口
W9–W14USB CDC+MSC 灌库、HTTP+CORS、串口行协议、OTA/KB-OTAFW-B + TOOLG5 四通道达标
M4
闭环
W12–W16合成数据源 → 特征化 → 检索 → 回写FW-A + FW-BG4 达标
M5
网络
W13–W18EdgeMesh 发现、三模式接力、账本FW-BG9 达标
M6
控制台
W3–W20
不依赖 emlite,可最早开工
Studio 五步向导、P0–P5 Prompt、.emf 打包、一键烧录WEB + TOOL端到端成功率 ≥95%
M7
验收
W21–W24三场景灌库 + 全量 96 条用例 + 长稳 7×24 hQA + 全体G1–G9 全过 → Go/No-Go 评审
关键路径:M0 → M1 → M2 → M3 → M4 → M7。
M6(Studio)不在关键路径上——它的 C/D 段(向导 + 打包,35 人日)不依赖 emlite,建议 W3 即开工,比其他路径早约 2 个月拿到可对外演示的东西。

工时口径见 06 号分册:合计 101 项 / 398 人日(×1.3 缓冲 ≈ 517 人日)。按 5 人投入 ≈ 21 周,与上表 W1–W24 吻合。Go/No-Go 最小集:固件侧 152 人日;含 Studio 演示 187 人日。

11. 风险登记册

ID风险等级缓解触发后的动作
R1eXtremeDB 授权条款迟迟不定高双后端 HAL + emlite 先行,授权不再是阻塞项继续 emlite 路线;不对外承诺 emdb 时间表
R2掉电测试不过(G7)高WAL + CoW + 原子提交;PC 仿真可精确控制断电时刻一票否决,回退到纯软件授权路线评估
R3P99 超标(G2)高按白皮书三招:① 离线聚类后按簇顺序落盘(I/O 主导非 CPU)② MCU 级用 IVF+graph 混合 ③ 为可预测性调优而非峰值召回降维 / 量化(W1-14),不是换 MCU
R4容量不足(G1)中三项高杠杆:降维量化 +50~150% > 时序区实测回划 > 分区内动态比例启用 W1-14;不要再压 app 槽(方案 C 已否决)
R5USB-OTG 与 USB-Serial-JTAG 共用内部 PHY中PCB 阶段决定:外部 PHY 或烧 eFuse 切 JTAG事后不可改;MVP 期板 B 常备 USB-UART 转换器,console 改 UART0
R6改分区表后未及时重烧,导致已灌库作废中分区改动排在 W0-05,必须在任何正式灌库之前;先 esptool flash-id 确认容量整片重烧 + 重灌(Dev-B 现网 4343 条须先备份)
R7固件膨胀撑爆 app 槽中W0-06 构建期硬门槛:占用 > 槽×0.8 告警、> 槽×0.9 构建失败重新评估槽大小或裁剪功能
R8栈溢出 / 内存泄漏导致长稳失败中7×24 h 长稳;启动即打 heap 水位基线按已知坑排查:NimBLE host ≥8192;hub_task 6144 内不放大缓冲;大数组改堆
R9CORS / mixed-content 不通,Web 方案地基失效中M0 阶段半天冒烟改走浏览器插件或本地代理;不得为此改回有后端
R10场景缺位(无人真正需要)高M7 前强制绑定单一杀手场景,不许市场部自己挑;自销 SKU 只作定价锚转向 α 模组 B2B,回避 AI 玩具红海
R11S1 召回率被误当作真实数据验证结论外传中合成数据源结论一律标注「合成」;W4-07 真实对照未完成前不得宣称立即更正对外口径
R12合规越线(UI 出现币价 / 提现 / 钱包)高ADR-012 写入 UI review checklist;发布前逐屏过一遍立即下线并整改

12. 对外沟通口径(可说 / 不可说)

✅ 可说❌ 不可说
  • 产品一句话:EdgeHippo —— 边缘上的另一个你(ADR-013)
  • 「把你所知、所好、所忌、所经历压缩成一枚可携带的碎片,让思考有边界、有参考」
  • 它不提供算力,只提供「我是谁、我记得什么、我不该答什么」
  • 设备端记忆外设:给设备用的记忆模块
  • 断网可用、事务一致、混合查询(向量 + 时序 + 结构化过滤)
  • MCU 级(ESP32-S3)上跑的万条级知识库
  • 知识库碎片可跨设备接力、可克隆可分身;宿主不改架构即可获得记忆
  • 数据不出设备,本地检索
  • 未命中时明确返回「不在范围内」并给出拒因(ADR-014,可说且建议说——这是差异化卖点)
  • 容量:Dev-B 万条级(具体数字以实测为准,未测前说「万条级」)
  • 算力共享 / 分布式推理 / 算力市场(ADR-001 已废弃)
  • 代币、钱包、币价、提现、收益、挖矿(ADR-012 红线)
  • 板上跑模型、端侧生成、端侧 embedding(违反原则②)
  • 旧名 EdgeMan(ADR-013 已废止,含 PPT / 名片 / 域名 / UI 文案中的一切残留)
  • 把 EdgeHippo 描述成「一个小硬盘」「一个离线 ChatGPT」「一个人格备份」——都不是。它记,但不思考;它有边界,不是全知
  • 「S1 场景 85% 召回率已获真实数据验证」(R11,合成源结论)
  • 任何未经实测的容量 / 延迟数字
  • 与 DePIN 项目(io.net / Render / Aethir 等)的类比

13. 开工前必须完成的 7 件事

#事项负责耗时说明
1核对源码树(emgw-tools.cmd status + 备份区比对)FW-B0.5 d确认 main/ 的 14 个 .c 与 boards/ 配置是唯一真源,避免在两个副本间反复横跳
2改分区表 + 整片重烧(方案 B)FW-A0.5 d两行 CSV,+61% 容量。必须排在正式灌库之前;Dev-B 现网 4343 条先备份
3跑 USB 复合设备冒烟(官方 tusb_composite_msc_serialdevice 示例移植)FW-B2 d风险最低、信心价值最高。「拖文件即灌库」一旦跑通,整个产品说服力立刻成立
4跑 CORS 冒烟(板端加 OPTIONS 预检后浏览器 fetch)WEB0.5 d整个 Web 方案的地基,不通则一切无从谈起
5测性能基线(PSRAM 可用量 / 4 KB 页读延迟 / 1 MB 顺序写耗时)FW-A0.5 d把所有「推算」标注换成实测起点
6向 McObject 发书面询问:MCU 端分发授权条款 + eXtremeDB 9.0 三项能力是否在授权内PM0.5 d零成本。手上先有实测数据,谈价地位完全不同
7Studio 向导 + 打包(WP7-C/D)开工WEB + TOOL—不依赖 emlite,可立即开始
第 2 项不可逆:app 槽变小 → app1 结束地址前移 → edgehippom 起始偏移改变 → 已灌入的记忆全部作废。分区不能向后增长,所以「先用别的方案、不够再改」不是免费选项。