5d0745c470310316fa1d5e67c3ac4e1dace8a247
一、修「卡片挤到一起去了」(用户 2026-10-06 报) 真因=**嵌套 grid**:renderAll 写 `<div class="cols">` 而容器 `#cols` 本身就带 `class="cols"` ⇒ 内层作为外层一个 grid item 先被压到 `min-width:auto`(399px), 再在 399px 里自己切 4 列 ⇒ 每列 89px、卡片 67px,整块挤在左边一条。 实测:col 89px / card 67px / 页高 3192px ⇒ 修后 card 377px / 页高 1415px。 处置:renderAll 只铺列,⛔ 不再包一层。 二、修「卡片上下之间的距离太远」 grid 默认 `align-items:stretch` ⇒ 12 张卡都在「已完成」、另三列空着却四列等高, 整页虚胖。改 `align-items:start` ⇒ 每列各自撑高。卡片 gap 9→6、padding 10→8、 `.col` 的 `min-height:160px`→0。 三、**工作区 / 目标 两个维度纠偏**(用户纠正:「下拉框是选工作区的 跟目标没关系」) 改前:下拉写「全部(N 个目标)」而 N 取的是 `projects.length`=工作区条数 ⇒ 混了维度。 改后:① 标签「项目」→「工作区」;② 选项文字=**目录名(+目标名)**; ③ 计数=「N 个工作区」;④ 概要条分开报「工作区 3 个 / 其中已登记目标 2 个」; ⑤ 装了机制的工作区**一律列出**(含未登记目标的,用户:「加载机制就可以显示」)。 四、修「显示的是目录名,应该是真正名称」 `name = short or title` ⇒ 登记过 short 的区一律显示短名(`vibe-product`)。 改 `title or short`;都没有 ⇒ 「未登记目标 · <dir>」(⛔ 不再印「(未命名 · …)」—— 用户原话「未命名 看不懂个是什么」)。 ⚠️ 核实过:这不是收工操作的副作用(goal.json 的 title/short 收工前后逐字一致)。 五、卡片信息重排(用户:「工作区名称放到卡片下面」) 末行单列工作区名(等宽字体)+ 本工作区角标;工作区名从 badge 堆里挪出来。 本工作区卡片换色突出:判定来自服务端 `self`(启动器注入 `DSH_PM_BOARD_SELF_WS`=启动器上两级),⛔ 前端不硬编码目录名。 六、修时间戳显示成 `1791957640.7257342` 台账 `t_start`/`t_end` 有两种形态(ISO 串 / **纯数字 Unix 秒**),原 fmtWhen 只认前者, 不匹配就**原样返回** ⇒ 印出一串乱数字。补:纯数字(1e9~4e9)走 Date 转本地时间。 另:A 方案(收工 vibe-product)已执行并取证 —— `--set-life 已完成` 自动调 supervise_stop,pid 432 真退出(tasklist 查无)、日志 35s 增量 0 字节(收工前每 32s +1357B)。
工作区目录规范
本工作区(E:\ProgramData\AIProject\aliyun-dsh-server)的文件落位规则。新增任何文件前,先按本文决定放哪;根目录不再新增散落文件。
一、根目录白名单(只允许这几类)
| 留在根的条目 | 移走会出什么事 |
|---|---|
CODEBUDDY.md |
会话启动靠它加载项目指令,移走 = 每次会话失忆 |
state.py |
状态快照入口,CODEBUDDY.md §2 写死引用该路径 |
接续入口_*.md |
state.py 用 os.listdir(工作区根) 扫描,移走即扫不到 ⇒ 新会话第一个信号就错 |
README.md |
本规范 |
scripts/ |
运维脚本(docs-sync-check.sh 等) |
.workbuddy/ .codebuddy/ |
记忆 / 钩子 / 条件规则,工具自管 |
.wbapp_*.genie |
WorkBuddy 宿主应用状态文件 |
| 结构目录 | docs/、交接单/、tmp/、待清理/、归档/ |
⛔ 线目录不进根 —— 一条工作线的多份配套方案,放 docs/<线名>/(同级引用天然有效);该线彻底冷却后再整体移入 归档/。
二、目录结构与职责
aliyun-dsh-server/
├── CODEBUDDY.md 项目指令(自动加载)
├── README.md 本规范
├── state.py 状态快照(1 次调用代替十几轮探索)
├── 接续入口_*.md 工作线唯一入口(必须留在根)
├── docs/ 正式文档,按主题分 8 类
│ ├── 覆盖网络/ ├── 集群与实例/ ├── 客户端与桌面/
│ ├── 会话与接续/ ├── 插件与平台/ ├── 外部接入/
│ ├── 调研与审计/ └── 分布式数据链路/
├── 交接单/ 交接单_*.md、接续包_*.md
├── scripts/ 运维脚本
├── tmp/ 临时产物(本工作区专用)
│ ├── 历史过程目录/ 一次性过程目录(_tmp_seqNN 等)
│ ├── 散落临时文件/ 一次性脚本与命令输出
│ └── 本次整理-20260919/ 本次规整的对照表 / 回滚脚本 / 备份
├── 待清理/ 删除候选,等确认(确认后才真删)
│ └── 中间产物-20260919/
├── 归档/ 保留但不再用
│ ├── poc-dsh-local/ ├── office生成样例/
│ ├── 域名迁移_ai1net_20260919/ └── 积分图发布物/
└── .workbuddy/ .codebuddy/ 工具目录(记忆 / 钩子 / 条件规则)
三、按性质决定落点
| 手上是什么 | 放哪 |
|---|---|
| 方案 / 报告 / 规范 / 复盘(正式文档) | docs/<主题>/ |
| 交给下一棒的单子 | 交接单/ |
| 工作线入口(每个会话第一个读的) | 根,命名 接续入口_<线名>_<日期>.md |
| 一次性脚本、探针输出、中间证据 | tmp/<任务名>-<日期>/ |
| 过程目录(一个任务一整个目录) | tmp/历史过程目录/ |
| 不再引用但需留痕 | 归档/ |
| 疑似可删 | 待清理/,列清单等确认 |
四、命名
| 类型 | 规则 | 例 |
|---|---|---|
| 正式文档 | <主题>_<YYYYMMDD>.md |
集群化改造方案_20260914.md |
| 交接单 / 接续包 | 交接单_<主题>_<日期>.md |
交接单_组密钥加密_20260918.md |
| 线入口 | 接续入口_<线名>_<日期>.md |
放根 |
| 临时脚本 / 输出 | _<用途>.<ext> |
_probe_instance_mem.sh |
| 过程目录 | _tmp_<序号或主题>/ |
_tmp_seq41/ |
日期一律 8 位 YYYYMMDD,不加分隔符。
五、临时文件
tmp/是本工作区自己的临时区;.workbuddy/tmp/由工具自管,两者不混用。- 一个任务一个子目录:
tmp/<任务名>-<YYYYMMDD>/。 - ⛔ 临时文件不进根、不散进
docs/。 - 任务收尾时清掉不用的,只留正式产物。
六、归档与待清理
- 线收官 ⇒ 该线文档归入
docs/<主题>/;多文件方案目录移入归档/。 - 删除一律不可逆 ⇒ 先移入
待清理/,出清单,确认后才真删。 待清理/非空时,收尾报告需提一句它还剩什么。
七、路径变更怎么查
本次规整(2026-09-19)把 119 项从根目录归位:
- 旧路径 → 新路径的权威对照:
tmp/本次整理-20260919/移动对照表.md - 一键回滚:
python tmp/本次整理-20260919/rollback.py - 归位后,同族文档已并入同一目录,同级引用天然仍有效;跨目录引用按对照表查。
- 唯一活跃入口
接续入口_覆盖网络线_20260916.md内的 163 处引用已同步改为新路径。
八、别和文档库搞混(两个「交接单」)
| 本工作区 | 文档库 | |
|---|---|---|
| 路径 | E:\ProgramData\AIProject\aliyun-dsh-server\ |
D:\github\dsh_shenxian\dsh-server-docs\ |
| 性质 | 工作现场:过程文档、临时产物、线入口 | 正式档案库:编号档案 调整方案/01–141、BRIEF.md、UI 规范、INDEX.md |
| 版本控制 | 非 git 仓 | git 仓(单一来源,改动只从本机推送) |
| 改动前 | 抢全局执行锁(handoff-guard.sh --claim-exec) |
抢锁 + 双端对账 |
⛔ 两个库都有 交接单/ 目录,内容不同:本工作区的是「工作线交接单 / 接续包」,文档库的是「正式归档交接单」(CODEBUDDY.md 里 交接单/README.md §二 指的是文档库那份)。动手前先确认路径在哪个库。
Languages
Python
49.8%
JavaScript
34.7%
HTML
10.8%
Shell
4%
CSS
0.5%
Other
0.1%