chichuan
|
a6f69a06ce
|
fix(drive): --latest 扫描不完整时拒绝产出 Top-N 并杜绝 sortTime 泄露
P1-a sortTime 泄露进输出契约 —— 采集端无条件写内部排序字段 sortTime,而 emit 仅在单层(reqDepth==1)经 stripDriveDepthDecorations 整体剥离。depth>1 的所有路径都把 sortTime 漏进 stdout;#971 引入的 --type/时间区间过滤同样读该字段,泄露面随之扩大。修法:在 emitDriveDepthResult 尾部无条件 delete,一处覆盖正常 emit / SIGINT 取消 / unrecoverable partial 三条路径。采集端保持不动(内部字段,排序与筛选时才读)。
P1-b 不完整扫描仍以退出码 0 产出「Top-N」 —— 尾部拒绝 guard 只拦全局截断,不拦递归途中目录读取失败;后者把可恢复失败记进 errs[] 后照常 emit,Top-N 落在漏扫子树的不完整集合上却冒充全局最新。修法:guard 扩为 latest>0 && (truncated || len(errs)>0),走新增 driveLatestIncompleteError(LATEST_SCAN_TRUNCATED / LATEST_SCAN_INCOMPLETE 双 token,二者同真时都带,目录失败详情排在截断之前);unrecoverable 分支在 latest>0 时不吐 partial,直接回根因错误。
恢复命令必须能原样复现原候选集:driveLatestScope 快照查询域(--workspace / --space-id)、扫描根(--folder)与全部过滤条件(--pattern / --type / --start / --end),缺任一项,用户照抄后就在另一个集合上取 Top-N,看起来成功却答非所问。扫描根取 runDriveListDepth 实际使用的 rootFolderID 而非重读 flag:用户可能传 URL,解析后的 ID 才是真正被扫的目标。「按原范围重跑」原样带回原 --folder,原调用在空间根时不带。
拒绝产出后 errors[] 不再进 stdout,目录名与服务端错误文本从 JSON(编码会转义)挪进纯文本 stderr —— 原样透传会让 ANSI/OSC 序列被终端执行,可清屏、伪造彩色成功、隐藏后续输出、改窗口标题,Agent 场景还会污染上下文。改为复用仓库既有的 output.SanitizeForTerminal(canonical 实现在 pkg/validate),再把它按设计保留的换行与制表符折成空格。Reason 无需处理:它是 classifyDriveDepthReason 的固定三值映射。latest=0 的既有路径仍把原值放进 errors[] JSON,不受影响。
Windows 下恢复命令的注入面:POSIX 单引号在 cmd.exe 里不是引用,--space-id 传入 sp-7 加 & 加 whoami 时,单引号包裹后的片段粘贴进 cmd 仍会执行 whoami;而唯一做真 shell 往返验证的测试被 build tag 排除在 Windows 之外。不采用「按目标 shell 生成引用」的路线:cmd.exe 的双引号挡不住 %VAR% 展开,PowerShell 的内嵌单引号写法又与 POSIX 不同,且生成命令时无法知道用户会粘贴进哪个 shell。改为平台分流 —— POSIX 构建继续单引号内联;Windows 构建只内联全部由白名单字符组成的值,含元字符的值不进命令,降级为占位符加 strconv.Quote 展示行并标注非可执行(与 internal/auth 展示 profile 标识的既有做法同一思路)。安全性由此不再依赖引用是否正确,而依赖「不受信任的值不进入可执行命令」这个更强的不变量。
顺带修掉白名单里的一个漏洞:% 原本免引用(当初为 URL 的 %20),但 cmd.exe 会无条件展开 %VAR%,于是 %PATH% 这类值会被判为安全并原样内联。% 已移除,POSIX 侧只是多一对无害引号;并新增逐字符断言,锁定白名单不含 POSIX sh / PowerShell / cmd.exe 三套元字符,同时作为该缺陷的回归锁。
两条平台策略写成与构建平台无关的纯函数,平台文件只做一行编译期绑定,因此 Windows 形态能在 POSIX 机器上端到端验证 —— 否则该分支在 POSIX 上永不可达,平台覆盖率门禁会直接报未覆盖(第一版实测 97.3451%)。另做了一次本地全量模拟:临时把 POSIX 绑定切到 Windows 策略后跑全部测试,唯一失败的是专门断言绑定的那条,据此确认没有断言会在 Windows runner 误报,并借此修掉两条原本只在 POSIX 下成立的断言。
SIGINT 取消路径刻意不套用该防线:取消由用户主动发起、退出码 130 已明确告知结果不完整,partial 是用户的预期产物。已加注释说明并补测试锁定该契约。
skill 文档(mono/multi 两份 drive.md)原在过滤章节声明「触顶截断 truncated=true、退出码 0」,同章节又说明可与 --latest 组合 —— 组合后该描述不再成立,故补一条拒绝产出的说明,并注明 Windows 下的占位符形态,避免 agent 按旧契约预期退出码或误解析。
测试命名统一 TestCrossPlatformCoverage 前缀:平台覆盖率门禁 run-platform-coverage-gate.sh 只跑匹配 ^(TestAllShortcuts|TestCrossPlatformCoverage) 的测试。本 PR 因新增带平台名的 go:build 文件被判定 platform_sensitive,Coverage (macOS) / (Windows) 由 SKIPPED 转为实跑;不带该前缀时新增语句在平台 profile 里是零覆盖,实测 69.0476%,改名后 100.0000%(当前 114 条语句仍为 100%)。已在测试文件头写明该前缀是门禁约定而非命名风格。
发布说明按 .changes fragment 机制落在 .changes/899-drive-latest-incomplete-scan.md,不改 CHANGELOG.md。
|
2026-08-14 14:02:36 +08:00 |
|
chichuan
|
41a3724e9e
|
Merge branch 'main' into feat/drive-sync-family
|
2026-08-13 22:07:16 +08:00 |
|
chichuan
|
671a41437d
|
Merge branch 'main' into feat/drive-sync-family
|
2026-08-13 17:58:26 +08:00 |
|
chichuan
|
8c00068364
|
fix(drive): harden folder mirror safety
|
2026-08-13 15:49:59 +08:00 |
|
卷心菜
|
75bd518447
|
fix(drive): honor --type folder in --latest top-N and harden filter mutexes
|
2026-08-13 15:19:46 +08:00 |
|
卷心菜
|
9c59206d2f
|
feat(drive): add drive list --type/--start/--end client-side filtering
|
2026-08-13 14:12:13 +08:00 |
|
Dennis
|
a203572ee3
|
feat(chat): unify shortcut auto-pagination controls
|
2026-08-13 11:35:27 +08:00 |
|
chichuan
|
357b0955b1
|
Merge remote-tracking branch 'origin/main' into feat/drive-sync-family
# Conflicts:
# skills/multi/dingtalk-drive/SKILL.md
|
2026-08-12 21:33:52 +08:00 |
|
RuiGong01
|
f875b1bc87
|
Merge branch 'main' into dws_optimization
|
2026-08-12 20:54:37 +08:00 |
|
chichuan
|
1dabfa1dc6
|
fix(drive): keep pull partial results on stdout
|
2026-08-12 20:48:45 +08:00 |
|
chichuan
|
9818f7779a
|
Merge branch 'main' into feat/drive-sync-family
|
2026-08-12 20:08:13 +08:00 |
|
chichuan
|
21c6581975
|
docs(drive): keep confirmation out of examples
|
2026-08-12 18:31:09 +08:00 |
|
长真
|
2c46213257
|
docs(chat): to #85387314 clarify image markdown guide
|
2026-08-12 18:04:17 +08:00 |
|
ruigong
|
51dc3df91b
|
fix(skill): clarify document-space routing in doc/drive/wiki descriptions
|
2026-08-12 17:14:20 +08:00 |
|
chichuan
|
dacf166935
|
fix(drive): require confirmation for folder sync writes
|
2026-08-12 16:34:10 +08:00 |
|
chichuan
|
f6a699227e
|
Merge branch 'main' into feat/drive-sync-family
|
2026-08-12 12:44:39 +08:00 |
|
chichuan
|
1d4c51a4d3
|
feat(drive): add local/Drive folder status, pull, push and sync
|
2026-08-12 11:37:47 +08:00 |
|
Dennis
|
ae309b5846
|
feat(drive): harden and expand shortcut workflows
|
2026-08-12 11:11:46 +08:00 |
|
玉澜
|
8cf23ee7cb
|
Merge remote-tracking branch 'upstream/main' into feat/skill-mode-migration
|
2026-08-12 08:47:01 +08:00 |
|
前津
|
bbc2eb111c
|
Merge remote-tracking branch 'upstream/main' into feat/card-send-native-mentions
|
2026-08-12 00:54:37 +08:00 |
|
前津
|
eebd6b2a1c
|
fix(chat): accept card update acknowledgement
|
2026-08-11 23:44:53 +08:00 |
|
john
|
6140e503ec
|
Merge branch 'main' into feat/skill-mode-migration
|
2026-08-11 23:31:08 +08:00 |
|
前津
|
b1bfe6002d
|
Revert "docs(skill): route create-only cards to native command"
This reverts commit 8e8e3a3ce8.
|
2026-08-11 22:54:02 +08:00 |
|
Dennis
|
38832448d2
|
Merge remote-tracking branch 'origin/main' into codex/minutes-shortcuts
|
2026-08-11 22:53:51 +08:00 |
|
前津
|
8e8e3a3ce8
|
docs(skill): route create-only cards to native command
|
2026-08-11 22:52:24 +08:00 |
|
john
|
4b93a1cb28
|
Merge branch 'main' into feat/pull_knowledge_base_dynamic_1
|
2026-08-11 22:05:50 +08:00 |
|
Dennis
|
66468c703f
|
fix(minutes): preserve upload recovery and schema compatibility
|
2026-08-11 17:06:22 +08:00 |
|
john
|
c170a464e1
|
Merge branch 'main' into feat/skill-mode-migration
|
2026-08-11 17:00:13 +08:00 |
|
fengbai
|
fdf3e8cc3b
|
docs(skills): sync calendar reference between mono and multi layouts
|
2026-08-11 16:21:20 +08:00 |
|
john
|
16273de554
|
Merge branch 'main' into feat/skill-mode-migration
|
2026-08-11 16:13:48 +08:00 |
|
john
|
aabee99e3f
|
Merge branch 'main' into feat/skill-mode-migration
|
2026-08-11 15:35:23 +08:00 |
|
克谨
|
7849116a69
|
Merge remote-tracking branch 'origin/main' into codex/fix-im-reliability
|
2026-08-11 15:17:59 +08:00 |
|
chichuan
|
211a5fa393
|
Merge branch 'main' into codex/aitable-workflow-run-history
|
2026-08-11 14:33:14 +08:00 |
|
玉澜
|
9e3a083c27
|
Merge remote-tracking branch 'origin/main' into feat/skill-mode-migration
|
2026-08-11 14:12:43 +08:00 |
|
克谨
|
d38868c8aa
|
Merge origin/main into codex/fix-im-reliability
|
2026-08-11 13:51:27 +08:00 |
|
xlb1130
|
9377abc5f6
|
Merge branch 'main' into feat/im-page-all-pagination
|
2026-08-11 12:38:16 +08:00 |
|
玉澜
|
fbdb5e8d4d
|
Merge remote-tracking branch 'origin/main' into feat/skill-mode-migration
|
2026-08-11 12:07:58 +08:00 |
|
克谨
|
e8ca78fe49
|
Merge origin/main into codex/fix-im-reliability
|
2026-08-11 12:07:27 +08:00 |
|
玉澜
|
cc7e7bf0e0
|
Merge remote-tracking branch 'origin/main' into feat/skill-mode-migration
# Conflicts:
# internal/app/skill_setup.go
# internal/app/skill_setup_test.go
|
2026-08-11 12:06:59 +08:00 |
|
克谨
|
28bc577e88
|
Merge origin/main into codex/fix-im-reliability
|
2026-08-11 11:50:22 +08:00 |
|
李晟
|
28227b19c7
|
Merge branch 'main' into codex/aitable-workflow-run-history
|
2026-08-11 11:28:44 +08:00 |
|
chichuan
|
2ec25ebb98
|
Merge branch 'main' into fix/minutes-permission-apply-policy-int
|
2026-08-11 11:08:54 +08:00 |
|
liangxiaoqin.lxq
|
ae9caa06af
|
cr修复
|
2026-08-11 10:57:44 +08:00 |
|
liangxiaoqin.lxq
|
72a9902254
|
wiki feed list命令
|
2026-08-11 10:57:44 +08:00 |
|
liangxiaoqin.lxq
|
5f337e0ce5
|
wiki feed list命令:新增时间格式化/字段裁剪
|
2026-08-11 10:57:44 +08:00 |
|
xlb1130
|
2274fd96f0
|
Merge branch 'main' into feat/im-page-all-pagination
|
2026-08-11 10:55:10 +08:00 |
|
李晟
|
2f925d29fd
|
Merge branch 'main' into codex/aitable-workflow-run-history
|
2026-08-11 09:26:07 +08:00 |
|
chichuan
|
783e1eeef9
|
fix(ci): stabilize minutes coverage contracts
|
2026-08-11 00:13:48 +08:00 |
|
玉澜
|
bc3d92ccaf
|
Merge remote-tracking branch 'origin/main' into pr-922
|
2026-08-10 22:36:07 +08:00 |
|
xlb1130
|
9834a84888
|
Merge branch 'main' into feat/im-page-all-pagination
|
2026-08-10 22:31:18 +08:00 |
|