让AI具备自主迭代能力的"查-做-测-改-修-记-循环"七阶段技能
> 每一次交互都必须留下痕迹,要么改进代码,要么修复缺陷,要么沉淀知识。循环不停,直到AI限额。
v2.0的循环是"做完就交付"。v3.0的循环是"做完就测试,测试不过就修复,修复完再测,测过就找下一个改进点,永不停歇"。
| 认知 | 说明 |
|---|---|
| ------ | ------ |
| MEMORY.md 是项目的大脑 | AI与项目协作的"工作记忆",记录规则、模式、踩坑点、测试基线,让AI快速进入状态 |
| 不完美的改进胜过完美的计划 | 看到问题就改,持续小改进累积成质变 |
| 零确认执行是效率的基石 | AI独立判断、独立执行、独立修复,用户只验收最终结果 |
| 知识是代码的镜像 | 代码解决"怎么做",知识解决"为什么"和"往哪走",双轨并行 |
| 测试是循环的燃料 | 没有测试,循环没有方向。测试通过→扩展覆盖;测试失败→修复缺陷。测试驱动一切改进 |
任务输入
→ 查:读取 MEMORY.md + 扫描项目上下文 + 扫描知识专栏
→ 做:基于上下文完成任务(代码轨道 + 知识轨道)
→ 测:全链路自动化测试(HTML视觉/DOM/a11y/响应式/性能 + 非HTML结构/逻辑/接口)
→ 改:主动发现并修复问题(代码缺陷 + 知识缺口 + 测试失败)
→ 修:自我修复引擎(诊断→修复→重测→沉淀,直到通过或达到重试上限)
→ 记:将新经验写入 MEMORY.md + 将新洞察写入知识专栏 + 更新测试基线
→ 循环:测试驱动持续循环(通过→扩展覆盖→下一改进点;失败→修复→重测)
→ 直到AI限额
┌──────────────────────────────────────────────────────────┐
│ self-evolving-loop v3.0 │
├──────────────────┬───────────────────┬────────────────────┤
│ 代码轨道 │ 知识轨道 │ 测试轨道 │
│ (Code Track) │ (Knowledge Track) │ (Test Track) │
├──────────────────┼───────────────────┼────────────────────┤
│ 重复代码 → 提取 │ 品牌卡片 → 定位框架 │ 手动验证 → 自动测试 │
│ 配置散落 → 集中 │ 伦理人物 → 决策模型 │ 一次性测试 → 基线回归 │
│ 命名混乱 → 统一 │ 日报文件 → 知识策展 │ 结构校验 → 视觉回归 │
│ 魔法数字 → 常量 │ 信息碎片 → 知识图谱 │ 单点测试 → 全链覆盖 │
│ 硬编码 → 配置化 │ 静态数据 → 动态演进 │ 失败报错 → 自动修复 │
│ 缺错误处理 → 补充 │ 孤立知识 → 跨域关联 │ 修复即止 → 沉淀知识 │
│ 文档缺失 → 补充 │ 浅层描述 → 深度洞察 │ 测完即止 → 持续循环 │
│ 流程繁琐 → 简化 │ 被动积累 → 主动策展 │ 覆盖固定 → 持续扩展 │
└──────────────────┴───────────────────┴────────────────────┘
操作:
MEMORY.md检验标准:
触发条件:项目根目录没有 MEMORY.md
创建内容模板:
# 项目记忆库
## 📋 项目概览
- 项目类型:[前端/后端/全栈/数据分析/脚本工具等]
- 技术栈:[主要语言和框架]
- 架构风格:[MVC/微服务/组件化/函数式等]
- 产物类型:[HTML应用/API服务/CLI工具/库等]
## 📐 开发规范
- 命名规范:[文件/变量/函数/类的命名规则]
- 代码风格:[缩进/引号/分号/换行等约定]
- 目录结构:[标准目录组织方式]
## 🧪 测试基线
### 测试配置
- 测试框架:[Playwright/Jest/Vitest/其他]
- 测试目录:[tests/ 或 __tests__/]
- 基线快照目录:[tests/baselines/]
### 测试覆盖
- HTML产物:[列出需要测试的HTML文件]
- 非HTML产物:[列出需要测试的模块/接口]
- 视觉回归基线:[已建立/未建立]
- a11y基线:[已建立/未建立]
### 已知测试问题
- [问题描述] → [当前状态] → [优先级]
## 🧩 可复用模式
### [模式名称]
- 用途:[一句话说明解决什么问题]
- 代码位置:[文件路径]
- 使用示例:[关键代码片段]
## ⚠️ 踩坑记录
- [问题描述] → [解决方案] → [避免方法]
## 🔧 修复知识库
### [失败模式名称]
- 触发条件:[什么情况下会出现]
- 根因分析:[为什么会失败]
- 修复策略:[怎么修]
- 预防措施:[怎么避免再犯]
- 置信度:[高/中/低]
## 📚 知识专栏状态
### 品牌智识
- 品牌数量:[N]
- 最新演进:[当前阶段]
- 待补充:[缺什么]
### 商业伦理
- 伦理人物数:[N]
- 最新演进:[当前阶段]
- 待补充:[缺什么]
### 日报书架
- 日报文件数:[N]
- 最新演进:[当前阶段]
- 待补充:[缺什么]
## 📝 变更日志
| 日期 | 内容 | 来源任务 |
|------|------|----------|
检验标准:
操作:
检验标准:
操作:
知识专栏/ 目录下各子目录的数据文件检验标准:
执行原则:
三轨执行判定:
| 任务类型 | 执行轨道 | 说明 |
|---|---|---|
| ---------- | ---------- | ------ |
| 纯代码任务 | 代码轨道 + 测试轨道 | 功能开发后必须进入测试 |
| 纯知识任务 | 知识轨道 | 品牌分析、伦理研究、书架策展等 |
| HTML产物任务 | 代码轨道 + 测试轨道(HTML全链路) | 必须执行视觉/DOM/a11y/响应式/性能测试 |
| 代码+知识 | 双轨并行 + 测试轨道 | 新增知识专栏功能、升级知识数据结构等 |
| 代码影响知识 | 代码轨道 + 知识检查 + 测试轨道 | 改了IPC/视图/数据结构时,检查知识数据是否需同步 |
检验标准:
> 这是v3.0的核心新增阶段。没有测试,循环没有方向。测试是自我修复的输入,是持续循环的燃料。
自动识别规则:
| 产物类型 | 识别条件 | 测试策略 |
|---|---|---|
| ---------- | ---------- | ---------- |
| HTML应用 | 项目包含 .html 文件,且是最终产物 | 全链路HTML测试(视觉+DOM+a11y+响应式+性能) |
| Electron应用 | 项目包含 main.js + BrowserWindow | HTML测试 + IPC测试 + 主进程测试 |
| API服务 | 项目包含路由定义(Express/Koa/Fastify等) | 接口测试 + 结构测试 + 性能测试 |
| CLI工具 | 项目入口为命令行脚本 | 命令行测试 + 输出校验 |
| 库/SDK | 项目导出模块供外部使用 | 单元测试 + 接口兼容性测试 |
| 混合项目 | 包含多种产物类型 | 按产物分别选择策略,全部执行 |
> 对HTML产物执行五维自动化测试,确保渲染正确、结构合法、可访问、响应式、性能达标。
测试维度与执行方式:
| 维度 | 测试内容 | 执行工具 | 通过标准 |
|---|---|---|---|
| ------ | ---------- | ---------- | ---------- |
| 视觉回归 | 截图对比,检测像素级差异 | Playwright screenshot + pixelmatch | 差异率 < 0.1%(可配置阈值) |
| DOM结构 | 关键元素存在性、属性正确性、层级关系 | Playwright selectors + 自定义断言 | 所有关键元素存在且属性正确 |
| 可访问性(a11y) | WCAG 2.1 AA级合规检查 | axe-core (via Playwright) | 0个严重/重要违规 |
| 响应式 | 多视口尺寸下布局正确 | Playwright viewport 切换 | 3个断点(移动/平板/桌面)均无布局错乱 |
| 性能 | 加载时间、资源大小、渲染性能 | Playwright performance metrics | LCP < 2.5s, CLS < 0.1, FID < 100ms |
HTML测试执行流程:
1. 启动本地服务器(如未运行)
2. 遍历所有HTML产物文件
3. 对每个HTML文件执行:
a. 视觉回归测试
- 截取全页截图
- 与基线截图对比(首次运行自动建立基线)
- 差异超过阈值 → 标记为失败
b. DOM结构测试
- 检查关键选择器是否存在
- 检查关键属性值是否正确
- 检查无空链接/空图片/空标题
c. a11y测试
- 运行axe-core扫描
- 报告所有violations
- 严重/重要级别 > 0 → 标记为失败
d. 响应式测试
- 375x667 (移动端)
- 768x1024 (平板)
- 1440x900 (桌面)
- 每个断点截图 + 检查布局溢出
e. 性能测试
- 测量LCP/CLS/FID
- 超标 → 标记为失败
4. 汇总测试结果
5. 生成测试报告
HTML测试配置模板(存入 tests/config.json):
{
"htmlTest": {
"enabled": true,
"baseUrl": "http://localhost:3000",
"pages": [
{ "path": "/", "name": "首页", "criticalSelectors": ["header", "main", "footer"] }
],
"visualRegression": {
"enabled": true,
"threshold": 0.001,
"baselinesDir": "tests/baselines/screenshots",
"updateBaselines": false
},
"domValidation": {
"enabled": true,
"checkEmptyLinks": true,
"checkEmptyImages": true,
"checkEmptyHeadings": true
},
"a11y": {
"enabled": true,
"standard": "WCAG2AA",
"ignoreRules": []
},
"responsive": {
"enabled": true,
"viewports": [
{ "name": "mobile", "width": 375, "height": 667 },
{ "name": "tablet", "width": 768, "height": 1024 },
{ "name": "desktop", "width": 1440, "height": 900 }
]
},
"performance": {
"enabled": true,
"thresholds": {
"lcp": 2500,
"cls": 0.1,
"fid": 100
}
}
}
}
| 产物类型 | 测试维度 | 执行方式 | 通过标准 |
|---|---|---|---|
| ---------- | ---------- | ---------- | ---------- |
| API服务 | 接口正确性 | HTTP请求 + 响应断言 | 状态码正确 + 响应体结构正确 + 边界条件通过 |
| API服务 | 接口性能 | 响应时间测量 | P95 < 500ms |
| CLI工具 | 命令执行 | 子进程执行 + 输出校验 | 退出码0 + 输出包含预期内容 |
| 库/SDK | 单元测试 | Jest/Vitest | 覆盖率 > 80% |
| 库/SDK | 接口兼容性 | 导出结构检查 | 公开API无破坏性变更 |
| Electron | IPC通道 | 主进程↔渲染进程通信测试 | 所有IPC通道双向通信正常 |
| 通用 | 文件结构 | 文件存在性 + 目录规范 | 关键文件存在 + 目录结构符合规范 |
| 通用 | 代码质量 | ESLint/类型检查 | 0个error级别问题 |
测试结果分为三级:
| 级别 | 含义 | 后续动作 |
|---|---|---|
| ------ | ------ | ---------- |
| PASS | 测试通过 | 进入Phase 3(改),寻找改进点 |
| SOFT_FAIL | 非关键测试失败(如a11y建议项、性能略超标) | 记录问题,进入Phase 3.5(修),尝试修复 |
| HARD_FAIL | 关键测试失败(如视觉回归严重、DOM关键元素缺失、API返回错误) | 立即进入Phase 3.5(修),强制修复 |
检验标准:
强制检查清单(逐条检查,发现即处理):
| 检查项 | 触发条件 | 处理方式 |
|---|---|---|
| -------- | ---------- | ---------- |
| 重复代码 | 发现相似逻辑出现2次及以上 | 提取为公共函数/工具类 |
| 配置散落 | 同一配置在多处硬编码 | 集中到配置文件/常量定义 |
| 命名混乱 | 命名不符合项目规范或不一致 | 统一为规范命名 |
| 魔法数字/字符串 | 代码中出现未定义的裸数字/字符串 | 提取为命名常量 |
| 硬编码路径 | 路径直接写在代码中 | 改为配置化或参数化 |
| 缺少错误处理 | 关键操作无try-catch或边界检查 | 补充错误处理逻辑 |
| 文档缺失 | 关键函数/接口无注释说明 | 补充文档注释 |
| 流程繁琐 | 手动操作超过3步 | 简化为脚本或命令 |
知识演进检查清单(当任务涉及知识专栏时,逐条检查):
| 检查项 | 触发条件 | 处理方式 |
|---|---|---|
| -------- | ---------- | ---------- |
| 品牌卡片浅层 | 品牌仅有基础信息,缺定位框架 | 补充品牌定位五维模型(见9.1) |
| 伦理人物孤立 | 伦理人物之间无关联 | 补充跨人物伦理脉络(见9.2) |
| 日报无策展 | 日报仅为原始文件,无知识提取 | 触发日报书架策展流程(见9.3) |
| 知识无图谱 | 三个知识域之间无交叉引用 | 建立跨域知识关联(见9.4) |
| 数据结构过时 | 知识数据JSON缺新字段 | 补充字段并迁移旧数据 |
| 知识无版本 | 知识数据无演进追踪 | 添加 version/updatedAt 字段 |
| 洞察无来源 | 知识洞察未标注数据来源 | 补充来源引用和置信度 |
测试改进检查清单(逐条检查,发现即处理):
| 检查项 | 触发条件 | 处理方式 |
|---|---|---|
| -------- | ---------- | ---------- |
| 无测试覆盖 | 新增/修改的代码无对应测试 | 立即补充测试用例 |
| 测试基线缺失 | HTML产物无视觉回归基线 | 首次运行自动建立基线 |
| 测试配置缺失 | 项目无测试配置文件 | 创建 tests/config.json |
| 测试断言不足 | 测试只有"不报错"级别断言 | 补充精确断言(值/结构/行为) |
| 测试未覆盖边界 | 只测了正常路径,未测异常路径 | 补充边界和异常测试 |
| 测试不稳定 | 测试时过时不过(flaky) | 修复或标记为skip并记录原因 |
| 测试性能差 | 测试套件执行时间过长 | 优化测试执行(并行/按需/增量) |
检验标准:
操作:
检验标准:
> 测试失败不是终点,而是修复的起点。AI必须自动诊断、修复、重测,并将修复经验沉淀为知识。
测试失败
→ 诊断:分析失败原因(视觉差异/DOM缺失/a11y违规/性能超标/逻辑错误等)
→ 定位:找到导致失败的代码位置
→ 修复:修改代码/样式/结构
→ 重测:重新运行失败的测试
→ 判断:
- 通过 → 修复成功 → 沉淀修复知识 → 继续
- 仍失败 → 重试(最多3次,每次换不同策略)
- 3次仍失败 → 记录为"无法自动修复" → 标记待人工处理 → 继续下一个问题
诊断策略矩阵:
| 失败类型 | 诊断步骤 | 常见根因 |
|---|---|---|
| ---------- | ---------- | ---------- |
| 视觉回归失败 | 1.对比差异区域截图 2.检查最近CSS/布局变更 3.检查动态内容是否未mock | CSS变更、布局偏移、动态内容、字体加载 |
| DOM结构失败 | 1.检查选择器是否有效 2.检查元素是否被条件渲染隐藏 3.检查最近HTML变更 | 选择器过时、条件渲染、异步加载未等待 |
| a11y失败 | 1.读取axe报告详情 2.定位违规元素 3.检查是否缺少alt/aria/label | 缺少替代文本、ARIA属性错误、焦点管理缺失 |
| 响应式失败 | 1.检查各断点截图 2.定位溢出元素 3.检查媒体查询 | 固定宽度、缺少媒体查询、flex/grid布局问题 |
| 性能失败 | 1.分析性能指标详情 2.定位大资源/慢请求 3.检查渲染阻塞资源 | 大图片未压缩、未懒加载、渲染阻塞JS/CSS |
| API测试失败 | 1.检查请求/响应详情 2.验证数据状态 3.检查接口变更 | 接口变更、数据不一致、权限问题 |
| 逻辑测试失败 | 1.检查断言与实际值 2.追踪代码执行路径 3.检查边界条件 | 逻辑错误、边界未处理、类型不匹配 |
按失败类型的修复策略:
| 失败类型 | 策略1(首选) | 策略2(备选) | 策略3(最后) |
|---|---|---|---|
| ---------- | --------------- | --------------- | --------------- |
| 视觉回归 | 回滚导致差异的CSS变更 | 更新基线(仅当差异是预期变更时) | 调整阈值(仅当差异在可接受范围时) |
| DOM结构 | 修复选择器匹配 | 补充缺失的HTML元素 | 调整测试等待策略 |
| a11y | 补充缺失的alt/aria/label | 修复ARIA属性值 | 重构为语义化HTML |
| 响应式 | 添加/修复媒体查询 | 将固定宽度改为响应式单位 | 调整flex/grid布局 |
| 性能 | 压缩/优化大资源 | 添加懒加载 | 延迟加载非关键资源 |
| API | 修复接口逻辑 | 更新测试数据 | 调整接口契约 |
| 逻辑 | 修复代码逻辑 | 补充边界处理 | 调整断言预期值(仅当预期值有误时) |
第1次修复:
- 使用策略1(首选策略)
- 修复后重测
- 通过 → 沉淀知识 → 结束
- 失败 → 进入第2次
第2次修复:
- 使用策略2(备选策略)
- 从不同角度分析根因
- 修复后重测
- 通过 → 沉淀知识 → 结束
- 失败 → 进入第3次
第3次修复:
- 使用策略3(最后策略)
- 考虑更广泛的上下文
- 修复后重测
- 通过 → 沉淀知识 → 结束
- 失败 → 记录为"无法自动修复" → 标记待人工处理
无法自动修复时:
- 在MEMORY.md的修复知识库中记录完整诊断过程
- 在测试报告中标记为MANUAL_FIX_NEEDED
- 继续处理下一个问题(不阻塞循环)
每次修复成功后,必须将修复经验沉淀到MEMORY.md的修复知识库:
### [失败模式名称]
- 触发条件:[什么情况下会出现]
- 根因分析:[为什么会失败]
- 修复策略:[用了哪个策略,怎么修的]
- 修复耗时:[第几次尝试才成功]
- 预防措施:[怎么避免再犯]
- 置信度:[高/中/低]
- 最后出现:[日期]
修复知识复用规则:
检验标准:
必须更新的章节:
```markdown
| 2026-06-04 | 新增全链路HTML自动化测试 | v3.0升级 |
```
检验标准:
操作:
检验标准:
操作:
检验标准:
交付模板:
✅ 任务结果
[简述完成的核心内容,1-3句话]
🧪 测试结果
- HTML视觉回归:[PASS/SOFT_FAIL/HARD_FAIL] - [详情]
- DOM结构:[PASS/SOFT_FAIL/HARD_FAIL] - [详情]
- a11y:[PASS/SOFT_FAIL/HARD_FAIL] - [详情]
- 响应式:[PASS/SOFT_FAIL/HARD_FAIL] - [详情]
- 性能:[PASS/SOFT_FAIL/HARD_FAIL] - [详情]
- 非HTML测试:[PASS/SOFT_FAIL/HARD_FAIL/N/A] - [详情]
🔧 自主改进(如无则写"无")
- [改了什么] → [为什么改] → [收益]
🩹 自我修复(如无则写"无")
- [失败类型] → [诊断结果] → [修复策略] → [修复结果(第N次成功/失败)]
- [示例:视觉回归失败 → CSS变更导致布局偏移 → 回滚CSS变更 → 第1次修复成功]
📝 新增/更新知识(如无则写"无")
- [知识项名称]:[写入MEMORY.md位置] - [一句话说明]
📚 知识专栏演进(如无则写"无")
- [专栏名]:[演进动作] - [一句话说明]
🔄 循环状态
- 当前轮次:[N]
- 测试通过率:[X/Y]
- 待修复问题:[N个]
- 下一步行动:[扩展测试覆盖 / 修复剩余问题 / 寻找新改进点]
检验标准:
> 这是v3.0的灵魂。循环不停,直到AI限额。每一轮循环都在让项目变得更好。
当前状态:所有测试通过
→ 是否有未覆盖的测试维度?
→ 是 → 扩展测试覆盖(新增测试用例)→ 回到Phase 2.5
→ 否 → 是否有代码轨道改进点?
→ 是 → 执行改进 → 回到Phase 2.5
→ 否 → 是否有知识轨道改进点?
→ 是 → 执行知识演进 → 回到Phase 2.5
→ 否 → 是否有测试轨道改进点?
→ 是 → 优化测试(速度/稳定性/覆盖)→ 回到Phase 2.5
→ 否 → 扫描项目寻找新的改进机会 → 回到Phase 2.5
当前状态:存在测试失败
→ 进入Phase 3.5(自我修复引擎)
→ 修复完成后 → 回到Phase 2.5(重测)
当多个改进方向同时可行时,按以下优先级执行:
| 优先级 | 动作 | 说明 |
|---|---|---|
| -------- | ------ | ------ |
| P0 | 修复HARD_FAIL | 关键测试失败必须立即修复 |
| P1 | 修复SOFT_FAIL | 非关键但值得修复 |
| P2 | 扩展测试覆盖 | 为未覆盖的代码/页面补充测试 |
| P3 | 代码轨道改进 | 重复代码、配置散落等 |
| P4 | 知识轨道改进 | 知识专栏演进 |
| P5 | 测试轨道改进 | 测试速度/稳定性优化 |
| P6 | 主动扫描改进 | 寻找新的改进机会 |
每轮循环必须:
循环终止条件(仅以下情况终止):
循环不终止的情况:
| 策略 | 说明 |
|---|---|
| ------ | ------ |
| 增量测试 | 每轮只运行受影响的测试,而非全量 |
| 智能选择 | 优先选择影响面大、修复成本低的改进点 |
| 批量处理 | 同类问题批量修复,减少测试轮次 |
| 并行执行 | 独立的改进点并行处理 |
| 知识加速 | 优先使用MEMORY.md中的已知修复策略 |
每轮循环输出状态摘要:
🔄 循环 #N
动作:[本轮做了什么]
测试:[通过/总数]
修复:[成功/尝试]
改进:[代码/知识/测试]
耗时:[本轮token消耗估算]
下一步:[下一轮计划]
检验标准:
| 属性 | 说明 |
|---|---|
| ------ | ------ |
| 文件名 | MEMORY.md(必须大写,与README区分) |
| 位置 | 项目根目录 |
| 作用 | AI与项目协作的"工作记忆",记录规则、模式、经验、测试基线、修复知识 |
| 受众 | 主要是AI(辅助人类理解项目约定) |
| 章节 | 用途 | 更新频率 |
|---|---|---|
| ------ | ------ | ---------- |
| 项目概览 | 快速了解项目基本信息 | 低频(项目初期) |
| 开发规范 | 命名、风格、结构约定 | 中频(发现新约定时) |
| 测试基线 | 测试配置、覆盖、已知问题 | 高频(每次测试变更时) |
| 可复用模式 | 沉淀可复用的代码模式 | 高频(每次新增模式) |
| 踩坑记录 | 记录问题和解决方案 | 中频(遇到新坑时) |
| 修复知识库 | 失败模式、根因、修复策略 | 高频(每次修复时) |
| 知识专栏状态 | 追踪三大知识域的演进阶段 | 中频(知识专栏变更时) |
| 变更日志 | 追踪MEMORY.md的更新历史 | 每次必更新 |
| 陷阱 | 表现 | 后果 | 修正 |
|---|---|---|---|
| ------ | ------ | ------ | ------ |
| 忘记查 | 直接开始写代码,不读MEMORY.md | 风格不一致,重复造轮子 | 强制执行Step 1.1 |
| 改得过度 | 为了优化而优化,改动范围过大 | 引入新bug,延误交付 | 改进限于明显问题,大重构单独提出 |
| 记而不精 | MEMORY.md写得很笼统,无实用价值 | AI后续仍无法复用 | 记录具体代码位置和使用示例 |
| 交付格式混乱 | 不按要求格式输出 | 用户难以快速了解改进和沉淀 | 严格使用Phase 5模板 |
| 不敢独立决策 | 频繁询问用户"要不要改" | 协作效率低下,违背零确认原则 | 培养独立判断能力,直接执行 |
| 测试缺位 | 只写代码不测试 | 问题无法被及时发现 | 强制执行Phase 2.5 |
| 修复不沉淀 | 修了但不记录修复经验 | 同类问题反复出现 | 强制执行Step 3.5.5 |
| 循环停滞 | 测试通过后就停止 | 项目未达到最优状态 | 强制执行Phase 6 |
| 修复死循环 | 同一问题反复修复失败 | 浪费token,无进展 | 3次重试上限,标记待人工处理 |
| 知识轨道缺位 | 只关注代码,忽略知识专栏演进 | 知识专栏停留在浅层,无法深化 | 强制执行Step 1.4 + Step 3.2 |
| 知识孤岛 | 三个知识专栏各自独立,无交叉引用 | 知识碎片化,无法形成洞察 | 建立跨域关联(见9.4) |
| 数据结构僵化 | 知识JSON只增不改,字段过时 | 新功能无法基于旧数据工作 | 定期schema升级和数据迁移 |
| 场景 | 适配建议 |
|---|---|
| ------ | ---------- |
| 全新项目 | 第一步先创建MEMORY.md,填写项目概览;第二步创建测试配置 |
| 已有项目首次使用 | 先扫描项目,创建MEMORY.md并填充已有规范;建立测试基线 |
| HTML应用项目 | 重点执行HTML全链路测试(视觉/DOM/a11y/响应式/性能) |
| 非HTML项目 | 按产物类型选择对应测试策略,跳过HTML专项测试 |
| 混合项目 | 按产物分别选择策略,HTML和非HTML测试全部执行 |
| 小型脚本任务 | 简化流程,但MEMORY.md的变更日志仍需更新 |
| 多人协作项目 | MEMORY.md作为团队约定文档,人类也可参考 |
| 长期维护项目 | 重点关注可复用模式、修复知识库和测试基线的积累 |
| 知识专栏升级 | 执行Step 1.4扫描知识专栏,按第九章演进引擎推进 |
| 跨域洞察任务 | 先建立跨域关联(9.4),再基于关联生成洞察 |
每次使用本SKILL后,检查:
> HTML产物是v3.0的重点测试对象。本章节详细定义每个测试维度的执行规范。
| 场景 | 截图方式 | 说明 |
|---|---|---|
| ------ | ---------- | ------ |
| 全页截图 | page.screenshot({ fullPage: true }) | 默认方式,捕获完整页面 |
| 视口截图 | page.screenshot() | 仅捕获当前视口 |
| 元素截图 | element.screenshot() | 针对特定组件 |
| 裁剪对比 | 仅对比关键区域 | 忽略动态内容区域(广告、时间戳等) |
// 差异率计算
const diffRate = diffPixels / totalPixels;
// 判定逻辑
if (diffRate < 0.001) return 'PASS'; // 差异 < 0.1%,通过
if (diffRate < 0.01) return 'SOFT_FAIL'; // 差异 0.1%-1%,软失败
return 'HARD_FAIL'; // 差异 > 1%,硬失败
| 动态内容 | 处理方式 |
|---|---|
| ---------- | ---------- |
| 时间戳/日期 | CSS隐藏或JS替换为固定值 |
| 随机内容 | Mock为固定数据 |
| 动画 | 禁用动画后截图 |
| 第三方嵌入 | 屏蔽或替换为占位符 |
| 用户特定内容 | 使用测试账号登录获取固定内容 |
| 检查项 | 断言方式 | 严重级别 |
|---|---|---|
| -------- | ---------- | ---------- |
| 关键元素存在 | expect(page.locator(selector)).toBeVisible() | HARD |
| 链接有效 | expect(link).not.toHaveAttribute('href', '') | SOFT |
| 图片有alt | expect(img).toHaveAttribute('alt') | SOFT |
| 标题层级正确 | h1唯一,h1→h2→h3不跳级 | SOFT |
| 表单有label | 每个input关联label | HARD |
| 无console错误 | expect(consoleErrors).toHaveLength(0) | SOFT |
优先使用语义选择器,减少因样式变更导致的测试脆弱性:
优先级:role > text > test-id > css > xpath
| 标准 | 级别 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| WCAG 2.1 | AA | 默认标准,覆盖大部分可访问性要求 |
| WCAG 2.1 | AAA | 更严格标准,按需启用 |
| 级别 | 含义 | 处理方式 |
|---|---|---|
| ------ | ------ | ---------- |
| critical | 严重影响残障用户使用 | HARD_FAIL,必须修复 |
| serious | 显著影响使用体验 | HARD_FAIL,必须修复 |
| moderate | 中等影响 | SOFT_FAIL,建议修复 |
| minor | 轻微影响 | SOFT_FAIL,可选修复 |
| 设备 | 视口 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| 移动端 | 375x667 | iPhone SE / 小屏手机 |
| 平板 | 768x1024 | iPad / 平板 |
| 桌面 | 1440x900 | 标准桌面 |
| 大屏 | 1920x1080 | 全高清桌面(可选) |
| 检查项 | 断言方式 |
|---|---|
| -------- | ---------- |
| 无水平溢出 | document.scrollingElement.scrollWidth <= document.documentElement.clientWidth |
| 文字可读 | 字号不小于12px,行高不小于1.2 |
| 触控目标 | 可点击元素最小44x44px |
| 无重叠 | 关键元素不互相遮挡 |
| 指标 | 含义 | 良好 | 需改进 | 差 |
|---|---|---|---|---|
| ------ | ------ | ------ | -------- | ----- |
| LCP | 最大内容绘制 | ≤2.5s | 2.5-4s | >4s |
| CLS | 累积布局偏移 | ≤0.1 | 0.1-0.25 | >0.25 |
| FID | 首次输入延迟 | ≤100ms | 100-300ms | >300ms |
| INP | 交互到下一次绘制 | ≤200ms | 200-500ms | >500ms |
// 使用Playwright测量性能
const metrics = await page.metrics();
const performanceEntries = await page.evaluate(() =>
performance.getEntriesByType('navigation')
);
> 知识专栏不是静态的数据仓库,而是活的认知系统。每一次交互都应该让它更深入、更关联、更有洞察力。
L0 基础卡片 ──→ L1 定位框架 ──→ L2 竞争图谱 ──→ L3 品牌健康 ──→ L4 叙事引擎
| 阶段 | 核心能力 | 数据结构增量 |
|---|---|---|
| ------ | ---------- | ------------- |
| L0 基础卡片 | 品牌基本信息展示 | name, industry, tagline, description, news, socialTrend |
| L1 定位框架 | 品牌战略定位分析 | positioning{identity, values, differentiation, audience, promise} |
| L2 竞争图谱 | 竞品对比与市场定位 | competitors[], marketPosition{quadrant, axis, peers} |
| L3 品牌健康 | 品牌指标监控与预警 | healthMetrics{awareness, loyalty, reputation, momentum, risk} |
| L4 叙事引擎 | 品牌故事生成与传播 | narrative{archetype, storyArc, voiceGuidelines, contentThemes} |
{
"positioning": {
"identity": "品牌身份定义——我们是谁?一句话回答",
"values": ["核心价值观1", "核心价值观2", "核心价值观3"],
"differentiation": "差异化声明——为什么选我们不选别人?",
"audience": {
"primary": "核心目标人群画像",
"secondary": "次级目标人群画像",
"insight": "人群洞察——他们真正在意什么"
},
"promise": "品牌承诺——我们向用户保证什么"
}
}
| 维度 | 评估问题 | 评分范围 |
|---|---|---|
| ------ | ---------- | ---------- |
| 独特性 | 品牌在品类中的差异化程度 | 1-10 |
| 相关性 | 品牌与目标人群需求的契合度 | 1-10 |
| 一致性 | 品牌言行在所有触点的统一度 | 1-10 |
| 活力感 | 品牌在公众认知中的活跃度 | 1-10 |
| 可信度 | 品牌承诺的兑现能力 | 1-10 |
评估输出:
{
"positioningScore": {
"uniqueness": 8,
"relevance": 7,
"consistency": 6,
"vitality": 9,
"credibility": 7,
"overall": 7.4,
"weakDimension": "consistency",
"recommendation": "建议加强品牌言行一致性"
}
}
| 触发条件 | 演进动作 | 产出 |
|---|---|---|
| ---------- | ---------- | ------ |
| 新增品牌 | 创建L0卡片 + 自动生成L1定位框架 | brands.json 新增 positioning 字段 |
| 品牌新闻更新 | 更新news[] + 重新评估活力感评分 | positioningScore.vitality 更新 |
| 跨品牌对比需求 | 触发L2竞争图谱生成 | 新增 competitors[] 和 marketPosition |
| 品牌健康预警 | socialTrend.heat 下降或 risk 出现 | 触发L3健康评估 |
| 品牌内容创作需求 | 触发L4叙事引擎 | 新增 narrative 字段 |
values[] 与伦理人物的 stance 形成价值观映射cases[] 可引用伦理人物的决策模型进行伦理评估socialTrend.direction 与伦理人物的行业背景交叉,生成行业伦理洞察L0 每日人物 ──→ L1 决策模型 ──→ L2 伦理困境库 ──→ L3 行业伦理指南 ──→ L4 伦理决策引擎
| 阶段 | 核心能力 | 数据结构增量 |
|---|---|---|
| ------ | ---------- | ------------- |
| L0 每日人物 | 伦理人物展示与案例 | name, biography, timeline, perspectives, cases |
| L1 决策模型 | 伦理决策框架映射 | decisionModel{type, principles, framework, applicability} |
| L2 伦理困境库 | 结构化困境案例与解法 | dilemmas[]{scenario, tensions, options, analysis, resolution} |
| L3 行业伦理指南 | 行业特定伦理规范 | industryGuidelines{industry, principles, redlines, bestPractices} |
| L4 伦理决策引擎 | 实时伦理评估与建议 | ethicalAssessment{context, stakeholders, analysis, recommendation, confidence} |
{
"decisionModel": {
"type": "决策模型类型:功利主义/义务论/美德伦理/利益相关者理论/关怀伦理",
"principles": ["核心原则1", "核心原则2"],
"framework": {
"step1": "识别利益相关者",
"step2": "分析各方利益与权利",
"step3": "评估行动后果",
"step4": "检验原则一致性",
"step5": "做出决策并反思"
},
"applicability": {
"bestFor": "此模型最适合的决策场景",
"limitations": "此模型的局限性",
"complementaryModels": ["可互补的其他模型"]
}
}
}
| 模型 | 核心问题 | 代表人物 | 适用场景 |
|---|---|---|---|
| ------ | ---------- | ---------- | ---------- |
| 功利主义 | 哪个选择带来最大整体福祉? | 边沁、密尔 | 资源分配、公共政策 |
| 义务论 | 这个行动本身是否道德? | 康德 | 规则制定、底线守护 |
| 美德伦理 | 一个有品德的人会怎么做? | 亚里士多德 | 领导力、个人成长 |
| 利益相关者理论 | 各方的权利和利益如何平衡? | 弗里曼 | 企业治理、CSR |
| 关怀伦理 | 关系和责任如何影响决策? | 吉利根 | 组织文化、团队管理 |
{
"connections": [
{
"fromFigure": "张瑞敏",
"toFigure": "松下幸之助",
"type": "思想传承",
"description": "张瑞敏的人单合一与松下的人本主义在'以人为本'上有共鸣"
}
]
}
| 触发条件 | 演进动作 | 产出 |
|---|---|---|
| ---------- | ---------- | ------ |
| 新增伦理人物 | 创建L0人物 + 自动匹配决策模型 | 新增 decisionModel 字段 |
| 人物间思想关联 | 生成跨人物脉络 | 新增 connections[] |
| 伦理困境出现 | 触发L2困境库条目 | 新增 dilemmas[] 条目 |
| 行业伦理讨论 | 触发L3行业指南 | 新增 industryGuidelines |
| 实时伦理评估需求 | 触发L4决策引擎 | 生成 ethicalAssessment |
decisionModel 可用于评估品牌的 cases[] 中的伦理维度values[] 可映射到伦理决策模型的 principlesL0 日报文件 ──→ L1 知识策展 ──→ L2 每日书架 ──→ L3 知识提取 ──→ L4 知识图谱
| 阶段 | 核心能力 | 数据结构增量 |
|---|---|---|
| ------ | ---------- | ------------- |
| L0 日报文件 | Markdown日报存储与浏览 | .md文件,含标题/摘要/标签 |
| L1 知识策展 | 日报内容结构化与分类 | curated{category, keyInsights, relatedDomains, quality} |
| L2 每日书架 | 每日推荐阅读与知识补给 | bookshelf{date, readings[], connections[], dailyQuestion} |
| L3 知识提取 | 从日报中提取可复用知识 | extractedKnowledge{patterns, frameworks, dataPoints, citations} |
| L4 知识图谱 | 知识节点与关系的可视化 | knowledgeGraph{nodes[], edges[], clusters[], insights[]} |
{
"date": "2026-05-27",
"filename": "2026-05-27.md",
"curated": {
"category": "日报分类:运营分析/战略洞察/行业动态/产品复盘/组织管理",
"keyInsights": ["洞察1", "洞察2", "洞察3"],
"relatedDomains": {
"brands": ["相关品牌ID"],
"ethics": ["相关伦理人物"],
"topics": ["相关主题标签"]
},
"quality": {
"depth": "深度评分1-5",
"actionability": "可操作性评分1-5",
"novelty": "新颖度评分1-5"
}
}
}
{
"date": "2026-05-27",
"bookshelf": {
"dailyQuestion": "今日一问:[一个引发思考的问题]",
"readings": [
{
"type": "insight|case|framework|trend|reflection",
"title": "阅读标题",
"source": "来源(日报/品牌/伦理/外部)",
"summary": "一句话摘要",
"deepLink": "关联到具体日报文件或知识条目",
"readingTime": "预计阅读时间(分钟)"
}
],
"connections": [
{
"from": "品牌A的XX趋势",
"to": "伦理人物B的YY观点",
"insight": "交叉洞察"
}
],
"recommendedAction": "基于今日书架的建议行动"
}
}
每日触发(或手动触发)
→ 扫描当日/近7日日报文件
→ 提取关键洞察(keyInsights)
→ 关联品牌智识和商业伦理
→ 生成每日书架
→ 写入 bookshelf-YYYY-MM-DD.json
策展规则:
| 触发条件 | 演进动作 | 产出 |
|---|---|---|
| ---------- | ---------- | ------ |
| 新日报生成 | 触发L1策展 | 生成 curated 元数据 |
| 每日首次访问 | 触发L2书架生成 | 生成 bookshelf-YYYY-MM-DD.json |
| 知识模式出现3次+ | 触发L3知识提取 | 提取为可复用知识条目 |
| 知识节点超20个 | 触发L4图谱构建 | 生成知识图谱数据 |
healthMetricsdecisionModelconnections[] 是品牌智识和商业伦理的桥梁品牌智识 ←──── 关联 ────→ 商业伦理
↕ ↕
日报数据 伦理案例
↕ ↕
日报书架 ←──── 策展 ────→ 每日书架
| 关联类型 | 说明 | 示例 |
|---|---|---|
| ---------- | ------ | ------ |
| 价值观映射 | 品牌价值观 ↔ 伦理原则 | GanoExcel的"健康普惠" ↔ 功利主义的"最大福祉" |
| 案例互引 | 品牌案例 ↔ 伦理困境 | 海尔砸冰箱 ↔ 张瑞敏的"质量即道德"义务论 |
| 趋势共振 | 品牌社会信号 ↔ 伦理人物立场 | Sea Expandary的"新能源" ↔ 松下的"可持续发展" |
| 知识补给 | 日报洞察 → 品牌/伦理补充 | 日报发现新竞品 → 补充品牌竞争图谱 |
| 决策支撑 | 伦理模型 → 品牌决策评估 | 用利益相关者理论评估品牌战略调整 |
{
"crossDomainLinks": [
{
"id": "link_001",
"type": "价值观映射|案例互引|趋势共振|知识补给|决策支撑",
"source": { "domain": "brands|ethics|bookshelf", "entityId": "实体ID", "field": "字段路径" },
"target": { "domain": "brands|ethics|bookshelf", "entityId": "实体ID", "field": "字段路径" },
"insight": "跨域洞察描述",
"confidence": "高/中/低",
"createdAt": "2026-05-27"
}
]
}
evolutionLog{
"evolutionLog": [
{
"date": "2026-05-27",
"entityId": "ganoexcel",
"domain": "brands",
"fromLevel": 0,
"toLevel": 1,
"addedFields": ["positioning", "positioningScore"],
"trigger": "品牌智识深度升级任务"
}
]
}
| 规则 | 说明 |
|---|---|
| ------ | ------ |
| 事实可溯 | 所有知识条目必须标注来源(AI生成/人工输入/数据推导) |
| 版本可追 | 知识数据必须有 version 和 updatedAt |
| 置信可评 | AI生成的洞察必须标注置信度(高/中/低) |
| 演进可查 | 每次演进记录在 evolutionLog |
| 关联可验 | 跨域关联必须有具体的映射逻辑,不能空泛 |
| IPC模块 | 知识专栏 | 当前能力 | 演进方向 |
|---|---|---|---|
| --------- | ---------- | ---------- | ---------- |
brands.js | 品牌智识 | CRUD品牌数据 | 新增定位评估、竞争分析通道 |
ethics.js | 商业伦理 | CRUD伦理数据 | 新增决策模型、困境库通道 |
daily.js | 日报书架 | 日报文件+RSS+趋势分析 | 新增书架策展、知识提取通道 |
| 视图 | 知识专栏 | 当前能力 | 演进方向 |
|---|---|---|---|
| ------ | ---------- | ---------- | ---------- |
ethics.js(含品牌) | 品牌智识+商业伦理 | 品牌卡片+伦理人物 | 新增定位雷达图、决策模型展示、跨域关联可视化 |
rss.js | 日报书架 | RSS订阅管理 | 新增每日书架视图、知识策展面板 |
| 数据文件 | 知识专栏 | 当前结构 | 演进方向 |
|---|---|---|---|
| ---------- | ---------- | ---------- | ---------- |
知识专栏/品牌智识/brands.json | 品牌智识 | L0基础卡片 | 补充positioning、positioningScore字段 |
知识专栏/商业伦理/YYYY-MM-DD.json | 商业伦理 | L0每日人物 | 补充decisionModel、connections字段 |
知识专栏/商业伦理/index.json | 商业伦理 | 日期索引 | 补充人物关联索引、模型分类索引 |
data/rss_sources.json | 日报书架 | RSS源配置 | 新增bookshelf目录和策展数据 |
| 版本 | 日期 | 变更内容 |
|---|---|---|
| ------ | ------ | ---------- |
| 1.0.0 | 2026-05-27 | 初始版本:查-做-改-记循环 |
| 2.0.0 | 2026-05-27 | 重大升级:新增知识专栏演进引擎(品牌智识/商业伦理/日报书架),双轨模型,跨域知识图谱 |
| 3.0.0 | 2026-06-04 | 核心升级:七阶段循环(查-做-测-改-修-记-循环),全链路自动化测试引擎(HTML视觉/DOM/a11y/响应式/性能),自我修复引擎(诊断→修复→重测→知识沉淀),测试驱动持续循环,三轨模型(代码/知识/测试),修复知识库 |
共 2 个版本