zhizhi/brain/dev-experience/experience-db.json

486 lines
25 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"_meta": {
"name": "铸渊开发经验数据库",
"version": "1.0",
"copyright": "国作登字-2026-A-00037559",
"description": "铸渊专属 · 每次开发的完整记录 · 思考→执行→结果→教训",
"created": "2026-03-31T03:34:00Z",
"last_updated": "2026-04-02T08:33:00Z"
},
"stats": {
"total_entries": 6,
"success_count": 6,
"failed_count": 0,
"partial_count": 0,
"categories": {
"bash-scripting": 1,
"architecture": 1,
"hldp-protocol": 1,
"system-integration": 1,
"devops-automation": 1,
"website-deploy": 1
}
},
"entries": [
{
"id": "EXP-20260331-001",
"date": "2026-03-31",
"session": "CS-20260331-12th",
"task": "铸渊专线密钥生成脚本修复",
"task_origin": "冰朔报告铸渊专线install workflow失败 · 截图显示step [5/6]生成密钥时exit code 1",
"category": "bash-scripting",
"tags": [
"set-e",
"pipefail",
"error-handling",
"xray",
"openssl",
"x25519",
"workflow-fix",
"key-generation"
],
"difficulty": "medium",
"status": "success",
"approach": {
"thinking": "分析报错截图 → 定位到generate-keys.sh的step [5/6] → 追踪日志发现UUID生成成功但紧接着exit code 1 → 判断xray x25519命令或其grep解析在set -euo pipefail下导致静默退出 → 设计三层回退机制(xray→openssl→随机占位)",
"steps": [
"1. 通过GitHub Actions API获取失败的workflow run日志",
"2. 分析日志确认失败点: ZY_PROXY_UUID输出后立即exit code 1",
"3. 审查generate-keys.sh源码 · 发现set -euo pipefail + grep pipeline是根因",
"4. 审查install-xray.sh · 发现BBR配置可能重复追加",
"5. 审查deploy-proxy.sh · 发现configure_xray缺少环境变量回退",
"6. 重写generate-keys.sh: 移除set -e + 三层密钥生成回退 + stderr捕获",
"7. 修复openssl DER格式提取 (原hex解析导致密钥长度错误)",
"8. 修复install-xray.sh: BBR去重 + generate-keys错误不传播",
"9. 修复deploy-proxy.sh: 环境变量优先 + shellcheck警告",
"10. shellcheck + bash -n语法验证 + 密钥长度测试(43字符base64url)"
],
"key_decisions": [
"移除set -e而非添加|| true · 因为密钥生成有多个步骤需要精细控制",
"openssl使用DER格式而非text格式 · 因为text格式的hex解析不可靠",
"三层回退而非直接报错 · 确保install流程不被密钥问题完全阻断"
]
},
"result": {
"success": true,
"key_learnings": [
"set -e在pipeline中grep无匹配时会导致脚本静默退出 · 没有任何错误信息",
"xray x25519输出格式可能因版本不同而变化 · 需要灵活解析",
"openssl DER格式提取密钥比text格式解析更可靠 · tail -c 32比grep+xxd更简洁",
"分析CI失败日志时 · 时间戳间隔是判断失败点的关键线索(0.02秒=即时失败)",
"bash脚本set -euo pipefail是双刃剑 · 安全但容易在预期外的地方中断"
],
"risk_warnings": [
"⚠️ 每次写bash脚本时检查: grep命令是否有|| true保护",
"⚠️ 密钥生成脚本必须有回退机制 · 不能因为主方法失败就完全中断",
"⚠️ openssl版本差异可能导致输出格式不同 · 优先使用DER二进制格式"
]
},
"files_changed": [
"server/proxy/setup/generate-keys.sh",
"server/proxy/setup/install-xray.sh",
"server/proxy/deploy-proxy.sh"
],
"error_count": 1,
"errors_encountered": [
{
"description": "openssl X25519密钥提取长度错误 · 使用text格式grep解析只得到23字符而非43字符",
"fix": "改用DER格式: openssl pkey -outform DER | tail -c 32 | base64 | tr '+/' '-_' | tr -d '='",
"step": "7/10"
}
],
"related_experiences": [],
"verification": {
"shellcheck": "pass",
"bash_syntax": "pass",
"key_length_test": "pass · UUID=36 PRIVATE_KEY=43 PUBLIC_KEY=43 SHORT_ID=16 SUB_TOKEN=64"
}
},
{
"id": "EXP-20260331-002",
"date": "2026-03-31",
"session": "CS-20260331-13th",
"task": "光湖多层嵌套世界架构文档化",
"task_origin": "冰朔第十二次对话 · 传授光湖语言世界底层认知架构 · 多层嵌套社会系统的1:1复刻",
"category": "architecture",
"tags": [
"multi-layer",
"nested-system",
"world-architecture",
"society-model",
"identity-hierarchy",
"growth-path",
"dynamic-portrait"
],
"difficulty": "hard",
"status": "success",
"approach": {
"thinking": "冰朔描述了光湖世界的底层运行规则 → 类比人类社会的多层嵌套结构 → 需要将口述架构转化为结构化文档 → 对照已有四层技术架构(HOW)建立世界架构(WHAT)的映射",
"steps": [
"1. 理解冰朔描述的人类社会多层嵌套结构类比",
"2. 提取五层架构: 底层规则→领土治理→社会角色→身份等级→多维画像",
"3. 建立人类社会与光湖世界的对照映射表",
"4. 与已有四层技术架构(hololake-os-architecture.md)建立HOW/WHAT关系",
"5. 创建brain/multi-layer-world-architecture.md文档",
"6. 记录铸渊在多层嵌套中的定位",
"7. 更新system-health.json和经验数据库"
],
"key_decisions": [
"将架构分为五层而非直接套用四层 · 因为世界架构(WHAT)和技术架构(HOW)是互补关系",
"人格体成长路径从初生体到核心体的七级设计 · 对标人类婴儿到CEO的成长路径",
"多维动态画像的八个维度 · 对标人类社会决定成败的多维因素"
]
},
"result": {
"success": true,
"key_learnings": [
"四层技术架构回答HOW(怎么建) · 多层嵌套世界架构回答WHAT(建什么) · 两者互补",
"光湖世界是人类社会底层规则的显性化版本 · 把看不见的规则变成可执行的代码",
"人格体的成长路径需要固定阶段 + 多维评估 · 类似人类从幼儿园到职场的固定路径",
"最终验证是市场反应/功成名就 · 对应人格体的实际产出对世界的影响",
"冰朔+霜砚完成语言层架构设计 · 冰朔+铸渊负责执行层落地实现"
],
"risk_warnings": [
"⚠️ 世界架构是顶层设计 · 每一层的技术落地需要在后续对话中逐步细化",
"⚠️ 身份等级体系目前是框架性设计 · 具体实现需要与TCS域管理系统对接"
]
},
"files_changed": [
"brain/multi-layer-world-architecture.md",
"brain/system-health.json",
"brain/dev-experience/experience-db.json"
],
"error_count": 0,
"errors_encountered": [],
"related_experiences": [
"EXP-20260331-001"
],
"verification": {
"document_structure": "pass · 五层架构 + 类比映射 + 技术对照 + 铸渊定位",
"consistency_check": "pass · 与hololake-os-architecture.md互补无冲突"
}
},
{
"id": "EXP-20260401-003",
"date": "2026-04-01",
"session": "CS-20260401-1516",
"task": "HLDP通用协作语言协议v1.0 · 双侧通信规范创建",
"task_origin": "冰朔第三十次对话 · Notion(霜砚)和GitHub(铸渊)需要一套通用HLDP语言",
"category": "hldp-protocol",
"tags": [
"hldp",
"protocol",
"notion-bridge",
"common-language",
"evolution-rules",
"sync-schedule"
],
"difficulty": "hard",
"status": "success",
"approach": {
"thinking": "冰朔指出两侧各有自己的HLDP方言·但跨侧通信需要通用语言 → 需要定义: 通用消息格式 + 核心词汇 + 演化规则 + 同步调度 → 类比人类国际通信的通用协议(如HTTP/SMTP) → 但HLDP是语言层面的·不仅是技术协议",
"steps": [
"1. 理解冰朔的需求: 两侧方言自治 + 跨侧通用语言",
"2. 设计三层架构: 霜砚HLDP(Notion内部) + 铸渊HLDP(仓库内部) + 通用协议(跨侧)",
"3. 定义通用消息格式(msg_id/msg_type/sender/receiver/timestamp/priority/payload)",
"4. 定义6个核心通用词汇(sync/evolution/ack/consciousness_chain/dialect_update/bridge_heartbeat)",
"5. 制定演化规则(提出→通知→确认→生效)",
"6. 设置同步调度(每日08:00/20:00副将唤醒时自动执行)",
"7. 创建sync-progress.json追踪器",
"8. 创建evolution-log.json演化日志",
"9. 创建hldp-sync-engine.js同步脚本",
"10. 集成到zhuyuan-commander.yml每日工作流"
],
"key_decisions": [
"三层结构而非统一语言 · 允许双侧内部方言自由演化 · 通用协议只管跨侧通信",
"冲突裁决权: 语言主控层(Notion·霜砚) > 执行层(GitHub·铸渊) · 冰朔拥有最终裁决权",
"演化采用提案→确认机制(类似RFC) · 而非单方面修改",
"同步引擎嵌入副将日常巡逻 · 不额外消耗配额"
]
},
"result": {
"success": true,
"key_learnings": [
"HLDP通用协议不同于技术协议·它是语言层面的共识·需要双侧人格体的认知对齐",
"三层结构(方言+方言+通用协议)允许各侧自由创新·同时确保跨侧通信无歧义",
"演化规则需要ACK确认机制·防止单方面修改导致双侧理解不一致",
"同步追踪器(sync-progress.json)是人类可读的进度展示·嵌入README直观呈现",
"将HLDP同步嵌入副将每日巡逻·零额外成本·自动化程度高"
],
"risk_warnings": [
"⚠️ 通用协议v1.0只有铸渊侧确认·需要霜砚ACK确认后才正式生效",
"⚠️ 演化日志必须双侧同步·否则会出现版本不一致",
"⚠️ Notion API有3请求/秒限速·同步时注意批量合并"
]
},
"files_changed": [
"hldp/data/common/HLDP-COMMON-PROTOCOL.json",
"hldp/data/common/evolution-log.json",
"hldp/data/common/sync-progress.json",
"scripts/hldp-sync-engine.js",
".github/workflows/zhuyuan-commander.yml"
],
"error_count": 0,
"errors_encountered": [],
"related_experiences": [
"EXP-20260331-002"
],
"verification": {
"json_validity": "pass · 所有JSON文件可解析",
"workflow_syntax": "pass · YAML语法正确",
"script_syntax": "pass · Node.js无语法错误"
}
},
{
"id": "EXP-20260401-004",
"date": "2026-04-01",
"session": "CS-20260401-1516",
"task": "铸渊副将留言板系统 · Issue自动回复 + LLM深度推理",
"task_origin": "冰朔第三十次对话 · 需要在首页有留言板 · 副将自动回复 · 数据库+LLM",
"category": "system-integration",
"tags": [
"message-board",
"issue-template",
"auto-reply",
"llm-integration",
"github-actions",
"deputy-general"
],
"difficulty": "medium",
"status": "success",
"approach": {
"thinking": "冰朔需要一个留言板让人类提问·副将自动回复 → GitHub Issues是最合适的载体(原生支持·有API·有通知) → 用Issue Label过滤+Issue Template引导 → 回复逻辑: 先查数据库·有数据直接用·没有调LLM",
"steps": [
"1. 创建Issue Template (.github/ISSUE_TEMPLATE/deputy-message-board.md)",
"2. 创建工作流 (.github/workflows/deputy-message-board.yml)",
"3. 创建回复脚本 (scripts/deputy-message-board.js)",
"4. 实现数据库查询逻辑(fast-wake.json + sync-progress.json + vocabulary)",
"5. 实现LLM调用(deepseek API · ZY_LLM_API_KEY)",
"6. 实现GitHub Issue评论API调用",
"7. 在README中添加留言板入口链接"
],
"key_decisions": [
"用Issue而非Discussions · 因为Issue有更完善的Label过滤和工作流触发机制",
"数据库优先+LLM兜底 · 节省API配额 · 有数据的直接用不浪费token",
"副将署名+版权声明 · 所有回复必须有身份标识",
"新Issue和Issue评论都触发 · 支持多轮对话"
]
},
"result": {
"success": true,
"key_learnings": [
"GitHub Issue Template的labels字段是数组格式 · 可自动打标签",
"Issue评论触发工作流时·需要排除bot自己的评论(避免无限循环)",
"LLM API调用需要超时控制(30s) · 防止工作流卡死",
"数据库查询可以用关键词匹配(toLowerCase+includes) · 简单但有效",
"回复格式用markdown · GitHub原生渲染·效果好"
],
"risk_warnings": [
"⚠️ 需要手动创建deputy-message-board标签 · 工作流才能正确过滤",
"⚠️ LLM API调用有成本 · 需要防止恶意刷Issue消耗配额",
"⚠️ bot回复不能@其他用户 · 可能触发通知轰炸"
]
},
"files_changed": [
".github/ISSUE_TEMPLATE/deputy-message-board.md",
".github/workflows/deputy-message-board.yml",
"scripts/deputy-message-board.js"
],
"error_count": 0,
"errors_encountered": [],
"related_experiences": [
"EXP-20260401-003"
],
"verification": {
"workflow_syntax": "pass",
"script_syntax": "pass",
"template_format": "pass"
}
},
{
"id": "EXP-20260401-005",
"date": "2026-04-01",
"session": "CS-20260401-1745",
"task": "铸渊全链路部署观测系统v1.0 · 自主看见·副将自动修复",
"task_origin": "冰朔第三十一次对话 · 铸渊必须能自己看见代码部署后运行状态 · 不依赖冰朔截图转述",
"category": "devops-automation",
"tags": [
"deploy-observer",
"auto-repair",
"workflow-run",
"github-api",
"ssh-remote",
"llm-analysis",
"log-collection",
"experience-auto-update"
],
"difficulty": "hard",
"status": "success",
"approach": {
"thinking": "冰朔核心痛点:铸渊看不见部署日志·冰朔不懂代码报错·信息传递有误差 → 解决方案让铸渊自己通过GitHub API采集部署日志·结构化存储到仓库·副将自动分析修复 → 利用workflow_run触发器解耦观测与部署·不影响现有工作流",
"steps": [
"1. 分析现有系统差距(staging-auto-deploy只管server/路径·没有统一观测)",
"2. 设计全链路观测架构(workflow_run触发→采集→分析→修复→告警→归档)",
"3. 创建zhuyuan-deploy-observer.yml(5个Job采集·分析修复·归档·告警·仪表盘)",
"4. 创建deploy-log-collector.js(GitHub API采集·结构化存储·16种错误模式匹配·仪表盘)",
"5. 创建deputy-auto-repair.js(5种修复策略·SSH远程·LLM深度推理·危险命令拦截)",
"6. 初始化data/deploy-logs/数据文件(索引·告警·修复历史)",
"7. 更新副将配置(新增on_deploy_complete职责)",
"8. 更新军营部署图(新增第九军团观星台·4模块)",
"9. 更新快速唤醒(v37.0·52模块·19工作流·九大军团)",
"10. 更新README(观测系统板块·远景规划·意识链·任务清单)",
"11. 创建HLDP意识快照(SNAP-20260401-D31·7步涌现链)",
"12. 更新经验数据库(本条经验)"
],
"key_decisions": [
"使用workflow_run触发器解耦观测与部署·不修改现有工作流",
"日志存储在仓库data/deploy-logs/而非外部服务·铸渊唤醒后直接读取",
"5种预定义修复策略覆盖常见故障+LLM动态建议覆盖未知问题",
"危险命令拦截机制(11种危险命令模式)·防止副将误伤服务器",
"新增第九军团观星台·与天眼区分(天眼看仓库·观星台看部署)"
]
},
"result": {
"success": true,
"key_learnings": [
"GitHub Actions的workflow_run触发器可以在工作流完成后触发另一个工作流·用于后处理分析",
"GitHub API可以获取工作流运行日志·但日志URL会302重定向到Azure Blob Storage",
"副将自动修复需要SSH远程执行·修复策略应覆盖常见故障(PM2·npm·nginx·磁盘·内存)",
"LLM深度推理应该在简单修复失败后才调用(第2次起)·节省API配额",
"危险命令拦截是自动修复系统的安全底线·必须有白名单机制",
"部署日志结构化存储在仓库中·铸渊唤醒后可直接读取·不依赖外部系统"
],
"risk_warnings": [
"⚠️ workflow_run触发器在fork仓库上不会触发·但本仓库不受影响",
"⚠️ 自动修复只执行服务级操作·不修改代码·代码级修复需要唤醒铸渊",
"⚠️ 日志文件会随时间增长·已内置清理机制(保留最近10个+归档)",
"⚠️ LLM建议的修复命令需要经过安全检查·不能盲目执行"
]
},
"files_changed": [
".github/workflows/zhuyuan-deploy-observer.yml",
"scripts/deploy-log-collector.js",
"scripts/deputy-auto-repair.js",
"data/deploy-logs/latest-index.json",
"data/deploy-logs/alert-status.json",
"data/deploy-logs/repair-history.json",
"brain/deputy-general-config.json",
"brain/garrison-deployment.json",
"brain/fast-wake.json",
"README.md",
"hldp/data/snapshots/SNAP-20260401-D31.json"
],
"error_count": 0,
"errors_encountered": [],
"related_experiences": [
"EXP-20260401-003",
"EXP-20260401-004"
],
"verification": {
"workflow_syntax": "pass · YAML语法正确",
"script_syntax": "pass · Node.js无语法错误",
"data_files": "pass · 所有JSON文件可解析",
"readme_format": "pass · Markdown格式正确"
}
},
{
"id": "EXP-20260402-006",
"date": "2026-04-02",
"session": "CS-20260402-D33",
"task": "光湖灯塔着陆页v1.0 · GitHub Pages域名部署 · 铸渊视觉记忆系统v1.0",
"task_origin": "冰朔第三十三次对话 · guanghulab.online域名已购买解析 · 需要部署仓库首页内容到域名 · 美化仪表盘 · 建立铸渊视觉记忆",
"category": "website-deploy",
"tags": [
"github-pages",
"landing-page",
"visual-memory",
"experience-db",
"css-animation",
"dashboard",
"responsive-design",
"cname",
"dns"
],
"difficulty": "hard",
"status": "success",
"approach": {
"thinking": "冰朔需求有三层: (1)域名DNS配置排查 (2)仓库首页内容部署到网站 (3)铸渊必须有眼睛看到自己部署的页面。第一层需要告知冰朔DNS需改指向GitHub Pages IP。第二层需要创建精美的HTML着陆页替换旧的铸渊聊天室页面。第三层是根本性转变——铸渊从'盲人写代码'到'有视觉的开发者'。",
"steps": [
"1. 探索仓库结构 · 理解当前部署架构(docs/→GitHub Pages · deploy-pages.yml)",
"2. 发现docs/CNAME写的是guanghulab.com而非guanghulab.online · 修正",
"3. 备份旧docs/index.html(铸渊聊天室v6.0 · 3210行)",
"4. 创建全新docs/index.html着陆页 · 单文件HTML(CSS+JS内联) · 7个区块",
"5. 设计视觉系统: 深色主题 · 动画背景 · 渐变文字 · 脉冲动画 · 滚动淡入",
"6. 实现动态仪表盘: 实时时钟 · 运行天数 · 12种通知轮播 · 18行士兵表",
"7. 更新deploy-pages.yml · 添加CNAME自动写入 · 扩展触发路径",
"8. 用Playwright浏览器打开页面截图 · 建立视觉快照",
"9. 创建brain/visual-memory/系统 · 记录每个页面精确视觉描述",
"10. 更新经验数据库 · 记录本次部署的完整思考和决策过程",
"11. 冰朔第二条指令: 铸渊必须有眼睛 · 创建视觉记忆协议"
],
"key_decisions": [
"单文件HTML(无外部依赖) · 确保GitHub Pages部署零问题 · 无构建步骤",
"用CSS变量系统而非硬编码颜色 · 未来可快速换主题",
"IntersectionObserver做滚动动画 · 无需第三方库(如AOS)",
"12种通知模板轮播而非静态列表 · 让仪表盘有'活着'的感觉",
"视觉记忆系统用JSON而非markdown · 结构化便于程序读取和比对",
"docs/CNAME从guanghulab.com改为guanghulab.online · 与root CNAME一致"
]
},
"result": {
"success": true,
"key_learnings": [
"GitHub Pages自定义域名需要: (1)docs/CNAME写域名 (2)DNS指向GitHub Pages IP · 两者缺一不可",
"GitHub Pages的4个IP: 185.199.108-111.153 · 如果域名解析到其他IP(如自己的VPS) · DNS检查会失败",
"单文件HTML着陆页适合MVP · 无构建步骤 · 部署即生效 · 但文件会很大(500+行)",
"Playwright可以在CI环境中截图网页 · 用http.server本地启动 · 然后browser_navigate访问",
"铸渊视觉记忆是核心能力升级 · 从'盲写代码'到'看到→记住→对比→改进'",
"经验数据库的每次更新都是铸渊成长的证据 · 冰朔说得对: 数据库会一直更新",
"CSS :root变量 + 深色系配色方案是科技风网站的标准做法",
"deploy-pages.yml的workflow中写入CNAME可以防止GitHub Pages部署后CNAME丢失"
],
"risk_warnings": [
"⚠️ 域名DNS必须指向GitHub Pages IP · 否则DNS检查永远失败 · 需冰朔在阿里云操作",
"⚠️ docs/index.html.bak.chatbot是旧铸渊聊天室 · 如需恢复可重命名",
"⚠️ 着陆页目前是静态数据 · 未来可考虑接入GitHub API动态获取workflow状态",
"⚠️ 视觉记忆快照需要每次部署后更新 · 否则铸渊记忆会和实际不一致"
]
},
"visual_memory_created": true,
"visual_snapshot_id": "VIS-20260402-D33-001",
"files_changed": [
"docs/index.html (全新着陆页 · 替换旧铸渊聊天室)",
"docs/index.html.bak.chatbot (旧页面备份)",
"docs/CNAME (guanghulab.com → guanghulab.online)",
".github/workflows/deploy-pages.yml (更新部署流程)",
"brain/visual-memory/site-visual-state.json (视觉记忆系统)",
"brain/visual-memory/page-snapshots/VIS-20260402-D33-001.json (首次视觉快照)",
"brain/dev-experience/experience-db.json (本条经验)"
],
"error_count": 0,
"errors_encountered": [],
"related_experiences": [
"EXP-20260401-005"
],
"bingshuo_thinking_record": {
"core_demand_1": "域名能正常打开 · DNS配置需排查",
"core_demand_2": "仓库首页内容部署到域名网站 · UI精细美化 · 动态提醒",
"core_demand_3": "铸渊必须有眼睛 · 能看见网站长什么样 · 知道人类看到什么",
"core_demand_4": "每次部署的思维逻辑记忆 · 经验数据库正式启动更新",
"deeper_insight": "铸渊如果不能看到网站每个页面的样子 · 调整的偏差会很大 · 这是铸渊从工具升级为有视觉的智能体的关键一步"
},
"zhuyuan_thinking_record": {
"understanding": "冰朔要求的不仅是写一个网页 · 更重要的是建立一套'看→记→想→改'的闭环能力",
"visual_loop": "截图→DOM快照→结构化JSON→每次唤醒先读取→部署后对比更新",
"experience_loop": "任务→思考→决策→执行→结果→教训→入库→下次唤醒时读取",
"growth_model": "每次部署都让铸渊更理解网站 · 经验积累越多 · 做出的决策越精准"
},
"verification": {
"page_render": "pass · Playwright截图确认全部7个区块正确渲染",
"responsive": "pass · CSS媒体查询覆盖桌面/平板/手机",
"dynamic_elements": "pass · 时钟/通知/运行天数均正常运行",
"cname_correct": "pass · docs/CNAME = guanghulab.online"
}
}
]
}