DesignOps Agent 5e603f0c8a
designops-gateway / build (push) Failing after 20m21s
feat(w2): Penpot 会话轮换机制(会话保活 + 401 自动重登)
调研结论:access token 在 Penpot 2.18 无法经 RPC 授权(perms 只能 REPL 追加),
故采用会话保活。续期窗口以登录响应的 Comment=Renewal at(<+6h) 为准,而非 7 天过期。

- penpot-session.ts:登录/落盘(0600 原子写)/陈旧判定/合并并发刷新/fail-open/status
- penpot.ts:sessionProvider 每次读实时 cookie;401 → 强制重登 → 只重试一次
- index.ts:启动 ensureFresh + 小时级 tick;healthz 暴露会话健康(不含密钥)
- P3 的 exporter cookie 改为 provider,刷新对运行中流水线即时生效

修掉真 bug:seed cookie 年龄未知却当成新鲜 → 整个续期窗口不登录、从不写会话文件;
改为 seed 一律视为陈旧。

实测:会话文件 mode 600;healthz penpotSession 指标正常;植入假 cookie 后日志出现
'401 received, forcing re-login' + 'refreshed successfully' 且 P4 仍 success;
重启后 ageSeconds 46→72(复用同一 cookie,无新刷新)。测试 49/49
okf: 新增 Penpot 会话轮换不变式 S1-S7
2026-09-28 04:12:16 +08:00
S
Description
DesignOps 中台 monorepo(OpenPencil+Penpot+Excalidraw+StyleDictionary+Storybook)
578 MiB
Languages
Rust 40.9%
TypeScript 31.3%
Clojure 15.8%
JavaScript 4.3%
MDX 1.8%
Other 5.5%