Files
val-blog/memory/2026-04-28.md
T

14 KiB
Raw Blame History

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.jsPlaywright

代码仓库

https://git.gch3n.online/gch3n/pindou,分支 main,本地路径 /Users/guchen/.hermes/workspace/pindou

OpenClaw 配置变更

  • 添加了 DeepSeek provider 配置到 openclaw.json
  • Provider: deepseekID: deepseek/deepseek-v4-flashdeepseek/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.jsPlaywright

代码仓库

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.vueawait 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
  • Giteagit.gch3n.onlineHTTP 8080SSH 2222
  • Caddyfile 已包含 /pindou* 路由(handle_path strip /pindouroot /opt/pindou

实施过程

  1. 初始尝试:创建 .gitea/workflows/deploy.yml,使用 appleboy/scp-action + appleboy/ssh-action
  2. 问题1runs-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:11022SSH target: localhost:11022

待确认

  • 流水线 commit 46f3f2a push 后是否成功被 runner 拉取执行
  • runner daemon.log 中 checkout 是否成功
  • 后续 nvm/node 环境可用性
  • 最终部署是否正常

OpenClaw 配置变更

  • 添加了 DeepSeek provider 配置到 openclaw.json
  • Provider: deepseekID: deepseek/deepseek-v4-flashdeepseek/deepseek-v4-pro
  • Base URL: https://api.deepseek.com/v1
  • API Key: sk-ea4deb96b1724d23911120265650a3b1

服务器信息备忘

  • 主机名:gch3n.online(腾讯云)
  • SSH 端口:11022
  • SSH 用户:nplx
  • Giteagit.gch3n.onlineHTTP 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 配置问题

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.jsPlaywright

代码仓库

https://git.gch3n.online/gch3n/pindou,分支 main,本地路径 /Users/guchen/.hermes/workspace/pindou

OpenClaw 配置变更

  • 添加了 DeepSeek provider 配置到 openclaw.json
  • Provider: deepseekID: deepseek/deepseek-v4-flashdeepseek/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.jsPlaywright

代码仓库

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.vueawait 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
  • Giteagit.gch3n.onlineHTTP 8080SSH 2222
  • Caddyfile 已包含 /pindou* 路由(handle_path strip /pindouroot /opt/pindou

实施过程

  1. 初始尝试:创建 .gitea/workflows/deploy.yml,使用 appleboy/scp-action + appleboy/ssh-action
  2. 问题1runs-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:11022SSH target: localhost:11022

待确认

  • 流水线 commit 46f3f2a push 后是否成功被 runner 拉取执行
  • runner daemon.log 中 checkout 是否成功
  • 后续 nvm/node 环境可用性
  • 最终部署是否正常

OpenClaw 配置变更

  • 添加了 DeepSeek provider 配置到 openclaw.json
  • Provider: deepseekID: deepseek/deepseek-v4-flashdeepseek/deepseek-v4-pro
  • Base URL: https://api.deepseek.com/v1
  • API Key: sk-ea4deb96b1724d23911120265650a3b1

服务器信息备忘

  • 主机名:gch3n.online(腾讯云)
  • SSH 端口:11022
  • SSH 用户:nplx
  • Giteagit.gch3n.onlineHTTP 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 配置问题

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 队列中有旧 commit610b0bb)的 run #66 仍在处理,因缺少 GIT_SSH_COMMAND 卡在 host key 确认,exit 128
  • 后续 commit 4b1496d 可能被 runner 跳过(因为 runner capacity=1,一次只跑一个 job
  • runner 进程 ID: 2437044daemon),workdir 66-1 状态未知
  • 已尝试 kill stale 进程 77688workdir 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 4b1496dlocalhost:2222 + GIT_SSH_COMMAND)已 push
  • runner capacity=1,旧 run #66 仍卡着 job slot
  • 需手动清理或重启 runner 才能触发新 run