From 15b388fc8669e23168c4e4fd38b66598c4bcf324 Mon Sep 17 00:00:00 2001 From: weichen Date: Wed, 23 Sep 2026 12:49:33 +0000 Subject: [PATCH] docs(ops): salvage task docs and mineru gofmt in closeout batch --- .../2026-09-21-intent-confirm-stage-aware.md | 41 ++++++++++++ .../2026-09-21-workflow-scope-weighting.md | 59 ++++++++++++++++ .../2026-09-23-worktree-closeout-batch.md | 67 +++++++++++++++++++ internal/mineru/client.go | 18 ++--- 4 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 .doc/ops/short-term/2026-09-21-intent-confirm-stage-aware.md create mode 100644 .doc/ops/short-term/2026-09-21-workflow-scope-weighting.md create mode 100644 .doc/ops/short-term/2026-09-23-worktree-closeout-batch.md diff --git a/.doc/ops/short-term/2026-09-21-intent-confirm-stage-aware.md b/.doc/ops/short-term/2026-09-21-intent-confirm-stage-aware.md new file mode 100644 index 00000000..b8482ff0 --- /dev/null +++ b/.doc/ops/short-term/2026-09-21-intent-confirm-stage-aware.md @@ -0,0 +1,41 @@ +--- +title: "意图确认优先与阶段感知消解" +status: done +created: 2026-09-21 +updated: 2026-09-21 +owner: Cursor +branch: fix/intent-confirm-stage-aware-2026-09-21 +worktree: .worktrees/intent-confirm-stage-aware-2026-09-21 +base_dev_sha: 49fb68fec1ea56f00616c23d08efb15950c2300d +mutex: intent+web+docgov +--- + +# 意图确认优先与阶段感知消解 + +## 目标 + +商务流初期「整理一下需求」等弱写表述 → 阶段感知消解为 intake,经确认卡片拍板后再执行;不强指令误伤。扩展已合入的工作流作用域修复。 + +## 范围 + +- 批次5 `feat(intent)`:弱写动词 + `stageAwareRequirementsTask` + `needs_confirmation` +- 批次6 `feat(coordinator)`:智能确认门禁(PendingExpectation) +- 批次7 `feat(web)`:阶段错误降级聊天一次 +- 批次8:验收报告 + 合回 `dev` + 真实 PI 抽样 + +## 步骤 + +1. [x] 批次5–7 实现与单元门禁 +2. [x] 批次8:合入 `dev@0c401904` + rebuild + 真实链路抽样(陈威项目 6579) + +## 验收标准 + +- [x] V0.1「整理一下需求」→ 确认 →「好」→ intake(单元 + 真实 PI) +- [x] 强指令不强制确认;「编写用户需求表」无 rdev 误拦 +- [x] 合入后真实 PI 抽样(见测试报告) + +## 相关链接 + +- Plan: `~/.cursor/plans/意图确认优先与阶段感知_7ab2c4d5.plan.md` +- Prior (done): `.doc/archive/ops/2026-09-21-intent-workflow-scoping.md` +- Test report: `.doc/test-reports/2026-09-21-intent-confirm-stage-aware-test-report.md` diff --git a/.doc/ops/short-term/2026-09-21-workflow-scope-weighting.md b/.doc/ops/short-term/2026-09-21-workflow-scope-weighting.md new file mode 100644 index 00000000..a4308657 --- /dev/null +++ b/.doc/ops/short-term/2026-09-21-workflow-scope-weighting.md @@ -0,0 +1,59 @@ +--- +title: "工作流作用域权重化" +status: done +created: 2026-09-21 +updated: 2026-09-21 +owner: Cursor +branch: feature/workflow-scope-weighting-2026-09-21 +worktree: .worktrees/workflow-scope-weighting-2026-09-21 +base_dev_sha: 10aee3feb478c550adc9959f2d3a8d17cd5b48a0 +write_scope: [internal/workflowscope, internal/intent, internal/server, internal/coordinator, internal/config, internal/sysadmin, web/src, docker-compose.dev.yml, docker-compose.test.yml, docker-compose.main.yml, .env.example, .doc] +head_sha: 7723a5515948788602b342cdda1137c90fee311b +deployment: deployed +cleanup: pending +mutex: intent+web+docgov +--- + +# 工作流作用域权重化 + +## 目标 + +把「句子里出现他流文档短语就硬拦截」改为「匹配质量 × 工作流关系权重」裁决。激活流优先;只有他流精确命中明显压过激活流时才跨流。只读跨流在查看权限通过后放行并注明归属;写动作仍引导到项目设置切换(跨流写在现架构下不可执行)。`WORKFLOW_SCOPE_MODE` 默认 `strict`,保持现状。 + +## 范围 + +- 新建 `internal/workflowscope`(开关、关系权重、打分裁决) +- 服务端文档读取、意图填槽、前端模板匹配改用同一裁决 +- compose / `.env.example` / sysadmin 登记开关 +- dev 真实环境验收与测试报告 + +## 非目标 + +- 不迁移 `document_records`,不加 `workflow_instance_id` +- 不改工作流切换 / 激活接口 +- 不改 `production_ready`,不晋升 test/main,不动项目 143 + +## 步骤 + +1. [x] 打分内核与开关 +2. [x] 服务端只读跨流放行与查看权限 +3. [x] 意图填槽改打分 +4. [x] 前端模板匹配改打分 +5. [x] 开关声明、真实验收、报告、合回 dev + +## 验收标准 + +- [x] strict 模式与现有跨流拦截断言一致 +- [x] weighted 下激活流精确名压过他流短语,不再误拦 +- [x] weighted 下只读精确点名他流文档可放行并注明归属;写动作仍拦截 +- [x] 无查看权限 / 实例已关闭时跨流只读拒绝 +- [x] 空激活键不过滤 + +## 相关链接 + +- Plan: `~/.cursor/plans/工作流作用域权重化_411b5e35.plan.md` +- Test report: `.doc/test-reports/2026-09-21-workflow-scope-weighting-test-report.md` + +## 证据 / 备注 + +查看权限:治理实例 `ViewableTaskKeys` 只含当前实例已启用文档。他流任务键不在快照内,不能把它当成「显式隐藏」。判定为:解析失败按 `failClosedAuthz` 拒绝;`ViewableTaskKeys` 为空(实例已关闭)拒绝;键落在当前实例但不可见则拒绝;键不属于当前实例、且调用方已能查看该实例文档时允许只读。 diff --git a/.doc/ops/short-term/2026-09-23-worktree-closeout-batch.md b/.doc/ops/short-term/2026-09-23-worktree-closeout-batch.md new file mode 100644 index 00000000..580890ef --- /dev/null +++ b/.doc/ops/short-term/2026-09-23-worktree-closeout-batch.md @@ -0,0 +1,67 @@ +--- +title: "Worktree 批量收口:合入 dev + 清理" +task_id: "worktree-closeout-batch-2026-09-23" +status: in_progress +created: 2026-09-23 +updated: 2026-09-23 +owner: Cursor +task_type: operations +task_tier: multi_stage +policy_revision: "agent-governance-2026-09-21-r1 @ 3f14d7fa" +branch: feature/worktree-closeout-batch-2026-09-23 +worktree: .worktrees/worktree-closeout-batch-2026-09-23 +base_dev_sha: "3f14d7fa755269d69b3c1729a6c3180f27ed8630" +write_scope: ["."] +allowed_environments: [] +head_sha: "" +mutex: "git:dev+worktree-cleanup" +review_state: pending +integration_state: pending +deployment: not_required +cleanup: pending +cleanup_owner: "独立维护者" +cleanup_trigger: "全部合入验证通过且 worktree 清理完成" +remote_sync: not_requested +--- + +# Worktree 批量收口:合入 dev + 清理 + +## 用户目标与授权 + +- 用户目标:检查当前所有 worktree,完成后测试合入 local `dev`,并清理 worktree。 +- 授权决策(计划确认): + 1. `merge_remote`:创建 integrate 候选,将 `origin/dev` 合入本地 `dev`,解决冲突后推进本地 dev;不默认 push。 + 2. `keep_protected`:FAV / go-agentx 保留不合入不清理。 +- 交付终点:本地 `dev` 含远端 + 本地独有 + 未合 docs 分支;无争议 worktree 清理完毕。 +- 禁止项:不 push;不晋升 test/main;不强删;不整支合入 FAV;不清理 go-agentx cancelled 现场。 + +## 范围与非目标 + +- 允许:同步 `origin/dev`、合入未完成 docs 分支、抢救未跟踪任务文档与 mineru gofmt、关闭 active 任务、普通 remove worktree/stale 目录、CURRENT docs apply。 +- 非目标:远端 push;FAV / go-agentx;test/main 晋升。 + +## 步骤与验收 + +1. [x] 建场 + recover `dac0865f` + 关闭 promote 任务 + 主目录切回 `dev` +2. [ ] 同步 `origin/dev` 进本地 `dev`(冲突解决 + validate + integrate) +3. [ ] 合入 modular / lock / policy / workflow-governance + 抢救文档/gofmt +4. [ ] 关闭其余 active 任务;清理已合入 worktree / stale 目录(保留保护项) +5. [ ] 验证报告 + CURRENT 收口 + +## 验证与证据 + +| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 / 脱敏说明 | +|---|---|---|---|---| +| 前置 | recover + task close + checkout dev | recovery 清空、主目录在 dev | recovered;promote 任务 cancelled;主目录 `dev` | agentctl status | + +独立报告:`.doc/test-reports/2026-09-23-worktree-closeout-batch-test-report.md`(阶段完成后补)。 + +## 收口与交接 + +- 本地提交 / dev 集成 / 远端:本轮仅本地;`remote_sync=not_requested`。 +- 保护项:`.worktrees/fix-dev-runtime-data-root-guard`(FAV)、`.worktrees/go-agentx-runtime-2026-09-21`。 + +## 相关链接 + +- 计划:`~/.cursor/plans/worktree_批量收口_c72b246f.plan.md` +- 操作规范:`../2026-09-21-agent-worktree-workflow.md` diff --git a/internal/mineru/client.go b/internal/mineru/client.go index 171250fb..1e28a965 100644 --- a/internal/mineru/client.go +++ b/internal/mineru/client.go @@ -29,8 +29,8 @@ type Client struct { Language string HTTP *http.Client - submitMu sync.Mutex - submitLog []time.Time + submitMu sync.Mutex + submitLog []time.Time } // Config wires Client from application settings. @@ -200,9 +200,9 @@ func (c *Client) applyUploadURL(ctx context.Context, fileName string) (batchID, "files": []map[string]any{ {"name": fileName}, }, - "model_version": c.ModelVersion, - "language": c.Language, - "enable_table": true, + "model_version": c.ModelVersion, + "language": c.Language, + "enable_table": true, "enable_formula": true, } raw, err := c.postJSON(ctx, c.Endpoint+"/api/v4/file-urls/batch", body) @@ -266,10 +266,10 @@ func (c *Client) pollBatch(ctx context.Context, batchID, fileName string) (zipUR var data struct { BatchID string `json:"batch_id"` ExtractResult []struct { - FileName string `json:"file_name"` - State string `json:"state"` - FullZipURL string `json:"full_zip_url"` - ErrMsg string `json:"err_msg"` + FileName string `json:"file_name"` + State string `json:"state"` + FullZipURL string `json:"full_zip_url"` + ErrMsg string `json:"err_msg"` } `json:"extract_result"` } if err := json.Unmarshal(env.Data, &data); err != nil {