Claim P0 hotfixes waves, correct schema snapshot to 57, and park non-P0 findings in long-term backlog. Co-authored-by: Cursor <cursoragent@cursor.com>
9.8 KiB
9.8 KiB
title, status, created, updated
| title | status | created | updated |
|---|---|---|---|
| 2026-09-19 审计剩余项(medium/low,不挡已合入批 1–4) | planned | 2026-09-19 | 2026-09-19 |
2026-09-19 审计剩余项
动机
系统深度体检 的 C1–C4 与 H1–H10 已按四批合入 dev。下列 medium/low 仍真实存在,但不进入本轮发布回退。
成功标准
- 每条有独立 short-term、负例测试或明确关闭理由后再标 done
- 不把本清单自动写成 gap-matrix blocker
依赖
- 批 1–4 已在
dev:844f757、08f4e0b、a2a49a6、d73bc79
暂不启动原因
本轮范围只到 critical + high。下列项要么是加固、要么需要产品/合规决策,要么改动面大于收益。
进展(2026-09-19,fix/audit-remainder-closeout)
| ID | 结果 |
|---|---|
| M1 | done。nosniff / DENY / Referrer-Policy / 本站 CSP。TestP0_SecurityHeaders |
| M2 | done。TTL 钳到人工 15 分钟、小队 30 分钟;人工租约前 CheckHumanCanEdit。TestAcquireLeaseClampsHumanTTL |
| M3 | done(本项可落地部分)。低置信度才做关键词改道;称呼取用户名。高置信度意图层改造不在本项把模板整段搬走 |
| M4 | done。parseDecimalID 拒绝 u_sess_*。TestParseDecimalIDRejectsSessionTokens |
| M5 | done。Server.Start 不再二次启动并吞错。main 仍调用 Runtime.Start,该方法本身已幂等 |
| M6 | done(上限)。硬上限 4096,淘汰最久未访问。会话 id 仍由客户端提供,因为历史恢复按该 id 查找;改成只接受服务端签发会打断现有对话协议 |
| M9 | done。dev compose 不再声明 SEMANTIC_SUMMARY_REPLACE。dev=MiniMax-M2.7-highspeed、test/main=MiniMax-M3 确认为有意分叉,已写在 compose 注释 |
| M10 | done(写明路径,不放开门闩)。OpsCutoverPromotionPath:dev 观察后用晋升回执写 test,再写 main。ValidateOpsCutover 仍拒绝 test/main |
| M13 | done。SQL 迁到 deploy/postgres/archive/pre-goose/。代码与脚本无引用 |
| M14 | done。冻结计划找不到职责行则报错;显式空三权仍为 0。TestResolveDocTask_NoneDutiesStayZero |
| L1 | done。健康检查 2 秒缓存 + 2 秒 DB 超时 |
| L2 | done。SSE marshal 失败写 event: error 帧 |
| L3 | done。ReplayPlan.Digest 含 DryRun;dry-run 摘要不能授权 apply |
| M15 | done。生产 claimSQL 与 MemoryBus 共用 VersionClaimable:版本 0 可领,版本化事件不能跳过 checkpoint。checkpoint 只前进。TestVersionClaimableMatchesMemoryBusGap、TestGapDoesNotSkipVersion |
| H3 负例 | done。TestListChatSessions_CrossUserIs403 |
| FE 缓存 | done(版本字段)。窗口缓存写入 {schema,data},无 schema 的旧载荷丢弃。window cache: 无 schema |
| FE lucide | 关闭理由:package-lock.json 锁定 lucide-react@1.42.0,来源 registry.npmjs.org,带 integrity。^1.16.0 是合法的 1.x 范围,不是来源不明的包 |
| M7 | done(出站意图 + 同键重放)。document_content_projections 与账本同一事务写入;投影成功才销账。TestDocRevision_PatchOrder_RetryProjectsWithoutSecondLedgerCommit。账本库与正文库仍不是一个 SQL 事务,进程退出后靠未投影行重放,不靠客户端记忆 |
| FE App.tsx | 部分收口。登录壳不再静态引用重模块。本地缓存、登录同步、文档补水、服务端文档同步、生命周期、发送消息、块编辑、对话流/任务流重试、卡片动作、立项和成员写操作已分别抽出。文档栏在 DocumentPane,聊天栏在 ChatColumn,AppShell 与工作台弹窗在 WorkbenchView。App.tsx 仍持有会话状态,不再挂 <AppShell |
| H1-del | 关闭理由:allowLegacyTestPrincipal 仍被 AllowInMemory && ContextDbHost=="" 的 dev/test 内存测试使用。删除会把这批测试变成未登录 401。保留告警,删除另开、先改测试夹具 |
仍开放:rd_proposal 终稿未对齐模板标题(没有新的真 PI)。U7 登录表单可见未测(本机无头 Chromium 缺 libatk),也不把 1.4 秒模块图写成「较十几秒基线下降 50%」。见 U7 报告。工作台壳已挪到 WorkbenchView。dev schema 53。U6 仍不加索引。TestArchitectureBoundaries 仍有 6 条新 import(intent/squad/template → workflowdef),不是本轮容器改动。test/main 仍是 schema 52。评审门禁的法规表误伤已修,保存的 P3 终稿不再报「问题行缺少」。
红线关闭(不是实现):
- SWBOOT-10:保持 fail-closed stub。未获独立授权前不接真实仓库写入。
- FAV live:禁止整支 merge;
FAV_DEGRADED_READ=false;live 需要各阶段至少 7 天观察窗,本轮不放量。 - D7:合规签字前禁止按留存口径物理删除。盘点已完成,口径仍
pending-compliance-signoff。
清单
| ID | 项 | 位置 | 说明 |
|---|---|---|---|
| M1 | 安全响应头 | internal/server/server.go CORS 中间件 |
补 nosniff / X-Frame-Options / Referrer-Policy / 收敛 CSP |
| M2 | 租约 TTL 无上限 | handlers.go AcquireLease |
clamp 到 DefaultHumanLeaseTTL,Acquire 前校验编辑权 |
| M3 | 关键词改写意图 + 硬编码「张工」 | internal/coordinator/engine.go |
移到意图层并加置信度;称呼取用户名 |
| M4 | fmt.Sscanf 解析 u_sess_* 得到 UserID=0 |
同上 | 统一数字 ID |
| M5 | Runtime.Start 双调用且吞错 |
cmd/server/main.go 与 server.go |
sync.Once 或删 Server.Start 内调用 |
| M6 | sessions 无硬上限 | server.go cleanStaleSessionsLocked |
LRU + 服务端发 session id |
| M7 | 修订三阶段写无事务 | document_revision_handlers.go |
已落地:00053 投影意图与账本同事务;成功后销账。见进展表 |
| M9 | SEMANTIC_SUMMARY_REPLACE 只在 dev compose 声明;dev/test 默认模型不一致 |
compose | 删未接线 flag 并钉死测试;确认 M3 是否刻意 |
| M10 | cutover 只允许 dev |
internal/events/cutover.go |
写明 test/main 切换路径 |
| M13 | deploy/postgres/migrations/ 死目录 |
与 goose 重复 | 确认无外部依赖后归档 |
| M14 | ResolveDocTask 静默 0 值三权 | orchestrator.go |
找不到 duties 应报错 |
| M15 | PG 投递允许乱序,MemoryBus 有 gap | dispatcher.go vs bus.go |
对齐测试替身与生产顺序语义 |
| L1 | health 每次打两次 DB | handlers.go |
短缓存 + 超时 |
| L2 | SSE marshal 错误被吞 | task_run_handlers.go |
失败写 error 帧 |
| L3 | ReplayPlan digest 不含 DryRun | replay.go |
纳入 digest |
| H1-del | 删除 legacy user-id=1 兜底 | auth_middleware.go |
已加日志;删除前盘点调用方 |
| FE | App.tsx 巨石、localStorage 无版本、lucide 版本确认 | web/ |
拆 hook;缓存加 version;确认包来源 |
相关链接
- 审计:../../audit/2026-09-19-system-deep-audit.md
- 批 1–3 报告:
.doc/test-reports/2026-09-19-audit-b*.md
2026-09-20 系统体检增补(非 P0,不挡本轮热修)
来源:../../audit/2026-09-20-system-triage-audit.md。P0 项走 ../../remediation/2026-09-20-p0-remediation-plan.md,不写入本表为「已关闭」。
| ID | 项 | 位置 | 说明 |
|---|---|---|---|
| T20-B1 | 登录限流信任 XFF 首跳 | login_rate_limit.go |
仅在可信代理后启用;否则用 RemoteAddr |
| T20-B2 | events cancelFns 只增不减 |
events/worker.go |
claim 完成后从切片移除 |
| T20-B3 | docrevision/docgov 全局锁内 DB I/O | docrevision/* docgov/lease.go |
锁外 hydrate / 按文档分锁 |
| T20-B4 | 主库连接池无 statement_timeout | bizdev/service.go |
对齐 kb 池调优 |
| T20-B5 | chat 消息与 turn 非原子 | chat/session.go |
同事务或补偿明确 |
| T20-B6 | idemLocks map 永不清理 |
taskrun/manager.go |
TTL 或终态回收 |
| T20-B7 | Shutdown 5s vs 长任务 | cmd/server/main.go |
拉长优雅退出或拒绝新任务 |
| T20-B8 | hasMessageScopeColumns 无缓存 |
message_scope_io.go |
启动缓存一次 |
| T20-B9 | C1 记忆写入不失效缓存 | chat_memory.go |
upsert 后 Invalidate |
| T20-B10 | SSE 头先写再 Subscribe | task_run_handlers.go |
对齐 sse.go 顺序 |
| T20-B11 | GET chat/stream 消息走 query | sse.go |
改 POST body |
| T20-F1 | useChatWindow 切会话竞态 |
useChatWindow.ts |
loadOlder 等加 generation/abort |
| T20-F2 | PLAN_CONFIRM 无 try/catch | useCardActions.ts |
失败复位 executing |
| T20-F3 | turn Map 只增不减 | useTurnRuntime.ts |
removeTurn 接线 |
| T20-F4 | 重置密码死功能 + 硬编码文案 | UsersSection.tsx |
接真实 API 或隐藏按钮 |
| T20-F5 | ErrorBoundary 仅顶层 | main.tsx |
栏级边界 |
| T20-F6 | SSE 帧不兼容 \r\n |
chatStream.ts |
规范 CRLF |
| T20-F7 | token 存 localStorage + 无全局 401 | auth.ts |
HttpOnly cookie 专项 |
| T20-F8 | blob URL / 轮询叠加 / 统计迟到 | 多处 | 加固批 |
| T20-I1 | 容器 root、无 mem/cpu 限制 | compose / Dockerfile | 非 root + resources |
| T20-I2 | 健康检查路径三环境不一致 | compose | 统一 /ready |
| T20-I3 | main events 挂 shared-net | docker-compose.main.yml |
对齐 dev/test |
| T20-I4 | init 策略三套分叉 | compose volumes | 统一 extensions_init |
| T20-I5 | Dockerfile Go 1.23 基镜像 | deploy/app/Dockerfile |
钉 1.27.1 |
| T20-I6 | backup 无定时调度 | ops | systemd/cron;RPO 60m |
| T20-I7 | main 分支对齐晋升专项 | git main vs schema 52 | 独立授权;含 00057 改名预演 |
| T20-I8 | 默认 short 测依赖外网 docker 镜像 | pi_runner_image_test.go |
Short 跳过或本地 fixture |