diff --git a/.doc/audit/2026-09-14-arch-check-baseline.md b/.doc/audit/2026-09-14-arch-check-baseline.md new file mode 100644 index 00000000..8696dda8 --- /dev/null +++ b/.doc/audit/2026-09-14-arch-check-baseline.md @@ -0,0 +1,52 @@ +--- +title: "arch-check Wave 0 基线" +status: done +created: 2026-09-14 +updated: 2026-09-14 +severity: medium +--- + +# arch-check Wave 0 基线 + +## 现象 + +模块边界此前只能靠人工约定。Wave 0 用当前 `go list` 生成 import allowlist,并用目标属主扫描表名与路径字面量,得到可重复的 warn 基线。 + +## 根因分析 + +`document_records`、`output.md`、`data/dev` 被多个包直接提及,与「单一写者 / 路径属主」目标不一致。这些不是本轮回归,而是 Wave 1+ 的收口对象。 + +## 严重度 + +`medium` + +## 关联整改 + +- ADR: [../adr/2026-09-14-modular-monolith-decoupling.md](../adr/2026-09-14-modular-monolith-decoupling.md) +- 设计: [../system-design/2026-09-14-module-decoupling-architecture.md](../system-design/2026-09-14-module-decoupling-architecture.md) +- 任务: [../ops/short-term/2026-09-14-module-decoupling-wave0.md](../ops/short-term/2026-09-14-module-decoupling-wave0.md) + +## 证据 + +命令:`./scripts/arch-check.sh --mode warn`(2026-09-14,本工作区) + +- import 相对基线 allowlist:**0** 条新边 +- 目标属主扫描:**21** 条 warn(按包去重) + +``` +WARN R5 table document_records mentioned in authz, workspace, docduty, server, bizdev, docrevision +WARN R5 table freeform_documents mentioned in docrevision +WARN R5 table task_runs mentioned in server, projectinstance, docgov +WARN R6 path output.md mentioned in coordinator, server, bizdev, docgov, docrevision, agent +WARN R6 path data/dev mentioned in coordinator, server, bizdev, storage +WARN R6 path workspaces/ mentioned in server +violations=21 +arch-check warn: recorded 21 baseline findings +``` + +`--mode block` 会因这 21 条失败,故 **不得**在 warn 期满前把脚本挂进集成冒烟。 + +## 后续 + +- Wave 1 起按属主清零上表,再把对应规则转 block +- 本轮不占集成槽、不 `env-service` rebuild diff --git a/.doc/audit/INDEX.md b/.doc/audit/INDEX.md index 45c023d9..49331adc 100644 --- a/.doc/audit/INDEX.md +++ b/.doc/audit/INDEX.md @@ -13,6 +13,20 @@ ## 核心文档(按阅读顺序推荐) +### 模块边界 arch-check Wave 0 基线(2026-09-14) + +**文件**: [2026-09-14-arch-check-baseline.md](./2026-09-14-arch-check-baseline.md) + +**结论**: import 相对现状 allowlist 无新边;表/路径目标属主扫描 21 条 warn,作为 Wave 1+ 收口清单,不在本轮转 block。 + +### 项目 143 workflow-plan 409 与三权全有或全无(2026-09-14) + +**文件**: [2026-09-14-workflow-plan-409-frozen-and-optional-duties.md](./2026-09-14-workflow-plan-409-frozen-and-optional-duties.md) + +**结论**: 项目 143 已于 2026-09-13 激活 main 工作流(实例 89),`SaveWorkflowPlan` 因 `lifecycle=active` 返回 409 `PLAN_FROZEN`;前端无冻结守卫、错误提示在视口外,表现为「校验并预览无反应」。按文档支持三权全有或全无,但全空仅用于定义允许裁剪的非必需文档,表示“不纳入人工审批”而非“非受控”;必需文档和零治理激活不得被绕过。 + +**整改**: [workflow-plan 409 + 三权全有或全无整改](../remediation/2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md) + ### 项目 143 受控正文 canonical hash 漂移(2026-09-14) **文件**: [2026-09-14-project143-controlled-content-404.md](./2026-09-14-project143-controlled-content-404.md) diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 6ed9eb5c..9fd3f709 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -5,7 +5,7 @@ ## 焦点 -1. **DOC-CONTENT**: [受控正文 canonical hash 漂移](../audit/2026-09-14-project143-controlled-content-404.md)(真实 UI 验收已 PASS:项目 143 clean-run3 + 新项目 full-chain-final 主链及 restart 均全部通过) +1. **WORKFLOW-PLAN**: [冻结 409 与文档职责可选治理](../audit/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md)(Wave 1–4 已在 `fix/workflow-plan-409-frozen-and-optional-duties` 落地;Wave 5 占槽 e2e 进行中;后续治理原则见 [MVP 治理规则评审](../ops/research/2026-09-14-mvp-governance-rules-review.md)) 2. **CHAT-INTENT**: [对话意图运行时状态](../audit/2026-09-13-conversation-intent-runtime-state.md)(`fix/conversation-intent-state`;与文档账本运行时无关) 3. **CHAT**: [对话历史刷新](../audit/2026-09-13-chat-history-refresh-disappears.md)(认领仍 `in_progress`;gap 行已 PASS,以代码/handoff 为准收敛) @@ -47,14 +47,20 @@ | Cursor-Auto | document-revision-session-close | feature/document-revision-session-close | - | document-revision-session-close | done | | Cursor-Auto | vite-frp-allowed-hosts | fix/vite-frp-allowed-hosts | - | web-devserver | done | | Cursor-Auto | remove-herdr-agent-settings | feature/remove-herdr-agent-settings | - | agent-collab-docs | done | +| implementer_cursor | workflow-plan-409-frozen-and-optional-duties | fix/workflow-plan-409-frozen-and-optional-duties | .worktrees/fix-workflow-plan-409-frozen-and-optional-duties | workflow | in_progress | +| Cline | governance-action-level-authz | fix/governance-action-level-authz | - | workflow | blocked | +| Cursor | module-decoupling-wave0 | feature/remove-herdr-agent-settings | - | arch | done | > 新任务开始前登记。`branch` 必须为 `feature/` 或 `fix/`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。 +> `workflow-plan-409-frozen-and-optional-duties` 已由 implementer_cursor 接管:worktree 已创建,Wave 1–4 提交落地,Wave 5 占集成槽位(e2e)进行中。 +> `governance-action-level-authz` blocked 仅为等待同 mutex `workflow` 的 Wave 5 收敛;收敛后从最新 `dev` 创建 `fix/governance-action-level-authz` 并改 `in_progress`,不得在当前 `feature/remove-herdr-agent-settings` 工作区编码。 + ## 集成槽位 | holder | phase | since | scope | queue | |--------|-------|-------|-------|-------| -| idle | idle | - | - | - | +| implementer_cursor | e2e | 2026-09-14 | workflow-plan 409 frozen + optional duties | governance-action-level-authz | **phase**: `idle` | `merging` | `smoke` | `e2e` diff --git a/.doc/ops/short-term/2026-09-14-module-decoupling-wave0.md b/.doc/ops/short-term/2026-09-14-module-decoupling-wave0.md new file mode 100644 index 00000000..671283c8 --- /dev/null +++ b/.doc/ops/short-term/2026-09-14-module-decoupling-wave0.md @@ -0,0 +1,54 @@ +--- +title: "模块解耦 Wave 0:契约包骨架 + 架构门禁基线" +status: done +created: 2026-09-14 +updated: 2026-09-14 +owner: Cursor +branch: feature/remove-herdr-agent-settings +worktree: "-" +mutex: arch +--- + +# 模块解耦 Wave 0:契约包骨架 + 架构门禁基线 + +> 总方案:[../../system-design/2026-09-14-module-decoupling-architecture.md](../../system-design/2026-09-14-module-decoupling-architecture.md) +> ADR:[../../adr/2026-09-14-modular-monolith-decoupling.md](../../adr/2026-09-14-modular-monolith-decoupling.md) + +## 目标 + +建立 `internal/contracts` 骨架与 `scripts/arch-check.sh` 依赖门禁(warn 基线),使模块边界从此可度量、可执行,为 Wave 1–6 提供验收对照。 + +## 范围 + +- `internal/contracts/`:vocabulary.go(MaturityStage 等共享枚举占位)、errors.go(错误码表)、events.go(首批事件类型定义,纯定义零实现) +- `scripts/arch-check.sh` + `.doc/system-design/module-boundaries.yaml`(以现状生成 allowlist,不收紧) +- 基线违规报告存 `.doc/audit/2026-09-14-arch-check-baseline.md` + +## 非目标 + +- 不改任何业务行为、不迁移任何包(属 Wave 1+) +- 不收紧任何依赖规则(block 转换在两周 warn 期后) + +## 步骤 + +1. [x] 用户确认 ADR → 状态转「已接受」 +2. [x] 建 contracts 骨架(纯定义,`go test ./internal/contracts` 绿) +3. [x] 写 arch-check.sh(import allowlist / 表属主 / 路径字面量三类检查,支持 --mode warn|block) +4. [x] 运行 warn 模式,基线报告落 `.doc/audit/` +5. [ ] 合 `dev` 占槽冒烟(本轮不占槽;集成槽仍由 workflow-plan Wave 5 持有) + +## 验收标准 + +- [x] `./scripts/arch-check.sh --mode warn` 可运行并产出基线报告 +- [x] `go vet ./... && go test -short ./...` 全绿(2026-09-14 本工作区;`internal/server` 9.823s) +- [x] ADR 状态「已接受」;本文件 status → done + +## 相关链接 + +- Checklist: - +- Handoff: - +- Test report: - + +## 证据 / 备注 + +- 依赖图实测(2026-09-14):server 25 内部包 / 17,007 行;bizdev 16 包;详见总方案 §1.1 diff --git a/.doc/status/FEATURE-MATRIX.md b/.doc/status/FEATURE-MATRIX.md index f3a2bb64..720b5026 100644 --- a/.doc/status/FEATURE-MATRIX.md +++ b/.doc/status/FEATURE-MATRIX.md @@ -18,7 +18,7 @@ | 意图识别 L1 | 18 类 Intent + 三分支消解 | partial | [system-design/intent-recognition](../system-design/intent-recognition/);[现场专项审计](../audit/2026-09-13-conversation-intent-runtime-state.md) | 明确写动作与只读总结已分流;完整 hard-negative/eval 集仍待补齐 | `intent` | | 对话 / ctxmgr | 多轮上下文、记忆、摘要 | partial | [system-design/multi-turn-dialogue](../system-design/multi-turn-dialogue/);[刷新恢复专项审计](../audit/2026-09-13-chat-history-refresh-disappears.md) | `CHAT-HISTORY-REFRESH`:作用域写入、同集授权统计、历史回填;语义摘要(D5 backlog) | `chat` | | 智能体小队 | 角色-任务-工作区-黑板 | done | [system-design/agent-squad](../system-design/agent-squad/);[test 2026-09-07](../test-reports/2026-09-07-dynamic-squad-planning-test-report.md) | 非关键步骤降级(A5/A6 backlog) | `squad` | -| 工作流治理 | 三正式工作流 + 阶段门禁 | done | [remediation/three-workflows](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[test 2026-09-12](../test-reports/2026-09-12-three-workflows-governance-remediation-test-report.md) | Phase2 设计器 partial | `workflow` | +| 工作流治理 | 三正式工作流 + 阶段门禁 | partial | [remediation/three-workflows](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[test 2026-09-12](../test-reports/2026-09-12-three-workflows-governance-remediation-test-report.md);[冻结态/职责可选审计](../audit/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md) | 三正式工作流与冻结后端已完成;active 设置页冻结 UX、非必需文档职责可选及成员/门禁/权限一致性待按 Wave 1–5 实施 | `workflow` | | 纯软件项目自举 | 软件项目创建、Bootstrap 基线、Delivery 迭代与受控工程交接 | planned | [详细设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[现状调研](../ops/research/2026-09-14-software-project-bootstrap-current-state.md);[验收计划](../ops/checklists/2026-09-14-software-project-bootstrap-acceptance.md) | 当前仅完成方案;目录/模板/执行器/创建向导/真实 PI UI 均未实施。受控代码执行单列后续 Epic | `workflow-design` | | IAM / 鉴权 | 项目级 API 鉴权 + RBAC | partial | [audit/authorization](../audit/authorization-matrix-v2.md);[刷新恢复专项审计](../audit/2026-09-13-chat-history-refresh-disappears.md) | 历史读取端点补统一会话 owner + 阶段授权;旧 API 410 标注(BUG-11 partial) | `authz` | | 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | done | [test docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[项目 143 正文 404 审计](../audit/2026-09-14-project143-controlled-content-404.md);[受控正文真实 UI 验收报告](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);[UI-06 缓存竞争审计](../audit/2026-09-14-document-revision-refresh-cache-race.md);[整改](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md) | 生命周期/租约保留。W1–W6 + 审查修补 + UI hydrate 资格 + 晚到 list sync 修复均已合入 dev。项目 143 纯 UI 回归(clean-run3)与新项目全链路(main + post-restart)已全量真实页面验证通过(PASS) | `docgov` | @@ -27,6 +27,7 @@ | PI Runner / 配置链 | pi-agent + MiniMax 真实链路 | done | [test piagent](../test-reports/2026-09-13-codex-audit-p0-remediation-test-report.md);[container-env](../test-reports/2026-09-13-container-env-configuration-test-report.md) | — | `pi-agent` | | 三环境运维 | dev/test/main + 共享 KB | done | [PROJECT.md](../../PROJECT.md) §4;四环境 healthy | — | `infra` | | CI / E2E | PG 集成 + 真实 PI E2E | partial | [gap-matrix BUG-08](../remediation/gap-matrix.md);[test pg-ci](../test-reports/2026-09-12-pg-ci-soak-e2e-test-report.md);[运行时 UI Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md) | CI `TEST_DATABASE_URL` 隔离库仍缺;文档运行时真实 UI 已按 UI_PHASE 分文件且 post-restart 断言最终 A1 正文。`-race` 全包并行 TempDir flake 为基建残留 | `ci` | +| 模块化单体解耦 | `internal/contracts` + arch-check 门禁 | partial | [ADR](../adr/2026-09-14-modular-monolith-decoupling.md);[设计](../system-design/2026-09-14-module-decoupling-architecture.md);[Wave 0 基线](../audit/2026-09-14-arch-check-baseline.md) | Wave 0 仅骨架与 warn 基线(21 条属主/路径债)。不改业务、不占集成槽。Wave 1 起独立分支收口 | `arch` | --- diff --git a/.doc/system-design/README.md b/.doc/system-design/README.md index 651ea9c6..c991b78f 100644 --- a/.doc/system-design/README.md +++ b/.doc/system-design/README.md @@ -99,6 +99,24 @@ --- +### 6. 模块解耦架构设计与实施方案 + +| 项 | 链接 | +|-----|------| +| 主报告 | [2026-09-14-module-decoupling-architecture.md](2026-09-14-module-decoupling-architecture.md) | +| ADR | [../adr/2026-09-14-modular-monolith-decoupling.md](../adr/2026-09-14-modular-monolith-decoupling.md) | +| 一句话总结 | 模块化单体 + `internal/contracts` 契约通信 + 单一写者 + 编排下沉 + arch-check 机器门禁,Wave 0–6 分阶段落地 | + +**核心要点**: + +- **诊断**:server/bizdev 双组合根、`UserProjectContext` 双向直改、`document_records` 五写者、工作区路径与 squad 文件 schema 为无版本化隐性契约(11 项热点均有文件:行号证据); +- **四例契约**:squadrun(系统备料备工作区、小队按 OutputContract 交货并写 RunManifest)、kb(纯检索)、chatlog(项目ID+用户ID → 结构化 DTO)、docquery(统一文档列表/正文读模型); +- **横切**:事件总线泛化 outbox、表/文件单写者、统一错误信封、DTO golden 契约测试、PI Runner 协议单一 schema 源; +- **门禁**:`scripts/arch-check.sh` + module-boundaries.yaml,warn 两周后 block 进 CI; +- **兼容**:URL 不变、零表结构迁移、每 Wave 独立分支独立回滚。 + +--- + ## 🏗️ 在整体架构中的位置 ``` @@ -149,6 +167,8 @@ ``` .doc/system-design/ ├── README.md ← 本文件(顶层索引) +├── module-boundaries.yaml ← Wave 0 arch-check allowlist +├── 2026-09-14-module-decoupling-architecture.md ← 模块化单体解耦 ├── document-revision-management.md ← 文档版本、修订、差异、报告与通知 ├── intent-recognition/ │ └── 01-意图识别框架-设计-架构-实现-难点-解决方案-亮点与优势.md diff --git a/.gitignore b/.gitignore index bb8cac06..2238b89b 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,4 @@ regulations/ .doc/test-reports/assets/**/playwright-output-*/ .doc/test-reports/assets/**/playwright-report/ .doc/test-reports/assets/**/playwright-report-*/ +.doc/test-reports/assets/2026-09-13-document-revision-runtime-ui/