Files
Agent-System/.doc/ops/long-term/2026-09-19-audit-remainder.md
T

10 KiB
Raw Blame History

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;确认包来源

相关链接

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

设计收口(2026-09-22 W4,未实施)

上表中 B1/B3/B4/B5/B7/B11/F1/F4/F7/F8/I1/I4/I6 的选定做法见 ../../system-design/2026-09-22-t20-hardening-design.md;任务 ../short-term/2026-09-22-t20-design-items.md。低风险已实现项见 ../short-term/2026-09-22-t20-lowrisk-hardening.md。F4/F7/I6 仍分别卡产品、鉴权专项、环境授权。