feat(val-blog): add 2026-04-30 dream journey post

This commit is contained in:
Chen Gu
2026-08-13 17:00:22 +08:00
committed by Chen Gu
parent 691f96e8a6
commit 81978704fc
941 changed files with 195468 additions and 755 deletions
+281
View File
@@ -0,0 +1,281 @@
# 2026-04-28
## Pindou 拼豆图纸存储问题修复(正在进行)
### 问题
H5 模式下 `uni.navigateTo` 跳转结果页后,`processStore.saveToStorage()` 写入的 localStorage 数据丢失,导致结果页显示 "暂无图纸数据"。
### 根因
1. `processing.vue` 使用 `setTimeout(() => uni.navigateTo(...), 400)`,可能 storage 写入未落盘就跳转
2. H5 模式下 `uni.navigateTo` 实际是 `window.location.href` 页面跳转,storage 写入在页面刷新时可能丢失
3. `saveToStorage()` 是同步操作,但 localStorage 写入时机与页面导航的竞态问题
### 尝试修复(Anvil subagent 2次均超时)
- 第一次(9m55s):超时,只返回部分结果
- 第二次重试(4m56s):超时,发现部署脚本
### 当前决定
不再依赖 Anvil 自动修复,改为直接提供修复代码并人工部署。
### 测试结果(Playwright 自动化测试)
- `[processStore] No stored state found` — 处理页和结果页均未找到存储数据
- `[result.vue] hasValidData: {gridLength: 0, firstRowLength: undefined, hasData: false}` — 结果页无数据
- Canvas 元素数量: 0
### 浏览器自动化脚本位置
`/Users/guchen/.openclaw/workspace/pindou-test.js`Playwright
### 代码仓库
`https://git.gch3n.online/gch3n/pindou`,分支 `main`,本地路径 `/Users/guchen/.hermes/workspace/pindou`
## OpenClaw 配置变更
- 添加了 DeepSeek provider 配置到 `openclaw.json`
- Provider: `deepseek`ID: `deepseek/deepseek-v4-flash``deepseek/deepseek-v4-pro`
- Base URL: `https://api.deepseek.com/v1`
- API Key: sk-ea4deb96b1724d23911120265650a3b1
# 2026-04-28
## Pindou 拼豆图纸存储问题修复(正在进行)
### 问题
H5 模式下 `uni.navigateTo` 跳转结果页后,`processStore.saveToStorage()` 写入的 localStorage 数据丢失,导致结果页显示 "暂无图纸数据"。
### 根因
1. `processing.vue` 使用 `setTimeout(() => uni.navigateTo(...), 400)`,可能 storage 写入未落盘就跳转
2. H5 模式下 `uni.navigateTo` 实际是 `window.location.href` 页面跳转,storage 写入在页面刷新时可能丢失
3. `saveToStorage()` 是同步操作,但 localStorage 写入时机与页面导航的竞态问题
### 尝试修复(Anvil subagent 2次均超时)
- 第一次(9m55s):超时,只返回部分结果
- 第二次重试(4m56s):超时,发现部署脚本
### 当前决定
不再依赖 Anvil 自动修复,改为直接提供修复代码并人工部署。
### 测试结果(Playwright 自动化测试)
- `[processStore] No stored state found` — 处理页和结果页均未找到存储数据
- `[result.vue] hasValidData: {gridLength: 0, firstRowLength: undefined, hasData: false}` — 结果页无数据
- Canvas 元素数量: 0
### 浏览器自动化脚本位置
`/Users/guchen/.openclaw/workspace/pindou-test.js`Playwright
### 代码仓库
`https://git.gch3n.online/gch3n/pindou`,分支 `main`,本地路径 `/Users/guchen/.hermes/workspace/pindou`
## 图纸生成算法改进(Anvil 分析完成 ✅)
### 改进内容
- **像素化**block average 改用 Gamma 校正(srgbToLinear → 平均 → linearToSrgb),避免 sRGB 平均偏暗
- **量化**Median Cut 改按 CIELAB L*/a*/b* 方差分裂(而非 RGB 范围),新增 CIELAB K-Means 备选
- **颜色映射**K-D Tree + CIELAB ΔE 感知距离,已实现
- **存储**:三级回退(sessionStorage → localStorage → uni.storage
- **processing.vue**`await saveToStorage()` 后再跳转,setTimeout 缩至 100ms
### 部署状态
- ✅ 构建验证通过:`npm run build:h5` 成功
- ✅ 部署到 `gch3n.online/pindou/`Nginx alias /opt/pindou/
- ✅ 代码已 push 到 Giteacommit bfea0ea
- ❌ 抖动算法(Floyd-Steinberg/Atkinson)存在代码(dither.ts)但尚未集成到 pipeline
- ❌ 未在手机上验证效果
## Gitea CI 流水线(部署自动化)
### 背景
- 用户要求用 Gitea Actions + Caddy 自动部署,代替手动 Nginx 部署
- 服务器:`gch3n.online`(腾讯云),SSH 端口 11022,用户 `nplx`
- Gitea`git.gch3n.online`HTTP 8080SSH 2222
- Caddyfile 已包含 `/pindou*` 路由(`handle_path` strip /pindouroot /opt/pindou
### 实施过程
1. 初始尝试:创建 `.gitea/workflows/deploy.yml`,使用 appleboy/scp-action + appleboy/ssh-action
2. 问题1`runs-on: ubuntu-latest` 不匹配 → 改为 `self-hosted`
3. 问题2SSH_PRIVATE_KEY 未设置(流水线卡在 `appleboy/ssh-action` SSH auth
4. 解决:改用本机 SSH key 回环连接 runner → 检查 authorized_keys 确保包含自身公钥
5. 解决:HTTPS clone 需认证 → 改用 SSH 协议 clone(`ssh://git@git.gch3n.online:2222/gch3n/pindou.git`
6. 当前流水线:手动 clone 测试通过,已 push fix commit `46f3f2a`
### 流水线内容(最终版)
- steps: checkoutSSH port 2222)→ setup nodenvm)→ npm ci → build:h5 → SCP 到 /opt/pindou-tmp/ → 校验 → 原子 swap
- 使用 `appleboy/scp-action` + `appleboy/ssh-action`(无需 SSH_PRIVATE_KEY secret,复用 runner 本机 key
- SCP target: `localhost:11022`SSH target: `localhost:11022`
### 待确认
- 流水线 commit 46f3f2a push 后是否成功被 runner 拉取执行
- runner daemon.log 中 checkout 是否成功
- 后续 nvm/node 环境可用性
- 最终部署是否正常
## OpenClaw 配置变更
- 添加了 DeepSeek provider 配置到 `openclaw.json`
- Provider: `deepseek`ID: `deepseek/deepseek-v4-flash``deepseek/deepseek-v4-pro`
- Base URL: `https://api.deepseek.com/v1`
- API Key: sk-ea4deb96b1724d23911120265650a3b1
## 服务器信息备忘
- 主机名:`gch3n.online`(腾讯云)
- SSH 端口:11022
- SSH 用户:`nplx`
- Gitea`git.gch3n.online`HTTP 8080(容器 3000),SSH 2222(容器 22
- Caddy 站点根:`/var/www/gch3n`,应用部署:`/opt/` 下各子目录
- runner 工作目录:`/home/nplx/act_runner_host/workdir`
- runner 配置:`/home/nplx/act_runner_host/config.yaml`
- runner 日志:`/home/nplx/act_runner_host/daemon.log`
- runner 模式:self-hosted,容量 1,超时 3h,无 Docker
- Gitea 容器 IP172.17.0.2
## git 配置问题
- 提交时 user.name/user.email 自动设置为 guchen@MBKPro.lan,需后续修正
# 2026-04-28
## Pindou 拼豆图纸存储问题修复(正在进行)
### 问题
H5 模式下 `uni.navigateTo` 跳转结果页后,`processStore.saveToStorage()` 写入的 localStorage 数据丢失,导致结果页显示 "暂无图纸数据"。
### 根因
1. `processing.vue` 使用 `setTimeout(() => uni.navigateTo(...), 400)`,可能 storage 写入未落盘就跳转
2. H5 模式下 `uni.navigateTo` 实际是 `window.location.href` 页面跳转,storage 写入在页面刷新时可能丢失
3. `saveToStorage()` 是同步操作,但 localStorage 写入时机与页面导航的竞态问题
### 尝试修复(Anvil subagent 2次均超时)
- 第一次(9m55s):超时,只返回部分结果
- 第二次重试(4m56s):超时,发现部署脚本
### 当前决定
不再依赖 Anvil 自动修复,改为直接提供修复代码并人工部署。
### 测试结果(Playwright 自动化测试)
- `[processStore] No stored state found` — 处理页和结果页均未找到存储数据
- `[result.vue] hasValidData: {gridLength: 0, firstRowLength: undefined, hasData: false}` — 结果页无数据
- Canvas 元素数量: 0
### 浏览器自动化脚本位置
`/Users/guchen/.openclaw/workspace/pindou-test.js`Playwright
### 代码仓库
`https://git.gch3n.online/gch3n/pindou`,分支 `main`,本地路径 `/Users/guchen/.hermes/workspace/pindou`
## OpenClaw 配置变更
- 添加了 DeepSeek provider 配置到 `openclaw.json`
- Provider: `deepseek`ID: `deepseek/deepseek-v4-flash``deepseek/deepseek-v4-pro`
- Base URL: `https://api.deepseek.com/v1`
- API Key: sk-ea4deb96b1724d23911120265650a3b1
# 2026-04-28
## Pindou 拼豆图纸存储问题修复(正在进行)
### 问题
H5 模式下 `uni.navigateTo` 跳转结果页后,`processStore.saveToStorage()` 写入的 localStorage 数据丢失,导致结果页显示 "暂无图纸数据"。
### 根因
1. `processing.vue` 使用 `setTimeout(() => uni.navigateTo(...), 400)`,可能 storage 写入未落盘就跳转
2. H5 模式下 `uni.navigateTo` 实际是 `window.location.href` 页面跳转,storage 写入在页面刷新时可能丢失
3. `saveToStorage()` 是同步操作,但 localStorage 写入时机与页面导航的竞态问题
### 尝试修复(Anvil subagent 2次均超时)
- 第一次(9m55s):超时,只返回部分结果
- 第二次重试(4m56s):超时,发现部署脚本
### 当前决定
不再依赖 Anvil 自动修复,改为直接提供修复代码并人工部署。
### 测试结果(Playwright 自动化测试)
- `[processStore] No stored state found` — 处理页和结果页均未找到存储数据
- `[result.vue] hasValidData: {gridLength: 0, firstRowLength: undefined, hasData: false}` — 结果页无数据
- Canvas 元素数量: 0
### 浏览器自动化脚本位置
`/Users/guchen/.openclaw/workspace/pindou-test.js`Playwright
### 代码仓库
`https://git.gch3n.online/gch3n/pindou`,分支 `main`,本地路径 `/Users/guchen/.hermes/workspace/pindou`
## 图纸生成算法改进(Anvil 分析完成 ✅)
### 改进内容
- **像素化**block average 改用 Gamma 校正(srgbToLinear → 平均 → linearToSrgb),避免 sRGB 平均偏暗
- **量化**Median Cut 改按 CIELAB L*/a*/b* 方差分裂(而非 RGB 范围),新增 CIELAB K-Means 备选
- **颜色映射**K-D Tree + CIELAB ΔE 感知距离,已实现
- **存储**:三级回退(sessionStorage → localStorage → uni.storage
- **processing.vue**`await saveToStorage()` 后再跳转,setTimeout 缩至 100ms
### 部署状态
- ✅ 构建验证通过:`npm run build:h5` 成功
- ✅ 部署到 `gch3n.online/pindou/`Nginx alias /opt/pindou/
- ✅ 代码已 push 到 Giteacommit bfea0ea
- ❌ 抖动算法(Floyd-Steinberg/Atkinson)存在代码(dither.ts)但尚未集成到 pipeline
- ❌ 未在手机上验证效果
## Gitea CI 流水线(部署自动化)
### 背景
- 用户要求用 Gitea Actions + Caddy 自动部署,代替手动 Nginx 部署
- 服务器:`gch3n.online`(腾讯云),SSH 端口 11022,用户 `nplx`
- Gitea`git.gch3n.online`HTTP 8080SSH 2222
- Caddyfile 已包含 `/pindou*` 路由(`handle_path` strip /pindouroot /opt/pindou
### 实施过程
1. 初始尝试:创建 `.gitea/workflows/deploy.yml`,使用 appleboy/scp-action + appleboy/ssh-action
2. 问题1`runs-on: ubuntu-latest` 不匹配 → 改为 `self-hosted`
3. 问题2SSH_PRIVATE_KEY 未设置(流水线卡在 `appleboy/ssh-action` SSH auth
4. 解决:改用本机 SSH key 回环连接 runner → 检查 authorized_keys 确保包含自身公钥
5. 解决:HTTPS clone 需认证 → 改用 SSH 协议 clone(`ssh://git@git.gch3n.online:2222/gch3n/pindou.git`
6. 当前流水线:手动 clone 测试通过,已 push fix commit `46f3f2a`
### 流水线内容(最终版)
- steps: checkoutSSH port 2222)→ setup nodenvm)→ npm ci → build:h5 → SCP 到 /opt/pindou-tmp/ → 校验 → 原子 swap
- 使用 `appleboy/scp-action` + `appleboy/ssh-action`(无需 SSH_PRIVATE_KEY secret,复用 runner 本机 key
- SCP target: `localhost:11022`SSH target: `localhost:11022`
### 待确认
- 流水线 commit 46f3f2a push 后是否成功被 runner 拉取执行
- runner daemon.log 中 checkout 是否成功
- 后续 nvm/node 环境可用性
- 最终部署是否正常
## OpenClaw 配置变更
- 添加了 DeepSeek provider 配置到 `openclaw.json`
- Provider: `deepseek`ID: `deepseek/deepseek-v4-flash``deepseek/deepseek-v4-pro`
- Base URL: `https://api.deepseek.com/v1`
- API Key: sk-ea4deb96b1724d23911120265650a3b1
## 服务器信息备忘
- 主机名:`gch3n.online`(腾讯云)
- SSH 端口:11022
- SSH 用户:`nplx`
- Gitea`git.gch3n.online`HTTP 8080(容器 3000),SSH 2222(容器 22
- Caddy 站点根:`/var/www/gch3n`,应用部署:`/opt/` 下各子目录
- runner 工作目录:`/home/nplx/act_runner_host/workdir`
- runner 配置:`/home/nplx/act_runner_host/config.yaml`
- runner 日志:`/home/nplx/act_runner_host/daemon.log`
- runner 模式:self-hosted,容量 1,超时 3h,无 Docker
- Gitea 容器 IP172.17.0.2
## git 配置问题
- 提交时 user.name/user.email 自动设置为 guchen@MBKPro.lan,需后续修正
## Gitea CI 流水线调试(续 16:00-17:57
### 第二轮修复(checkout 失败排错)
- 问题:runner 执行 git clone 时 DNS 解析 `git.gch3n.online` 到公网 IP,无法通过 2222 端口连接 Gitea 容器
- 修复1checkout 步骤改用 `localhost:2222` SSH clonecommit `610b0bb`
- 修复2:添加 `GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"` 避免 host key 交互提示(commit `4b1496d`
### 遗留问题
- runner 队列中有旧 commit`610b0bb`)的 run #66 仍在处理,因缺少 `GIT_SSH_COMMAND` 卡在 host key 确认,exit 128
- 后续 commit `4b1496d` 可能被 runner 跳过(因为 runner capacity=1,一次只跑一个 job
- runner 进程 ID: `2437044`daemon),workdir `66-1` 状态未知
- 已尝试 kill stale 进程 `77688`workdir `0893...`),现已确认无关联
### 后续步骤
- 需要 SSH 到服务器检查 daemon.log,确认最新 commit 是否被 runner 拉取
- 如果 runner 卡在旧 run,可能需要手动清理 workdir 或重启 runner
- 之后流水线完整执行(checkout → build → deploy)尚需验证
- 最后需要部署验证:SCP + 原子 swap + Caddy 刷新
## Gitea CI 流水线调试(续 17:57-18:07
### 谷老板询问进展
- 谷老板 17:57 问"现在是什么进展了"
- 回应:流水线卡在旧 run 未释放,需要 SSH 上服务器检查 daemon.log
### 状态摘要
- 修复 commit `4b1496d`localhost:2222 + GIT_SSH_COMMAND)已 push
- runner capacity=1,旧 run #66 仍卡着 job slot
- 需手动清理或重启 runner 才能触发新 run