@marsken/dsh-studio 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -80,9 +80,17 @@ STUDIO_TOKEN=$(sudo journalctl -u dsh-web -n 50 | grep -o 'token=[A-Za-z0-9_-]*'
80
80
  8. 真库自检:`npm run smoke:store -- ~/.dsh/dsh-studio.db`(把 `.db/-wal/-shm` 拷到临时目录起一遍真实 `StudioStore`,专抓「空库能起、真库就炸」的导入问题)
81
81
  9. 成本数字可疑时跑 `npm run verify:usage [taskId]`:ssh 取原始会话日志现算一遍 token,与 `/costs` 对账(两条路径不同:一条走 session-usage 的 zstd 缓存,一条走 usage.js 直接解析)。
82
82
  10. 发版后跑 `npm run verify:release`:比对 package.json 版本 / 本地 tag / origin main 与 tag / npm registry,不一致直接退出码 1。
83
- 11. 全闭环自检:`STUDIO_BASE=http://<host>:18080 node tools/e2e-loop.mjs`——真建一条需求和卡,跑完需求评审→拆卡→各列→代码事实→用例→验收→版本发布。**会写入真实数据**,跑完记得清。
83
+ 11. 全闭环自检:`STUDIO_BASE=http://<host>:18080 node tools/e2e-loop.mjs`——真建一条需求和卡,跑完澄清门禁→评审→拆卡→各列→代码事实→用例→验收→版本发布;每步都是断言,失败退出码非 0。
84
+ **默认跑完自动删除自己建的数据**(看结果加 `--keep`)。每周一 09:00 由定时任务自动跑一次。
84
85
  12. CI 在 `.github/workflows/ci.yml`:语法 → 契约 → `web/` 里 `pnpm install --frozen-lockfile && pnpm build` → `cmp dist/client.js client.js` → `git diff --exit-code`(产物必须可复现,改了前端忘记构建会直接红)
85
86
 
87
+ ## 4.5 需求澄清(比代码更靠前的一道门)
88
+
89
+ - **不清楚就一直问,问到能一句话复述「交付什么、给谁用、怎么算完成」为止**。宁可多问三轮,也不要按猜测开工。
90
+ - 平台上的三问(有没有服务端 / 鉴权谁做 / 交付边界)是**最低要求**,不是全部;答完仍不清楚的继续问。
91
+ - **绝不把假设写成「遗留」**:遗留是双方认可的取舍,没问过的东西只能写成「待确认」,并且必须真的去确认。
92
+ - 反例(2026-11-15):把「管理后台」理解成只做前端 + 内存 mock,还把「无真实后端」写进签收记录当遗留——用户看到的是"说好了不做",实际是"根本没问"。
93
+
86
94
  ## 5. 禁止事项
87
95
 
88
96
  - ❌ 手改 `dist/client.js` 或根 `client.js`(会被下次构建覆盖)
package/README.md CHANGED
@@ -640,7 +640,7 @@ DSH 的 web 只有一张登录 cookie,所有人共用;所以平台自己记
640
640
  - GitLab 同步 Issue 与**关联 MR**(`/issues/:iid/related_merge_requests`);卡上挂 MR 后「从 GitLab 核对」会拉 MR 详情、`/changes` 与 `/pipelines`(流水线状态进 `coding.gitlab`)。**不同步 MR 的评论**;MR 的合并/关闭状态要等下一次同步才反映到卡上。
641
641
  - 用例记录存在卡上(`task.cases`):跨卡的**用例总览**页签可以勾选批量跑(结果回写各自卡、失败照旧开缺陷),也支持**回归套件**(`/suite/*`:按规则或手选固定一批,一键重跑,`by` 记「套件:名字」)。但还没有「回归套件」这个对象——固定的用例集合、一键重跑、历次通过率趋势都还没有,批量跑是临时勾选、跑完即散。
642
642
  - 缺陷卡的严重级别默认 `P2`、优先级 `normal`:自动建卡不猜严重程度,由人或在评论里改。
643
- - 派单失败会记在 `/studio-api/integrations` 与卡片抽屉里,不会自动重试。
643
+ - 派单失败会记在 `/studio-api/integrations` 与卡片抽屉里,并按 `agentRetryPlan` **自动重试**(间隔递增、有上限);超过上限才挂阻塞等人。
644
644
  - 集成健康现在会**落盘保留最近一次结果**(SQLite 的 `meta:side:integration-health`,不进 state、不涨 revision、不占快照):重启 dsh-web 后四条通道不再回到「还没用过」。仍然只是「最近一次」,没有按小时/按天的长期趋势(要趋势还得上采集)。
645
645
  - 工具层权限只认会话名(`studio-<taskId>-<expertId>`):如果哪个 agent 用了别的会话名,就会被当成「名单外」拦下写操作,需要在审计里看一眼。
646
646
  - 同一张卡在同一列只自动派一次(防止来回循环),需要再跑一轮就点「马上处理」,或在评论里 `@` 它。
@@ -652,7 +652,7 @@ DSH 的 web 只有一张登录 cookie,所有人共用;所以平台自己记
652
652
  - 归档出来的是云盘里的 Markdown 文件,不是飞书在线文档:同事能打开、能下载、能被搜索,但不能在线协同编辑与评论;正文由平台覆盖更新,人工在飞书上改的内容下次覆盖会丢。
653
653
  - 归档是同步写:一次要写很多产物时(比如批量补历史)会挨个调 `lark-cli`,几十份文档需要十几秒到几十秒。
654
654
  - 需求基线是快照:2026-11-13 起可以**逐行对比**「基线 vs 最新 PRD」(只读,`web/src/studio/diff.js` 的 LCS),但**不能回滚**——要回到旧版得把旧正文重新贴一份再设为基线;需求的评审仍是人工点按钮,没有独立审批流。
655
- - AI Coding 执行记录靠 agent/人如实登记:目前**不会自动从 GitLab 拉 MR 的 diff、commit 列表与单测结果**,`commits` / `files` / 单测数都是上报值,不是从仓库校验过的事实。下一步可用 `glab mr diff` + 流水线接口做自动回填。
655
+ - AI Coding 执行记录由 agent/人登记;卡上挂了 MR 后「从 GitLab 核对」(`/coding/gitlab`)会拉 MR 详情、`/changes`(改动文件清单 + 提交数)与 `/pipelines` 做事实比对。**仍缺**:提交列表逐条、单测结果、CI 产物——这几项目前只有上报值,没有仓库侧证据。下一步可用 `glab mr diff` + 流水线接口做自动回填。
656
656
  - 「业务负责人」与「期望完成」是可选项:没填时抽屉里显示「未指派」/「未排期」,不是数据丢失;需要时补上再点「保存改动」。
657
657
 
658
658
  ## 卡片详情(抽屉)布局 与 用例结果展示(2026-11-08)