openfeel 1.1.7 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.en.md +35 -8
  2. package/README.md +29 -4
  3. package/README.zh-CN.md +35 -8
  4. package/bin/openfeel.js +3 -2
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +7 -4
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +29 -4
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/flow.d.ts.map +1 -1
  12. package/dist/commands/flow.js +385 -14
  13. package/dist/commands/flow.js.map +1 -1
  14. package/dist/commands/plan.d.ts.map +1 -1
  15. package/dist/commands/plan.js +19 -6
  16. package/dist/commands/plan.js.map +1 -1
  17. package/dist/commands/req.d.ts +15 -0
  18. package/dist/commands/req.d.ts.map +1 -0
  19. package/dist/commands/req.js +735 -0
  20. package/dist/commands/req.js.map +1 -0
  21. package/dist/commands/stage.d.ts.map +1 -1
  22. package/dist/commands/stage.js +7 -1
  23. package/dist/commands/stage.js.map +1 -1
  24. package/dist/core/config.d.ts +6 -4
  25. package/dist/core/config.d.ts.map +1 -1
  26. package/dist/core/config.js +6 -5
  27. package/dist/core/config.js.map +1 -1
  28. package/dist/core/flow-archive/archive-file.d.ts +35 -0
  29. package/dist/core/flow-archive/archive-file.d.ts.map +1 -0
  30. package/dist/core/flow-archive/archive-file.js +3 -0
  31. package/dist/core/flow-archive/archive-file.js.map +1 -0
  32. package/dist/core/flow-archive/archive-health.d.ts +34 -0
  33. package/dist/core/flow-archive/archive-health.d.ts.map +1 -0
  34. package/dist/core/flow-archive/archive-health.js +76 -0
  35. package/dist/core/flow-archive/archive-health.js.map +1 -0
  36. package/dist/core/flow-archive/archive-ops.d.ts +68 -0
  37. package/dist/core/flow-archive/archive-ops.d.ts.map +1 -0
  38. package/dist/core/flow-archive/archive-ops.js +184 -0
  39. package/dist/core/flow-archive/archive-ops.js.map +1 -0
  40. package/dist/core/flow-archive/grouping.d.ts +58 -0
  41. package/dist/core/flow-archive/grouping.d.ts.map +1 -0
  42. package/dist/core/flow-archive/grouping.js +153 -0
  43. package/dist/core/flow-archive/grouping.js.map +1 -0
  44. package/dist/core/flow-manager.d.ts +67 -9
  45. package/dist/core/flow-manager.d.ts.map +1 -1
  46. package/dist/core/flow-manager.js +243 -51
  47. package/dist/core/flow-manager.js.map +1 -1
  48. package/dist/core/i18n-data/en.d.ts +1 -0
  49. package/dist/core/i18n-data/en.d.ts.map +1 -1
  50. package/dist/core/i18n-data/en.js +174 -4
  51. package/dist/core/i18n-data/en.js.map +1 -1
  52. package/dist/core/i18n-data/zh-CN.d.ts +1 -0
  53. package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
  54. package/dist/core/i18n-data/zh-CN.js +175 -4
  55. package/dist/core/i18n-data/zh-CN.js.map +1 -1
  56. package/dist/core/i18n.js +4 -4
  57. package/dist/core/i18n.js.map +1 -1
  58. package/dist/core/managed-region.d.ts +16 -2
  59. package/dist/core/managed-region.d.ts.map +1 -1
  60. package/dist/core/managed-region.js +24 -3
  61. package/dist/core/managed-region.js.map +1 -1
  62. package/dist/core/metrics.d.ts +2 -0
  63. package/dist/core/metrics.d.ts.map +1 -1
  64. package/dist/core/metrics.js +15 -0
  65. package/dist/core/metrics.js.map +1 -1
  66. package/dist/core/model-config.d.ts +1 -1
  67. package/dist/core/model-config.d.ts.map +1 -1
  68. package/dist/core/model-config.js +2 -2
  69. package/dist/core/model-config.js.map +1 -1
  70. package/dist/core/opencode-config.js +1 -1
  71. package/dist/core/opencode-config.js.map +1 -1
  72. package/dist/core/pipeline-schema.d.ts +15 -0
  73. package/dist/core/pipeline-schema.d.ts.map +1 -1
  74. package/dist/core/pipeline-schema.js +17 -0
  75. package/dist/core/pipeline-schema.js.map +1 -1
  76. package/dist/core/plan/path.d.ts +17 -0
  77. package/dist/core/plan/path.d.ts.map +1 -1
  78. package/dist/core/plan/path.js +31 -0
  79. package/dist/core/plan/path.js.map +1 -1
  80. package/dist/core/plan/stage.d.ts +2 -1
  81. package/dist/core/plan/stage.d.ts.map +1 -1
  82. package/dist/core/plan/stage.js +7 -2
  83. package/dist/core/plan/stage.js.map +1 -1
  84. package/dist/core/req/aggregate.d.ts +62 -0
  85. package/dist/core/req/aggregate.d.ts.map +1 -0
  86. package/dist/core/req/aggregate.js +134 -0
  87. package/dist/core/req/aggregate.js.map +1 -0
  88. package/dist/core/req/body-file.d.ts +16 -0
  89. package/dist/core/req/body-file.d.ts.map +1 -0
  90. package/dist/core/req/body-file.js +84 -0
  91. package/dist/core/req/body-file.js.map +1 -0
  92. package/dist/core/req/requirement-ops.d.ts +116 -0
  93. package/dist/core/req/requirement-ops.d.ts.map +1 -0
  94. package/dist/core/req/requirement-ops.js +395 -0
  95. package/dist/core/req/requirement-ops.js.map +1 -0
  96. package/dist/core/req/types.d.ts +46 -0
  97. package/dist/core/req/types.d.ts.map +1 -0
  98. package/dist/core/req/types.js +7 -0
  99. package/dist/core/req/types.js.map +1 -0
  100. package/dist/core/runtime-log.d.ts +18 -0
  101. package/dist/core/runtime-log.d.ts.map +1 -1
  102. package/dist/core/runtime-log.js +72 -0
  103. package/dist/core/runtime-log.js.map +1 -1
  104. package/dist/core/session.d.ts +24 -0
  105. package/dist/core/session.d.ts.map +1 -0
  106. package/dist/core/session.js +107 -0
  107. package/dist/core/session.js.map +1 -0
  108. package/dist/core/setup.js +4 -4
  109. package/dist/core/template-loader.d.ts.map +1 -1
  110. package/dist/core/template-loader.js +3160 -6571
  111. package/dist/core/template-loader.js.map +1 -1
  112. package/dist/core/update.d.ts.map +1 -1
  113. package/dist/core/update.js +770 -26
  114. package/dist/core/update.js.map +1 -1
  115. package/package.json +1 -1
@@ -16,7 +16,7 @@ import { mergeGlobalOpencodeJsonc, buildProjectOpencodeJsoncObj } from './openco
16
16
  import { applyClaudeSettings } from './claude-settings.js';
17
17
  import { atomicWriteFileSync } from './fs/atomic-write.js';
18
18
  import { withFileLock, globalLockPath } from './fs/file-lock.js';
19
- import { detectFileType, normalize, splitFrontmatter, parseRegion, wrapRegion, replaceRegion, mergeFrontmatter, serializeFrontmatter } from './managed-region.js';
19
+ import { detectFileType, normalize, splitFrontmatter, parseRegion, wrapRegion, replaceRegion, mergeFrontmatter, serializeFrontmatter, USER_SOVEREIGN_KEYS } from './managed-region.js';
20
20
  import { appendUpdateInfo } from './update-infos.js';
21
21
  import { backupFileBeforeWrite, BackupError, notifyBackupIfTTY } from './backup.js';
22
22
  import { readJsoncFile } from './fs/safe-read.js';
@@ -191,6 +191,14 @@ cat ~/.local/share/opencode/auth.json
191
191
  - 模型/provider 由 **Claude 侧**决定(\`/model\`、\`settings.json\`/\`env\`、网关如 cc-switch)。
192
192
  - Claude Code **无 \`opencode.jsonc\`**,模型引用不进 jsonc。
193
193
 
194
+ #### 模型校验路径(Claude Code)
195
+
196
+ 1. **会话内**:\`/model\` 查看/切换当前会话模型;\`~/.claude/settings.json\` 的 \`env\`(如 \`ANTHROPIC_DEFAULT_*_MODEL\`)与 \`modelPicker.options\` 为档位映射来源。
197
+ 2. **网关/中转**:如 cc-switch 之类网关的模型清单 / 定价表可作**参考**(非权威——权威以实际派发为准)。
198
+ 3. **Agent 级**:\`~/.claude/agents/<name>.md\` 的 frontmatter \`model\` 为 agent 专属配置位,**优先于** \`inherit\`。
199
+ 4. **可用性实测法**(自定义模型 ID 是否可用):隔离 config 目录 + 派发 subagent 实测,观察实际生效模型 / 报错;记录**命令 + 版本 + 环境**三要素,未实测不得表述为「已支持」。
200
+ 5. **受部署保护**:上述 \`model\` 键为**用户主权配置**——\`openfeel update\` / \`setup --tools claude\` **保留**其值(无则补模板默认),升级框架不会覆盖用户设定。
201
+
194
202
  ## 快速诊断清单
195
203
 
196
204
  | 检查项 | 命令/操作 | 期望结果 |
@@ -388,7 +396,7 @@ Skill 加载后,根据步骤 3 的匹配结果决定是否追加提示:
388
396
  `,
389
397
  'openfeel-cli-usage': `---
390
398
  name: openfeel-cli-usage
391
- description: OpenFeel CLI 命令用法参考:命令清单与关键参数、15 个 phase 枚举与转移表、stageId 命名与目录映射约定、v1.1.2 新增能力(自描述/可纠错、--json 结构化输出、health --fix、scheme draft、knowledge dedup、纠正清理侧命令面)、v1.1.4 新增能力(checkpoint 选择性恢复 --stage/--dry-run、flow stage reset 精准复位、故障恢复路径)、v1.1.5 新增能力(setup --check [--json] 诊断 / 被动部署提示)、v1.1.6 新增能力(Claude Code 适配器 \`--tools claude\` / settings 注入)、v1.1.7 新增能力(双模式工作流 workflow_mode:flow mode 只读查询 / flow phases --mode 模式分节 / plan stage add --workflow-mode / stage set --workflow-mode / config set --sync-stages --stage)。当需要查询 CLI 命令、参数、phase、stageId、阶段命名时加载。
399
+ description: OpenFeel CLI 命令用法参考:命令清单与关键参数、15 个 phase 枚举与转移表、stageId 命名与目录映射约定、v1.1.2 新增能力(自描述/可纠错、--json 结构化输出、health --fix、scheme draft、knowledge dedup、纠正清理侧命令面)、v1.1.4 新增能力(checkpoint 选择性恢复 --stage/--dry-run、flow stage reset 精准复位、故障恢复路径)、v1.1.5 新增能力(setup --check [--json] 诊断 / 被动部署提示)、v1.1.6 新增能力(Claude Code 适配器 \`--tools claude\` / settings 注入)、v1.1.7 新增能力(双模式工作流 workflow_mode:flow mode 只读查询 / flow phases --mode 模式分节 / plan stage add --workflow-mode / stage set --workflow-mode / config set --sync-stages --stage)、v1.2.0 新增能力(需求流转命令组 \`openfeel req\`:需求 7 状态与 10 子命令 / 认领协议;flow.json 版本分片归档 \`flow archive\`:\`<version>\` / \`list\` / \`show\`)、v1.2.1 新增能力(需求拆分 \`req split\` / 三模式 \`full/fast/general\` / 审查档位 \`--review-tier\` / 通用工作者 \`openfeel-explorer\` / 可观测性字段 / 模型默认值统一与部署非破坏性)。当需要查询 CLI 命令、参数、phase、stageId、阶段命名时加载。
392
400
  ---
393
401
 
394
402
  # OpenFeel CLI 用法参考
@@ -400,7 +408,7 @@ description: OpenFeel CLI 命令用法参考:命令清单与关键参数、15
400
408
  - 与 \`openfeel-tool-usage\` 协同:工具选择规范见该 skill;本 skill 补充 CLI 命令细节。
401
409
  - 正文以**能力名**叙述;平台差异见 \`### opencode 适配器\` / \`### Claude Code 适配器\` 两小节。
402
410
 
403
- > 本文档为 v1.1.7 快照;命令/参数细节以 \`openfeel <cmd> --help\`(本仓执行)实时输出为准(CLI 演进后本文档可能滞后)。
411
+ > 本文档为 v1.2.1 快照;命令/参数细节以 \`openfeel <cmd> --help\`(本仓执行)实时输出为准(CLI 演进后本文档可能滞后)。
404
412
  >
405
413
  > ⚠️ **本仓自举**:本仓(openfeel 源码仓库)开发/执行时请用 \`node bin/openfeel.js <cmd>\`;安装后使用 \`openfeel <cmd>\`。
406
414
 
@@ -415,7 +423,7 @@ description: OpenFeel CLI 命令用法参考:命令清单与关键参数、15
415
423
  | \`openfeel flow ...\` | 流水线状态管理 | 见下「flow 子命令」 |
416
424
  | \`openfeel flow checkpoint restore\` | Checkpoint 恢复(全量 / 选择性 / 预览) | \`<file> [--force] [--stage <id>] [--dry-run]\`(无 \`--stage\`=全量覆盖,最后手段;\`--stage\`=按阶段回退;\`--dry-run\`=零写盘预览) |
417
425
  | \`openfeel flow stage reset\` | 精准复位阶段 phase(\`flow advance\` 的对称复位,允许回退) | \`<stageId> --to <phase> [--dry-run]\`(受合法值域 + \`to=done\` 阻塞 REV 约束) |
418
- | \`openfeel plan stage add\\|list\` | 工作阶段管理 | \`add <name> --deps <ids...> --tasks <items...> --exec-mode <manual\\|auto> --auto-advance <enabled\\|disabled> --workflow-mode <full\\|fast>\`(初值取 \`config.yaml.defaults\`;显式选项优先;\`--workflow-mode\` 覆盖 config 默认) |
426
+ | \`openfeel plan stage add\\|list\` | 工作阶段管理 | \`add <name> --deps <ids...> --tasks <items...> --exec-mode <manual\\|auto> --auto-advance <enabled\\|disabled> --workflow-mode <full\\|fast\\|general>\`(初值取 \`config.yaml.defaults\`;显式选项优先;\`--workflow-mode\` 覆盖 config 默认;**\`general\` 仅需求级合法**——阶段级写入面拒绝) |
419
427
  | \`openfeel plan scheme create\\|publish\\|rename\\|list\\|remove\\|register\` | 操作方案管理 | \`create <stage> <title> [--draft]\`、\`publish <stage> <opId>\`、\`rename <stage> <opId> --title <text>\`、\`remove <stage> <opId> [--force] [--dry-run]\`、\`register <stage> [opId] [--dry-run]\`(补注册 fileOrphans) |
420
428
  | \`openfeel stage status\\|set\\|task\` | \`status.md\` 原子操作 | \`set <id> --status/--exec-mode/--auto-advance/--review-agent/--workflow-mode\`、\`task <id> [no] --add/--done/--undone\`(\`stage create\` 已弃用) |
421
429
  | \`openfeel config ...\` | 配置管理 | \`get\\|set <key> <value> [--global]\`(支持全量 \`defaults.*\`,且 \`defaults.X ≡ X\`)、\`set ... --sync-stages [--stage <ids...>]\`(批量写入已注册阶段 \`status.md\` 的 \`自动推进\`/\`执行模式\`/\`工作流模式\`;\`--stage\` 限定作用域,单独使用 / 与 \`--global\` 组合 → exit 1)、\`get-lang\\|set-lang\`、\`list-projects\`、\`effective [key]\` |
@@ -423,29 +431,47 @@ description: OpenFeel CLI 命令用法参考:命令清单与关键参数、15
423
431
  | \`openfeel lint i18n\\|kb\` | 健康检查(i18n 键一致性 / kb 过期引用) | 发现问题**非 0 退出** |
424
432
  | \`openfeel knowledge ...\` | 知识库管理 | \`list\` / \`add\` / \`search\` / \`index\` / \`dedup\` |
425
433
  | \`openfeel archive <stage>\` | 归档指定阶段(汇总产出、生成摘要、提取知识) | \`<stage>\` |
434
+ | \`openfeel req ...\` | 需求流转(需求管理命令组;**11 子命令**) | 见「v1.2.0 新增能力(stage-78~84)」+「v1.2.1 新增能力(stage-86~93 + 94)」节 |
426
435
  | \`openfeel view list\\|accept\` | 审查条目验收(\`add\` 已移除,改用 \`flow review add\`) | — |
427
436
  | \`openfeel project overview\` | 项目结构概览 | \`overview\`(无 \`list\`/\`info\` 子命令) |
428
437
  | \`openfeel roadmap create\\|show\` | 分期大纲管理 | \`create <version>\`、\`show [version]\` |
429
438
  | \`openfeel instructions <artifactId>\` | 为指定 artifact 生成结构化指令 | \`--change <name>\`、\`--schema <name>\`、\`--json\` |
430
439
 
431
- **flow 子命令**:\`status\` / \`current\` / \`overview\` / \`phases\` / \`mode\`(\`[--stage <id>] [--json]\`,只读) / \`stage\`(\`add\` / \`remove\` / \`set --deps\` / **\`reset <id> --to <phase> [--dry-run]\`**)/ \`metrics\` / \`advance\`(\`--stage <id> --to <phase>\`、\`--op\`、\`--force\`、\`--dry-run\`、\`--quiet\`)/ \`attempt\` / \`log\` / \`review\` / \`retry\` / \`repair\` / \`ops\` / \`migrate\` / \`checkpoint\`(\`list\` / **\`restore <file> [--force] [--stage <id>] [--dry-run]\`**)/ \`health\` / \`recover\` / \`wizard\`。
440
+ **flow 子命令**:\`status\` / \`current\` / \`overview\` / \`phases\` / \`mode\`(\`[--stage <id>] [--json]\`,只读) / \`stage\`(\`add\` / \`remove\` / \`set --deps\` / **\`reset <id> --to <phase> [--dry-run]\`**)/ \`metrics\` / \`advance\`(\`--stage <id> --to <phase>\`、\`--op\`、\`--force\`、\`--dry-run\`、\`--quiet\`、**\`--review-tier <full\\|lean\\|skip>\`**)/ \`attempt\` / \`log\` / \`review\` / \`retry\` / \`repair\` / \`ops\` / \`migrate\` / \`checkpoint\`(\`list\` / **\`restore <file> [--force] [--stage <id>] [--dry-run]\`**)/ \`health\` / \`recover\` / \`wizard\` / \`archive\`(\`<version>\` / \`list\` / \`show\`)。
432
441
 
433
442
  **纠错/清理侧补充**:\`flow review add|resolve|update|remove\`;\`flow ops list [--stage <id>] [--json]\`(操作方案视图,draft 分组展示);\`flow repair [--prune-orphans]\`(默认只报告,\`--prune-orphans\` 仅清键孤儿,单向不删文件);\`plan scheme register\`(补注册**文件孤儿**:有 op 文件无注册键 → 写入 flow.json,\`--dry-run\` 零写盘;与 \`flow repair --prune-orphans\`(仅清键孤儿)对称);**\`flow stage reset <id> --to <phase>\`**(\`advance\` 的**对称复位**:允许回退,受合法 phase 值域 + \`to=done\` 阻塞 REV 约束,\`--dry-run\` 零写盘);**\`flow checkpoint restore <file> --stage <id> [--dry-run]\`**(按阶段选择性回退;\`--dry-run\` 差异预览零写盘)。
434
443
 
435
444
  > 命令职责分层:\`plan stage add\`(完整,推荐)> \`flow stage add\`(仅注册 \`flow.json\`,不建目录)> \`stage create\`(已弃用)。
436
445
 
437
- ## v1.1.6 新增能力(stage-68~73)
446
+ ## v1.2.1 新增能力(stage-86~93 + 94)
438
447
 
439
- - **多 harness 并存**:\`openfeel setup\` / \`openfeel update\` 新增 \`--tools <逗号列表>\`(如 \`opencode,claude\`);非法值 **exit 1** 前置校验零写盘;默认仅 \`opencode\`。
440
- - **Claude Code 适配器资产**:\`--tools claude\` 部署 \`~/.claude/\`——\`CLAUDE.md\`(全局约束,用户已有内容 append 不覆盖)、\`agents/\`(**9 个**,含 \`feel\`)、\`skills/\`(**17 个**共享源)、\`settings.json\`(注入 \`"agent":"feel"\` + \`"permissions":{"defaultMode":"auto"}\`,用户既有键逐字保留);默认零触(不带 \`--tools\` 时 \`~/.claude/\` 零变化)。
448
+ > 以下能力**v1.2.1 起提供**(94 = 表外补阶段:模型默认值与部署非破坏性)。
449
+
450
+ - **需求接取与拆分(\`req split\`)**:**拆分即发布**——\`openfeel req split <id> --into <title> [--into <title> ...] [--json]\`,子需求一次入 \`scheduled\`;\`parent_id\` 仅溯源(**不入聚合 / 不入 done 门 / 不参与 \`PATCH_WHITELIST\`**);顺序 ID 单源派生 + 父终态门 + 恰 1 条 \`requirement_split\` 审计。**并行接取**:\`req claim\` 互不阻塞。**需求与版本解绑**:\`target_version\` 为纯展示 / 过滤 / 排序维度,非门。命令组 **10 → 11 子命令**。
451
+ - **通用工作者直接调度(双口径)**:opencode 侧 = 嵌套 \`task\` 工具;Claude Code 侧 = Handoff 直发。通用模式下可承接任意 Agent **直接调度**的执行任务(不限于流水线 op);派发前先探后执行。
452
+ - **\`openfeel-explorer\`(新 agent,只读)**:承接「调研 / 探索」路由;工具集下限恰 4 项(Read / Glob / Grep / Bash),无写、无派发;agent 数 **9 → 10**。
453
+ - **三模式(\`full\` / \`fast\` / \`general\`)**:\`plan stage add --workflow-mode\` / \`stage set --workflow-mode\` / \`config set defaults.workflow_mode\` / \`flow phases --mode\` 值域均为 \`full|fast|general\`(**\`general\` 仅需求级合法**——阶段级 / 部署级写入面拒绝,wizard 不提供选项);需求侧 \`req add\` / \`req set --workflow-mode\`;解析链增需求级层(\`status.md > 需求级 > config.yaml > builtin\`);**升级不降级**。
454
+ - **可观测性**:\`metrics.json\` 经 \`recordRun\` 接线(\`flow metrics\`);CLI 日志行含 \`duration_ms\` / \`project\` / \`session_id\`;op 级时间戳(\`attempted_at\` / \`completed_at\`);跨会话恢复标注 \`resumed\`。
455
+ - **审查档位(\`flow advance --review-tier <full|lean|skip>\`)**:与工作流模式**分属两轴**;缺省按模式派生(\`flow phases --json.reviewTier\`);显式 \`lean\` / \`skip\` 一行非阻断警告;值域非法 exit 1 零写盘。**裁剪只作用于入边 / 目标侧**——阶段恰停于被裁剪相位时保留出边、可向该档位下游推进(v1.2.1-stage-93 修复 \`cli/BUG-011\`);「**进入**被裁剪关」仍不可达。
456
+ - **模型默认值统一 + 部署非破坏性(用户主权键 \`model\`)**:部署(\`setup\` / \`update\`)对用户既有 \`model\` 键**无则创建、有则不覆盖**;opencode 侧显式默认收敛为 \`deepseek/deepseek-flash\`。
457
+
458
+ ## v1.2.0 新增能力(stage-78~84)
459
+
460
+ - **flow.json 版本分片归档(\`flow archive\`)**:按版本号归档已收官历史(判据门:该版本全部阶段 done + 无 blocking open REV;归档文件落 \`.openfeel/flow-archive/{version}.json\`)。三个入口:\`openfeel flow archive <version>\`(执行归档;\`--dry-run\` 预览零写盘、\`--json\` 结构化输出)、\`openfeel flow archive list\`(列举已归档版本,只读)、\`openfeel flow archive show <version>\`(查看指定归档版本,只读)。**与顶层 \`openfeel archive <stage>\` 区分**:顶层命令是**阶段摘要归档**,\`flow archive\` 是 **flow.json 版本分片归档**,二者职责不同;常规命令不读 \`.openfeel/flow-archive/**\`(\`flow health\` 仅目录清单级对账)。
461
+ - **需求流转(\`openfeel req\`)**:需求层命令组(10 子命令(**v1.2.1 起 11**,+\`split\`):\`add\` / \`list\` / \`show\` / \`claim\` / \`release\` / \`set\` / \`link\` / \`advance\` / \`board\` / \`next\`)。需求 7 状态(\`draft\` / \`scheduled\` / \`in_progress\` / \`done\` / \`blocked\` / \`cancelled\` / \`rejected\`);**需求进度由关联阶段 phase 聚合**(全部关联阶段 done → 需求自动 done);认领协议 = \`owner\` + \`claimed_at\` 占用校验(无 TTL)。需求正文 \`.openfeel/requirements/REQ-NNN.md\` 为人读副本,**机读权威恒为 flow.json**。用法权威源见 \`openfeel-req\` skill;**v1.2.0 起提供**。
441
462
 
442
463
  ## v1.1.7 新增能力(stage-74~76)
443
464
 
444
- - **双模式工作流(\`workflow_mode\`)**:值域 \`full | fast\`(默认 \`fast\`)。三层载体:\`config.yaml defaults.workflow_mode\`(项目默认 / 记忆)→ \`status.md「工作流模式」\`(阶段覆盖,**读取权威**)→ \`flow.json\` 冗余字段(可选、**不参与级联**);级联优先序 \`status.md > config.yaml > builtin\`(\`profile.yaml\` 不承载)。只读查询:\`openfeel flow mode [--stage <id>] [--json]\`(当前模式 + 四源 \`source\`)。
465
+ - **双模式工作流(\`workflow_mode\`)**:值域 \`full | fast\`(默认 \`fast\`)(**v1.2.1 起 3 值 \`full | fast | general\`**——\`general\` 仅需求级合法,见「v1.2.1 新增能力」节)。三层载体:\`config.yaml defaults.workflow_mode\`(项目默认 / 记忆)→ \`status.md「工作流模式」\`(阶段覆盖,**读取权威**)→ \`flow.json\` 冗余字段(可选、**不参与级联**);级联优先序 \`status.md > config.yaml > builtin\`(\`profile.yaml\` 不承载)。只读查询:\`openfeel flow mode [--stage <id>] [--json]\`(当前模式 + 四源 \`source\`)。
445
466
  - **fast 快线转移表(并列)**:\`transitions\` 共 **9 条目**(8 条流转键 + \`done\` 终止项):\`plan_pending → plan_review\`(**计划审查必经**)、\`plan_review → plan_passed / plan_pending\`、\`plan_passed → exec_running\`、\`exec_running → review_pending\`、\`review_pending → review_failed / review_passed\`、\`review_failed → review_pending / exec_running\`(回环)、\`review_passed → archiving\`、\`archiving → done\`、\`done\`(终态)。**\`phases\` / \`advanceAccepted\` 恒 15 项、模式无关**;fast 下 6 个相位不可达(\`scheme_*\` / \`test_*\`)。
446
- - **模式命令面**:\`plan stage add --workflow-mode <full|fast>\`(值域派生、非法 exit 1 不建阶段)、\`stage set <id> --workflow-mode <full|fast>\`(缺失字段插入)、\`flow phases [--mode <full|fast>] [--stage <id>]\`(模式分节;\`--json\` 追加 \`workflowMode\`)、\`config set ... --sync-stages [--stage <ids...>]\`(同步字段含「工作流模式」)。
467
+ - **模式命令面**:\`plan stage add --workflow-mode <full|fast>\`(值域派生、非法 exit 1 不建阶段)、\`stage set <id> --workflow-mode <full|fast>\`(缺失字段插入)、\`flow phases [--mode <full|fast>] [--stage <id>]\`(模式分节;\`--json\` 追加 \`workflowMode\`)、\`config set ... --sync-stages [--stage <ids...>]\`(同步字段含「工作流模式」)(**v1.2.1 起三处参数值域均含 \`general\`**)。
447
468
  - **\`config effective\` 四键**:\`auto_advance\` / \`execution_mode\` / \`merge_mode\` / \`workflow_mode\`。
448
469
 
470
+ ## v1.1.6 新增能力(stage-68~73)
471
+
472
+ - **多 harness 并存**:\`openfeel setup\` / \`openfeel update\` 新增 \`--tools <逗号列表>\`(如 \`opencode,claude\`);非法值 **exit 1** 前置校验零写盘;默认仅 \`opencode\`。
473
+ - **Claude Code 适配器资产**:\`--tools claude\` 部署 \`~/.claude/\`——\`CLAUDE.md\`(全局约束,用户已有内容 append 不覆盖)、\`agents/\`(**10 个**,含 \`feel\`)、\`skills/\`(**22 个**共享源)、\`settings.json\`(注入 \`"agent":"feel"\` + \`"permissions":{"defaultMode":"auto"}\`,用户既有键逐字保留;**无则创建、有则不覆盖**——用户主权键 \`model\` 不被改写);默认零触(不带 \`--tools\` 时 \`~/.claude/\` 零变化)。
474
+
449
475
  ## v1.1.5 新增能力(stage-67)
450
476
 
451
477
  - **主动诊断 \`openfeel setup --check [--json]\`**:只读检测全局部署版本(\`~/.openfeel/update_state.json.openfeel_version\`)与 CLI 版本一致性,**不执行部署**;一致退出 \`0\`,\`mismatch\`/\`missing\`/\`unknown\` 退出 \`1\`;\`--json\` 输出 \`{schemaVersion,status,cliVersion,deployedVersion}\`(\`status\` ∈ \`ok|mismatch|missing|unknown\`)。
@@ -478,7 +504,7 @@ openfeel setup --tools claude # 2. 重跑部署(claude 目标)
478
504
 
479
505
  > 以下为 v1.1.2 相对上版的增量能力(分组摘要,细节以 \`<cmd> --help\` 为准)。
480
506
 
481
- - **A. 自描述与可纠错(stage-41)**:\`flow phases [--json] [--mode <full|fast>] [--stage <id>]\`(**6 键**:\`schemaVersion\`/\`phases\`/\`transitions\`/\`advanceAccepted\`/\`transitionsDiff\`/\`workflowMode\`(v1.1.7 追加);既有五键语义逐字不变)、\`flow stage remove [--force] [--dry-run] [--purge]\`、stageId 校验/冲突检测(\`validateStageId\` / \`suggestStageId\` / \`findStageDirConflict\`)、\`plan stage add --deps\`。
507
+ - **A. 自描述与可纠错(stage-41)**:\`flow phases [--json] [--mode <full|fast>] [--stage <id>]\`(**6 键**:\`schemaVersion\`/\`phases\`/\`transitions\`/\`advanceAccepted\`/\`transitionsDiff\`/\`workflowMode\`(v1.1.7 追加);既有五键语义逐字不变;**v1.2.1 起 7 键**——末位追加 \`reviewTier\`)、\`flow stage remove [--force] [--dry-run] [--purge]\`、stageId 校验/冲突检测(\`validateStageId\` / \`suggestStageId\` / \`findStageDirConflict\`)、\`plan stage add --deps\`。
482
508
  - **B. 状态与口径(stage-42)**:\`config effective [key]\`(有效值 + 生效来源 \`status.md > config.yaml > profile.yaml > builtin\`)、\`pipeline.phase\` 全量 done 判定、审计日志 \`register_stage\` / \`register_op\`。
483
509
  - **C. 部署与备份(stage-46)**:覆盖写前自动备份 \`~/.openfeel/backup/{ts}/\` + \`update_infos.md\`「备份」类条目(Agent 按 \`feel.md\` 检查规则核对)。
484
510
  - **D. 纠正/清理侧命令面(stage-51/52,v1.1.4-stage-64 补 register)**:\`plan scheme remove\`(仅删 \`flow.json\` 注册键,不删 op 文件;done/checkpoint 保护)、\`plan scheme register <stage> [opId] [--dry-run]\`(对称补全:补注册 fileOrphans,\`--dry-run\` 零写盘;**\`create\` 序号基于「ops/ 文件 ∪ flow.json 注册」的最小未用正整数(空位回填),创建后对目标阶段未注册文件输出 stderr 告警并提示 \`plan scheme register\`**)、\`plan scheme rename --title\`(必填,空标题报错)、\`plan scheme publish\` + \`create --draft\`(draft→pending,空模板拒绝)、\`flow stage set --deps\`(覆盖写入;**不带 \`--deps\` 视为清空**)、\`flow review update|remove\`、\`stage set\`(**幂等**:同值 no-op + 同值不生成 \`.bak\`;\`--exec-mode <manual\\|auto>\` / \`--auto-advance <enabled\\|disabled>\` / \`--review-agent <agent>\`)、\`stage task --add|--done|--undone\`、\`plan stage add --tasks\`/\`--exec-mode\`/\`--auto-advance\`(显式覆盖 config 默认)、\`flow repair --prune-orphans\`、\`flow health --fix [--dry-run]\`(默认只报告;\`--fix\` **仅回写 status.md「状态」字段**;\`--dry-run\` 预览零写盘)、\`flow ops list\`、\`flow advance --quiet\` + \`--to <远距 phase>\`(存在唯一路径时自动逐步;\`--dry-run\` 展示完整路径)、\`knowledge dedup\`(检索相似条目,**只读建议,不修改 kb**)。\`flow attempt\` 对 **draft op 拒绝**。
@@ -528,7 +554,7 @@ plan_pending → plan_review → plan_passed → scheme_pending → scheme_revie
528
554
 
529
555
  > \`phases\` / \`advanceAccepted\` 恒 15 项(模式无关);fast 下 \`scheme_pending\` / \`scheme_review\` / \`scheme_passed\` / \`test_pending\` / \`test_failed\` / \`test_passed\` 共 **6 项**不可达(无入边)。
530
556
 
531
- - 转移表以**运行时** \`.openfeel/pipeline.yaml\` 为准;\`openfeel flow phases\` 查看当前生效值。(\`--mode <full|fast>\` 显式指定 / \`--stage <id>\` 按阶段派生;\`--json\` 追加 \`workflowMode\`)
557
+ - 转移表以**运行时** \`.openfeel/pipeline.yaml\` 为准;\`openfeel flow phases\` 查看当前生效值。(\`--mode <full|fast|general>\` 显式指定 / \`--stage <id>\` 按阶段派生;\`--json\` 追加 \`workflowMode\`,v1.2.1 起末位再追加 \`reviewTier\`)
532
558
  - 推进:\`openfeel flow advance --stage <id> --to <phase>\`。**\`advanceAccepted\` = 内置 15 个 phase 的「推进白名单」**(\`flow advance\` 只接受这 15 个值),**不是**组合式条件键的替代品(旧文案曾误述,此处已更正)。**组合式条件差异**(如内置默认含 \`review_passed|test_passed\`,本仓 \`pipeline.yaml\` 未列)经 \`--json.transitionsDiff.missing\` **显式可见**(stage-50 裁定:**不补组合键**,改以 \`transitionsDiff\` 显式化)。
533
559
  - 参考:\`.openfeel/manual/**\`(CLI/flow 模块文档)。
534
560
 
@@ -565,9 +591,9 @@ plan_pending → plan_review → plan_passed → scheme_pending → scheme_revie
565
591
 
566
592
  ### opencode 适配器
567
593
 
568
- - 9 个 agent 内联 \`permission:\` 白名单,均含 \`external_directory: "allow"\`(单一键,无读写粒度)。
594
+ - 10 个 agent 内联 \`permission:\` 白名单,均含 \`external_directory: "allow"\`(单一键,无读写粒度);只读探索者 \`openfeel-explorer\` 恰 5 键(v1.2.1-stage-89 增)。
569
595
  - **合并语义**:agent \`.md\` frontmatter 与 \`opencode.jsonc\` 按权限键**深合并**,同名键以 agent \`.md\` 为准(配置文件无法覆盖已声明键)。
570
- - **收紧入口**:项目根 \`.opencode/agent/<name>.md\` 覆盖全局同名 agent 并重写完整 \`permission\` 块;勿手改全局 agent frontmatter(会被 \`update\` 覆盖)。
596
+ - **收紧入口**:项目根 \`.opencode/agent/<name>.md\` 覆盖全局同名 agent 并重写完整 \`permission\` 块;\`model\` 键为用户主权配置(\`update\` 保留其值,无则补模板默认),其余 frontmatter 字段仍会被 \`update\` 覆盖。
571
597
  - 详 \`.openfeel/manual/core/permission.md\`。
572
598
 
573
599
  ### Claude Code 适配器
@@ -585,6 +611,253 @@ plan_pending → plan_review → plan_passed → scheme_pending → scheme_revie
585
611
  | 前置 | 无 | 需交互式 TTY(非 TTY 用 \`flow advance --stage <id> --to <phase>\`) |
586
612
 
587
613
  > wizard skill 正文已交叉引用本 skill;二者正文互引,边界为「查手册 vs 跑向导」。
614
+ `,
615
+ 'openfeel-context-hygiene': `---
616
+ name: openfeel-context-hygiene
617
+ description: 上下文卫生——按需加载(索引先行)、工具结果治理、子会话返回精简、长任务分段,以及 harness 可控 / 不可控项的边界留痕。用于「上下文 / 按需加载 / 精简 / 裁减 / 上下文预算」相关判断。
618
+ ---
619
+
620
+ # 上下文卫生(上下文治理指引)
621
+
622
+ ## 输入
623
+
624
+ - 当前任务上下文预算压力信号(上下文接近上限 / 检索结果过载)
625
+ - 目标文件或目录(读取 / 检索范围)
626
+
627
+ ## 执行步骤
628
+
629
+ ### 1. 按需加载(索引先行)
630
+
631
+ 严格按「索引 → 主题 → 详情」三层顺序取用信息,**禁止**开局整量读取:
632
+
633
+ 1. **索引先行**:会话启动只读索引层——\`.openfeel/users/{username}/dev_last.md\`、流水线状态视图、\`.openfeel/kb/index.md\`。
634
+ 2. **主题按需**:仅在索引摘要不足以决策时,读对应主题文件 \`dev_last/{english-name}.md\`。
635
+ 3. **详情显式**:\`.openfeel/tmp/\` 文档、历史归档、\`docs/**\` 仅在**显式指定**时读取。
636
+ 4. **不主动读归档**:常规调度不得读取 \`.openfeel/flow-archive/**\`(防上下文污染);确需历史时用只读查询命令。
637
+
638
+ ### 2. 工具结果治理
639
+
640
+ - **大文件分片**:读取长文件时用「偏移 + 条数」参数分段读取,先定位再精读;不整文件读取后仅用其中几行。
641
+ - **检索限定范围**:内容检索必须限定路径 / 文件类型,避免全仓扫描;先窄后宽。
642
+ - **不重复读**:同一文件在同一会话内不重复读取;已读结论写入工作记录或任务列表。
643
+ - **结果即用即弃**:中间产物(构建日志、测试输出长尾)只留结论与地址,全文落盘到 \`.openfeel/tmp/\`。
644
+
645
+ ### 3. 子会话返回精简
646
+
647
+ 下级 Agent / 子会话完成后返回**精简摘要(≤ 10 行)**:
648
+
649
+ \`- **Agent**:{name} / **状态**:{status} / **摘要**:{一句话} / **产出**:{文件} / **遗留**:{REV/BUG/无}\`
650
+
651
+ - 完整报告写入 \`.openfeel/users/{username}/log/\`,命名 \`op-{op_id}-report-{date}.md\`。
652
+ - 调用方收到后先看状态决定下一步;**需要详情时按需回读**完整报告,不要求下级把全文塞进返回。
653
+ - 同理,调用方派发子任务时应在描述中要求「返回精简摘要 + 完整报告落盘」。
654
+
655
+ ### 4. 长任务分段习惯
656
+
657
+ - 任务启动即建任务列表(多步骤 / 跨文件);每完成一项立即标记,避免把全部进度堆在结尾一次性输出。
658
+ - 长任务按「可独立验收的段」切分,每段收尾即验证并落档;段间以文件与日志交接,不依赖长对话记忆。
659
+ - 上下文接近上限时,先落档再续接(结论与地址入索引层,详情入主题 / 详情层)。
660
+
661
+ > **长子会话指引权威入口**:委派的范围界定 / 分段 / 返回精简细则见 \`openfeel-delegation\` 交互提速节(本 skill §3 / §4 只保留通用习惯,不重复落文)。
662
+
663
+ ### 5. harness 可控 / 不可控项边界留痕
664
+
665
+ **可控项(本仓可写)**:
666
+ - 提示词 / 约束文件 / skill 内的按需加载与裁剪指引(即本 skill 第 1~4 条)——这是本仓**唯一**可施加作用的上下文治理面。
667
+
668
+ **不可控项(如实留痕,**不表述为「已具备该能力」**)**:
669
+ - **Claude Code 侧**:上下文自动压缩(auto-compact)为**宿主行为**,本仓 \`claude-settings.ts\` **不注入**相关键,无法从本仓控制其触发时机与裁剪策略。
670
+ - **opencode 侧**:compaction 为**平台配置项**,本仓 \`init.ts\` 仅写最小 \`$schema\` 覆盖,**不注入**相关键,配置权在用户侧。
671
+
672
+ > 表述纪律:对不可控项只做「能力归属 + 本仓不注入」的事实陈述,禁止写成「本仓已具备 / 已接管该能力」。承 kb \`#未来功能/未落地能力写入 skill 与文档须标注「提供版本」\` 的留痕纪律。
673
+
674
+ **stage-92 会话卫生核验结论**(三要素:Claude Code 2.1.300 / opencode 1.18.35 / openfeel 1.2.0):**可控** = 本 skill §1~§4 的指引面(提示词面唯一可施力点);**不可控** = ① Claude 侧上下文压缩与会话回收(**宿主行为**,本仓不注入相关键)② opencode 侧 compaction / archive / 子会话回收(**平台配置项**,本仓项目配置仅写最小 \`$schema\`,不注入)③ 并行派发的平台授予(由宿主工具白名单决定,本仓不自称具备该能力)。
675
+
676
+ ### 6. 双平台工具名对照(双平台分节)
677
+
678
+ #### opencode 适配器
679
+
680
+ | 用途 | 工具 | 关键参数 |
681
+ |------|------|----------|
682
+ | 读文件 | \`read\` | \`offset\` / \`limit\`(分片) |
683
+ | 内容检索 | \`grep\` | \`path\`(范围限定) |
684
+ | 文件匹配 | \`glob\` | \`path\` |
685
+
686
+ #### Claude Code 适配器
687
+
688
+ | 用途 | 工具 | 关键参数 |
689
+ |------|------|----------|
690
+ | 读文件 | \`Read\` | \`offset\` / \`limit\`(分片) |
691
+ | 内容检索 | \`Grep\` | \`path\`(范围限定) |
692
+ | 文件匹配 | \`Glob\` | \`path\` |
693
+
694
+ ## 输出
695
+
696
+ - 上下文治理执行摘要:本次加载层级(索引 / 主题 / 详情)+ 治理动作(分片 / 限定 / 精简)
697
+ - 不可控项声明(如涉及):能力归属 + 本仓不注入事实
698
+ `,
699
+ 'openfeel-delegation': `---
700
+ name: openfeel-delegation
701
+ description: 委托与流水线纪律——dispatch 双口径、委托边界与直接操作白名单、流程不可跳过、Handoff 委派、多模态自动委派、子任务上下文描述要求与能力降级。用于「委托 / 调度 / Handoff / 子 Agent / 流水线纪律」相关判断。
702
+ ---
703
+
704
+ # 委托与流水线纪律
705
+
706
+ > ⚠️ **本仓自举**:本仓(openfeel 源码仓库)开发/执行时请用 \`node bin/openfeel.js <cmd>\`;安装后使用 \`openfeel <cmd>\`。
707
+
708
+ ## 输入
709
+
710
+ - 待办任务描述(含可写边界)
711
+ - 当前阶段 phase 与流水线模式(\`openfeel flow status\` / \`openfeel flow mode\`)
712
+
713
+ ## 执行步骤
714
+
715
+ ### 1. dispatch 双口径(两条独立通道,禁混淆)
716
+
717
+ **口径 ①:直接调度通用工作者。** 任意 Agent(含 subagent)均可**直接**向通用工作者发调度请求,不经多级转介:
718
+
719
+ - 探索者 \`openfeel-explorer\`:只读探索代码区、定位问题。
720
+ - 执行者 \`openfeel-executor\`:实现 / 修改 / 自测。
721
+
722
+ **口径 ②:\`[HANDOFF: agent_name]\` 标记。** 返回结果中携带该标记时,由调用方解析并调度目标 Agent,附带原始上下文,完成后回传并记录调度事件。
723
+
724
+ > **通道能力以平台实际为准**:本 skill **不假定**任何具体工具名;调度经「平台提供的调度能力」或既有中介(见第 6 条降级)完成。
725
+
726
+ ### 2. 委托边界(判据 + 直接操作白名单例外清单)
727
+
728
+ **必须委托**(任一命中即委托,禁止亲为):
729
+
730
+ | 场景 | 委托目标 |
731
+ |------|----------|
732
+ | 制定计划、划分阶段 | \`openfeel-planner\` |
733
+ | 制定操作方案 | \`openfeel-schemer\` |
734
+ | 编码实现(源码修改 / 跨文件重构 / 依赖变更) | \`openfeel-executor\` |
735
+ | 代码审查 | \`openfeel-reviewer\` |
736
+ | 正式测试验收 | \`openfeel-feel-tester\` |
737
+ | 批量搜索 / 探索代码 | \`openfeel-explorer\`(或事务官) |
738
+ | 文件机械操作 | 事务官(\`openfeel-utility\`) |
739
+ | 归档沉淀知识 | \`openfeel-archiver\` |
740
+ | 视觉 / 多模态分析 | \`openfeel-vision\` |
741
+
742
+ **直接操作白名单**(完整例外清单,仅此范围内的操作可自行执行):
743
+
744
+ - **文件操作**:\`git add\` / \`git rm\`、复制 \`cp\` / 移动 \`mv\`、\`mkdir\`、\`rm\`(非源码文件)、\`cat\` 读取
745
+ - **文本处理**:Base64 编解码、\`diff\` 对比、简单 \`sed\` 替换(**非** \`.ts\` 文件)
746
+ - **环境操作**:\`npm run build\`、\`npm test\`(仅验证,不改依赖)
747
+ - **明确禁止自行执行**:修改源码内容、跨文件重构、依赖变更(\`install\` / \`uninstall\`)
748
+
749
+ > 白名单原则:每个操作可由一条命令独立完成,无依赖链。
750
+
751
+ **路由规则**:文件机械操作 → 事务官;事务官无法胜任 → 升级执行者并标注 \`type: utility\`;设计决策 → 计划官。
752
+
753
+ **调度决策依据**:委托前用 \`openfeel flow status\` 查看各阶段 phase,以**活跃阶段**(\`phase != 'done'\`)的 phase 为调度依据,而非读取全局 \`pipeline.phase\`。
754
+
755
+ ### 3. 流程不可跳过(硬性纪律)
756
+
757
+ - ❌ 计划阶段不委托计划官、自行写 \`plan.md\`
758
+ - ❌ 方案阶段不委托方案官、直接让执行者动手
759
+ - ❌ 审查阶段不委托审查官、自审自过
760
+ - ❌ 测试阶段不委托测试官、以 \`npm test\` 结果代替验收
761
+ - ❌ 归档阶段不委托归档官、自行更新 \`kb/\`
762
+
763
+ 每个阶段的推进必须经对应 Agent 产出(即使产出是「通过,无修改」),确保审计链完整。
764
+
765
+ **审查不可跳过**:禁止以任何理由(改动小、风险低、build+test 全绿)跳过审查,禁止以强制参数绕过。审查不通过时的处置决策(重试 / 重新方案 / 暂停 / 人工介入)须落日志。
766
+
767
+ **审查修复必须走流程**:审查发现的 REV,即使是文档缩进、空行等白名单级改动,也须经「方案官 → 执行者」修复并由审查官验收闭环,不得直接修改。
768
+
769
+ **无方案委托仍须产出 op 文件**:跳过方案官直接委托执行者时,必须在委托描述中要求执行者**先创建最小 op 文件**(置于对应阶段 \`ops/\` 目录,含 \`# op-NNN\` 标题、变更目标、涉及文件列表)再编码——op 文件是审计链核心证据。
770
+
771
+ ### 4. 多模态自动委派(硬性纪律)
772
+
773
+ 主力模型可能不支持图片输入(平台报错如 \`this model does not support image input\`)。遇多模态输入时**必须尝试委派**,禁止跳过:
774
+
775
+ **场景 A:模型支持多模态但需深度视觉分析**
776
+ 1. 将图片保存到 \`.openfeel/tmp/\`
777
+ 2. 调度 \`openfeel-vision\`,在任务描述中提供图片本地路径
778
+ 3. \`openfeel-vision\` 读取图片并分析
779
+
780
+ **场景 B:模型不支持多模态、平台报错拦截**
781
+ 1. 先尝试查找平台是否在临时位置保留图片副本
782
+ 2. 找到 → 按场景 A 处理
783
+ 3. 未找到 → 告知用户平台限制,请其经 \`openfeel-vision\` 专用会话发送图片,或直接描述图片内容
784
+
785
+ **禁止行为**:
786
+ - ❌ 告知用户「我看不了图片」后等待用户手动操作(必须先尝试委派)
787
+ - ❌ 尝试用非视觉 Agent 分析图片
788
+
789
+ > 模型本身支持多模态时无需委派;本规则仅在模型无法处理图片时触发。
790
+
791
+ ### 5. 子任务上下文描述要求
792
+
793
+ 每次委派的任务描述必须包含:**任务描述**(要做什么、判据)+ **期望返回**(格式与粒度)+ **边界**(只读 / 可写;可写入的路径白名单)。缺任一项即视为描述不合格,须补齐后再发。
794
+
795
+ ### 6. 能力不可用时的降级
796
+
797
+ 直接调度能力不可用(平台未提供 / 权限受限)时,降级为**中介兜底**:请求上游 Agent 代为调度目标 Agent,并在请求中说明「本会话无直接调度能力,请中转」。降级路径须记入日志;能力恢复后回归口径 ①。
798
+
799
+ ### 7. 审查会话健康探测与可疑产出处置
800
+
801
+ - **健康探测(首轮)**:要求审查官在首轮先做最小工具自检(执行版本查询命令 + 读一个已知文件并**回报内容**)。若自检失败、内容不符或工具结果异常 → 判定该会话**不可用**,立即中止并**重开会话**,不得沿用其后续产出。
802
+ - **可疑产出处置**:一旦判定某会话可疑,其已写出的 REV 条目 / 验收记录**自动降级为「待复核」**,不得被后续会话直接引用推进;须由新会话**独立复核关键结论后**方可据此推进,并追加「可信度声明」。
803
+
804
+ ### 8. 模式调度纪律(fast 工作流快线)
805
+
806
+ - **质量底线不可跳**:审查官在 fast 下必跑两处——① \`plan_review\` 计划审查(**必经单轮**,通过 → \`plan_passed\`,问题退回 → \`plan_pending\`);② 执行后代码审查(单轮);\`review_failed\` 回环可重审或回执行修复;失败留痕照常。
807
+ - **轻量化**:计划官 / 归档官轻量产出(**不得**省略任务表 / 依赖 / 验收要点与状态记录 / 知识暂存判定)。
808
+ - **相位口径**:可达相位为快线链;**合法相位枚举 15 项不变**(fast 下 6 项不可达)——**可达 ≠ 合法**。
809
+ - **骨架全量不变**:fast 不裁剪任何落盘结构,仅减少 Agent 接力环节。
810
+ - **术语消歧**:流程模式称「**工作流快线**」;审查深度降级称「**快速通道 / fast track(FAST-PASS)**」——二者为不同机制,不得互相引用 / 混用。
811
+ - **术语消歧(审查档位轴,stage-92 增补)**:「**审查档位**」(\`openfeel flow advance --review-tier\`,值域 全量 \`full\` / 精简 \`lean\` / 免审 \`skip\`)为**审查关裁剪谱**,与「工作流快线」(\`workflow_mode=fast\`,模式轴)分属两轴,禁互相引用 / 混用;「快速通道 / fast track(FAST-PASS)」为审查深度降级**总称**,保持既有含义。
812
+
813
+ ### 9. 并行编排(拆分并行 + 组合转移声明)
814
+
815
+ **适用范围**:仅**独立子任务**(任务之间**无依赖链**)可并行;任一侧成果是另一侧输入时恒串行。
816
+
817
+ **冲突域判据**(唯一判据来源 = \`kb/architecture.md #Worktree 并行批次策略\`,本 skill **不另起**第二套判据):
818
+
819
+ - 写集**无交集**(改动文件集互斥)→ 可并行;
820
+ - 依赖同一 API / 数据结构 / Agent 模板文件 → **恒串行**;
821
+ - 粒度更细的判定需求回查上述 kb 条目,不在此复制。
822
+
823
+ **拆分与接取**:\`openfeel req split\`(拆分即发布)→ \`openfeel req claim\`(按需求粒度认领,各支互不阻塞);各支独立推进,不共享会话上下文。
824
+
825
+ **合并顺序**:先完成先合并;后完成支合并前 rebase 到已合并成果,冲突**当场消解**(不把冲突留给下游或后续会话)。
826
+
827
+ **留痕纪律**:并行各支**独立审查 / 独立归档**,状态变更**逐支**留痕——并行度放大时跨文件一致性 warn 家族会同步放大,逐支收口,不并批省记。
828
+
829
+ **显式不做**(防过度设计):不新建 worktree 管理机制;不做运行时 DAG 调度;不做父子需求聚合(聚合单源恒 \`allLinkedStagesDone\`)。
830
+
831
+ #### 9.1 组合转移声明指南(\`|\` = 任一源相位完成即推进)
832
+
833
+ 在项目 \`.openfeel/pipeline.yaml\` 中,transitions 的 key 可用 \`|\` 组合多个源相位:\`'a|b': [target]\` 表示 a / b **任一**完成即可推进到 target(多 Agent 并行场景)。解析经 \`parseTransitionKey\` / \`transitionKeyMatches\` **单一控制点**,禁止在命令层 / 模板层复制判定。
834
+
835
+ - \`advanceAccepted\`(\`openfeel flow phases --json\`)= 内置 15 phase 的**推进白名单**,**≠ 组合条件路径**——二者语义不同,不得混述。
836
+ - 组合键缺位时 \`openfeel flow phases\` 的 \`transitionsDiff.missing\` 会**可见化**「内置含、运行时缺」的漂移。
837
+
838
+ **裁定重审结论(stage-50「不补组合键」):维持不补。** 需要组合语义的项目按本指南在自身 \`pipeline.yaml\` **按需声明**;默认项目零改动,裁定一致性最高。
839
+
840
+ ### 10. 交互提速(提问收敛 + 批量确认 + 非阻塞 + 默认留痕)
841
+
842
+ 操作细则(触发判据同源 \`openfeel-tool-usage\` §2):
843
+
844
+ - **必问清单收敛**:提问面收敛为四类(需求歧义 / 多个同等合理方案 / 不可逆后果 / 架构决策);可默认项按「默认推进 + 留痕」处理,不上抛提问。**安全底线不削**——不可逆后果与架构决策**仍必问**。
845
+ - **批量确认**:一轮多问、一次放行(同批决策一次性确认),放行结论落日志。
846
+ - **非阻塞式交互**:可并行推进的事项不阻塞等待(提问期间推进不受该问题影响的支线,不空等)。
847
+ - **默认推进的留痕**:采用默认值时显式记录「默认值 + 位置(文件 / 行)」,便于回溯与纠偏。
848
+
849
+ **缩短长子会话指引**(与 \`openfeel-context-hygiene\` §3 / §4 **交叉指针、不重复落文**):
850
+
851
+ - **范围界定**:单次委派**单一目标** + 明确可写边界;
852
+ - **分段**:长任务切分为**可独立验收的小段**,每段收尾即验证落档;
853
+ - **返回精简**:委派描述中要求「≤10 行摘要 + 完整报告落盘」。
854
+
855
+ **边界声明**:提问收敛 **≠** 审查跳过——与第 3 条「流程不可跳过」不冲突,审查 / 测试 / 归档环节不因提速而省略。
856
+
857
+ ## 输出
858
+
859
+ - 委派记录:目标 Agent、任务描述摘要、边界、期望返回
860
+ - 流程合规声明:本次委托链完整(计划 → 方案 → 执行 → 审查 → 测试 → 归档,或 fast 快线链)
588
861
  `,
589
862
  'openfeel-get-bugs': `---
590
863
  name: openfeel-get-bugs
@@ -640,7 +913,7 @@ description: 读取 .openfeel/plan/{series}/{stage}/status.md,判断当前子
640
913
 
641
914
  ### 0. 读取全局配置
642
915
 
643
- 读取 \`.openfeel/config.yaml\`,解析 \`defaults\` 中的 \`execution_mode\`、\`auto_advance\`、\`merge_mode\`、\`workflow_mode\`。
916
+ 读取 \`.openfeel/config.yaml\`,解析 \`defaults\` 中的 \`execution_mode\`、\`auto_advance\`、\`merge_mode\`、\`workflow_mode\`(**三值**:\`full\` / \`fast\` / \`general\`)。
644
917
 
645
918
  ### 1. 定位状态文件
646
919
 
@@ -693,7 +966,7 @@ description: 读取 .openfeel/plan/{series}/{stage}/status.md,判断当前子
693
966
  - \`自动推进\` 为 \`enabled\`(若 status.md 未填则回退到 config.yaml \`auto_advance\`)
694
967
  2. 收集为 \`parallel_candidates\` 列表,供主会话(Feel)批量调度执行。
695
968
 
696
- > 口径:**subagent 不互调**(不直接调用其他 subagent);需向用户确认的事项一律由主会话负责。
969
+ > 口径:**除直接调度通用工作者外,不调用其他 Agent**;需向用户确认的事项一律由调用方负责。
697
970
 
698
971
  ### 5. 判断自动推进资格
699
972
 
@@ -717,7 +990,7 @@ description: 读取 .openfeel/plan/{series}/{stage}/status.md,判断当前子
717
990
  - 阶段:{stage}
718
991
  - 执行模式:manual | auto
719
992
  - 自动推进:disabled | enabled
720
- - 工作流模式:full | fast
993
+ - 工作流模式:full | fast | general
721
994
  - 状态:{status}
722
995
  - 当前责任 Agent:{agent}
723
996
  - 前置依赖:{依赖列表 或 无}
@@ -774,6 +1047,175 @@ description: 加载流水线健康检查结果,供 Agent 判断 flow.json 与
774
1047
  ## 输出
775
1048
 
776
1049
  健康检查摘要:通过项数、失败项列表及原因,失败时给出修复建议
1050
+ `,
1051
+ 'openfeel-logging': `---
1052
+ name: openfeel-logging
1053
+ description: 日志记录纪律——公域 / 私域日志布局与命名、必录事件清单、条目格式、骨架文件机制与禁止事项。用于「日志 / 记录 / 落档 / 调度事件留痕」相关判断。
1054
+ ---
1055
+
1056
+ # 日志记录纪律
1057
+
1058
+ > ⚠️ **本仓自举**:本仓(openfeel 源码仓库)开发/执行时请用 \`node bin/openfeel.js <cmd>\`;安装后使用 \`openfeel <cmd>\`。
1059
+
1060
+ ## 输入
1061
+
1062
+ - 待记录事件(类型 + 目标 Agent + 产出摘要 + 状态)
1063
+
1064
+ ## 执行步骤
1065
+
1066
+ ### 1. 布局与命名
1067
+
1068
+ | 域 | 路径 | 记录范围 | 命名 |
1069
+ |------|------|----------|------|
1070
+ | 公共域 | \`.openfeel/log/\` | **仅团队级重要事件** | \`yyyy-mm-dd-{username}-NNN.md\` |
1071
+ | 私域 | \`.openfeel/users/{username}/log/\` | 日常操作(常规代码修改、个人计划推进、调试、个人笔记) | \`yyyy-mm-dd-NNN.md\`(无需用户名) |
1072
+
1073
+ - 公域日志按**年 / 月 / 日**分层归档,日目录仅在当天有重要事件时创建,日目录含 \`day_index.md\`。
1074
+ - 公域根目录维护 \`index.md\`(日期索引)与 \`log.md\`(**最近 30 条**摘要,格式 \`[文件名] {username}: 描述\`,含跳转链接)。
1075
+
1076
+ **团队级重要事件**(满足任一即记公域日志):公共域文件的创建或重要修改 / 跨成员协作关键操作(公共笔记归入、计划调整等)/ 计划里程碑达成或重大偏差 / 私域代码审查或 Bug 的 high 优先级问题(首次发现时上报详情)/ 影响多人的异常事件。
1077
+
1078
+ ### 2. 必录事件清单(任一命中即记一条日志)
1079
+
1080
+ - 推进流水线状态(阶段 phase 变化)
1081
+ - 修改阶段状态(责任 Agent / 状态字段变更)
1082
+ - 委托任意下游 Agent(含调研类委托——**不受任务类型豁免**):记录委托目标、op 编号、产出摘要
1083
+ - 审查不通过时的处理决策(重试 / 重新方案 / 暂停 / 人工介入)
1084
+ - 阶段 done 时的阶段性总结
1085
+
1086
+ ### 3. 条目格式
1087
+
1088
+ \`\`\`markdown
1089
+ | 时间 | 操作 | 目标 Agent | 产出 | 状态 |
1090
+ |------|------|-----------|------|:--:|
1091
+ \`\`\`
1092
+
1093
+ ### 4. 骨架文件机制
1094
+
1095
+ 关键操作(推进到 exec_running / review_pending / test_pending / archiving)时,流水线会自动在私域日志目录创建带日期前缀的骨架文件(fast 工作流快线下 \`test_pending\` 仍为合法相位、仅不可达(无入边),该相位骨架不再产生;其余骨架规则全量不变)。无需手动创建日志文件,看到骨架文件时填充内容即可。
1096
+
1097
+ ### 5. 实时写入与公共笔记归入
1098
+
1099
+ 每个阶段推进操作对应一条日志记录,**实时写入**而非事后补录;写入私域日志的同时更新公域 \`log.md\`(最近 30 条摘要)。
1100
+
1101
+ - 经验教训的主要记录位置是私域 \`note/\`;简要描述、详情放子文件并建索引。
1102
+ - 提醒用户是否需归入公共笔记 \`.openfeel/dev/note/dev_note.md\`;**归入后标注「已归入公共域」并附跳转链接**。
1103
+
1104
+ ### 6. 禁止事项
1105
+
1106
+ - 禁止「完成后仅对话告知,不做文件记录」
1107
+ - 禁止「连续推进多阶段后才补录日志」
1108
+ - 禁止「委托下游 Agent 后不记录调度事件」
1109
+
1110
+ > **边界声明**:目录存在性与骨架模板**形态**由 \`openfeel-workspace\` 承载(何时 mkdir 哪些目录、文件骨架长什么样);本 skill 只写「何时记 / 记什么 / 格式 / 禁止」。
1111
+
1112
+ ### 7. 归档机械核对清单(命令化 / 幂等 / 无推理)
1113
+
1114
+ **归档机械步骤**的可复跑核对清单:每条 = **一条命令**,可重复执行(幂等),**不作任何语义判定**。
1115
+
1116
+ | # | 核对项 | 命令(部署后主口径) | 判读 |
1117
+ |---|--------|---------------------|------|
1118
+ | ① | **快速概览三项取值** | 源文件数 \`rg --files src -g '*.ts' \\| wc -l\` | Agent 数(部署目录列举)\`ls ~/.config/opencode/agent/*.md \\| wc -l\`(opencode)/ \`ls ~/.claude/agents/*.md \\| wc -l\`(Claude Code)| 最近更新 \`date +%Y-%m-%d\` | 三项取值填入 \`.openfeel/kb/index.md\`「项目快速概览」(**取值 ≠ 结论判定**) |
1119
+ | ② | **\`manual/index.md\` 模块树存在性核对** | \`ls .openfeel/manual/index.md .openfeel/manual/*/*.md\`(缺项由 \`ls\` 直接报错 = 悬空引用) | 存在性核对(缺失 = 需建 / 需修);**模块职责变更判定不在此列** |
1120
+ | ③ | **\`ops/**\` 清点与对照** | \`openfeel flow ops list --stage <stageId>\` | 实际文件 \`ls .openfeel/plan/{series}/{stage}/ops/*.md \\| wc -l\` | 清单与实际文件逐条对照 |
1121
+ | ④ | **工作区与计数核对** | \`git status --porcelain\` | 阶段目录计数 \`ls .openfeel/plan/{series}/{stage}/ \\| wc -l\` | 归档前状态留痕(未提交项 / 文件计数) |
1122
+
1123
+ > **Agent 数口径差异(登记)**:部署目录列举计数(用户实际安装面)与内置 \`listAgentIds\` 常量口径(框架定义面)**可能不同**;核对**以部署目录实况为准**,差异如实记录,不静默取一。
1124
+
1125
+ **边界声明**:本清单**只覆盖核对机械步骤**;知识语义判定(新旧取舍 / 去重裁定 / 手册职责变更判定)、状态记录、公共日志摘要、概览**结论**判定**不在此列**——权威 = \`openfeel-check-kb\` 与归档官推理面。
1126
+
1127
+ ## 输出
1128
+
1129
+ 日志写入记录:文件路径 + 条目数 + 是否同步更新公域 \`log.md\`
1130
+ `,
1131
+ 'openfeel-memory': `---
1132
+ name: openfeel-memory
1133
+ description: 记忆与落档纪律——记忆加载优先级、偏好合并、冲突检测与仲裁、update_infos 检查修复、决策追加、信息落档与会话结束写入、阶段结束检查。用于「记忆 / 偏好 / 决策记录 / 落档 / 会话结束写入」相关判断。
1134
+ ---
1135
+
1136
+ # 记忆与落档纪律
1137
+
1138
+ > ⚠️ **本仓自举**:本仓(openfeel 源码仓库)开发/执行时请用 \`node bin/openfeel.js <cmd>\`;安装后使用 \`openfeel <cmd>\`。
1139
+
1140
+ ## 输入
1141
+
1142
+ - 会话启动信号(加载记忆)或会话结束信号(写入落档)
1143
+ - \`.openfeel/update_state.json\` / \`~/.openfeel/update_infos.md\`(若存在)
1144
+
1145
+ ## 执行步骤
1146
+
1147
+ ### 1. 记忆加载优先级(启动时按序)
1148
+
1149
+ 1. **全局偏好**:读取全局画像(\`readProfile()\`,src/core/config.ts);文件不存在时用默认值。
1150
+ 2. **项目规则**:读取项目 \`.openfeel/dev/dev_core.md\`(\`[+]\` / \`[-]\` 标记规则;优先级高于全局约束)。
1151
+ 3. **项目记忆索引**:读取 \`.openfeel/users/{username}/dev_last.md\`(**索引**)——先取「用户偏好」「主题索引」「公共交接区」。
1152
+ 4. **按需主题文件**:仅在需要详情时读 \`dev_last/{english-name}.md\`(**文件名英文 kebab-case**,如 \`decisions.md\` / \`pending.md\`);**旧格式**(无 \`## 主题索引\` 节)→ 触发**惰性迁移**(按英文命名映射拆分生成 \`dev_last/\` + 索引,原文保留,仅提示一次,不阻塞会话)。
1153
+ 5. **自动填充画像**:调用 \`ensureProfileDefaults(projectPath)\`——\`user.name\` 为空时从 \`.openfeel/.info.json\` 或 git config 取用户名,并更新 \`history.last_project\` / \`history.recent_projects\`(去重保留最近 5 个)。
1154
+
1155
+ ### 2. 偏好合并(禁整文件覆盖)
1156
+
1157
+ - 语言偏好:全局画像 \`user.lang\` 优先。
1158
+ - \`auto_advance\`:以项目 \`config.yaml\` 为准,全局画像 \`preferences.auto_advance\` 仅兜底(\`status.md\` 可局部覆盖)。
1159
+ - 沟通风格 / 确认阈值:取全局画像 \`preferences.communication\` / \`preferences.confirm_threshold\`。
1160
+ - 合并后的偏好写入索引「用户偏好」节:**先 Read → 合并 → 写回**,禁止整文件覆盖。
1161
+
1162
+ ### 3. 冲突检测
1163
+
1164
+ 启动时检查 \`.openfeel/update_state.json\`(不存在则静默跳过):
1165
+
1166
+ 1. 遍历 \`files\`,查找 \`status=conflict\` 条目。
1167
+ 2. 存在冲突时:TTY 交互环境输出冲突列表与解决指引(冲突文件保存在 \`.openfeel/update_conflicts/\`);**非 TTY 环境(如 CI/CD)静默跳过**,不输出提示。
1168
+ 3. **不阻塞主体流程**——提示后照常进入主流程。
1169
+
1170
+ **冲突仲裁优先级**:用户明确指令 > 安全性 / 数据完整性 > 全局约束(全局规则文件)> 动态规则(\`dev_core.md\`)> 会话临时提示。冲突时须报告并向用户说明仲裁策略。
1171
+
1172
+ ### 4. update_infos 检查与修复
1173
+
1174
+ 启动时检查 \`~/.openfeel/update_infos.md\`(不存在则静默跳过):
1175
+
1176
+ 1. 遍历「追加」「异常」「备份」三类条目,按条目记录还原目标文件路径(绝对路径,或「相对路径 (项目: 根)」二元组)。
1177
+ 2. 逐条处理:
1178
+ - **异常条目**(未写入,待修复):含 \`原因: backup_failed\` → 备份失败导致,**非标记问题、不会自愈** → 引导用户重跑 \`openfeel update\` / \`openfeel setup\` 重试部署,成功后勾选;其余(标记解析失败)→ 目标文件已含完整 begin/end 标记则**已自愈**,勾选清除该条目。
1179
+ - **追加条目**(无标记追加):即使目标文件现已含标记,追加的受管区可能仍残留在标记区外造成**内容重复**——**不静默清除**,提示用户人工确认后勾选。
1180
+ - **备份条目**(部署覆盖前已存在 → 已备份):检查备份文件是否存在——存在则提示「部署覆盖前已备份原文件至 \`{backupRel}\`,请检查」;缺失则提示「备份已丢失,请谨慎检查当前文件」。确认后勾选。**非 TTY 环境静默**。
1181
+ 3. 提示方式与「冲突检测」对称:TTY 输出待处理列表与确认引导;非 TTY 静默跳过。
1182
+ 4. 修复完成后提醒用户**重启会话**(全局 agent / 约束已变更,需重启加载)。
1183
+ 5. 全部条目勾选后可删除该文件或保留骨架。本流程不调用内部函数接口,仅按标记与条目状态判定。
1184
+
1185
+ ### 5. 决策追加(\`dev_last/decisions.md\` 追加式)
1186
+
1187
+ 做出技术 / 架构决策(选择方案、拒绝备选、调整设计方向、接受 trade-off)时,按 \`- [x] {date}:{决策描述}\` **追加**到 \`dev_last/decisions.md\`(不覆盖既有条目;索引仅在主题摘要变化时更新对应 ≤100 字摘要)。
1188
+
1189
+ - **归属区分**:长期决策(技术选型、架构方向、跨会话有效的设计取舍)另以 ADR 格式同步写入 \`.openfeel/dev/decisions.md\`;会话临时决策仅记 \`dev_last/decisions.md\`。
1190
+ - **判断标准**(任一即记):涉及新依赖引入或版本抉择 / 涉及架构模式选择 / 涉及用户偏好变更 / 涉及流程调整决策。
1191
+ - **非决策不记录**:常规代码推进、Bug 修复选择、已确定方案中的细节填充。
1192
+
1193
+ ### 6. 信息落档与会话结束写入
1194
+
1195
+ **关键操作必须落文件,不可仅存于对话中**:阶段状态 → CLI 命令;进度 → \`dev_last.md\`(索引 + 主题文件);经验 → \`kb/\`;审查 / Bug → 私域目录。禁止「做完不记录」。
1196
+
1197
+ 会话结束前更新 \`.openfeel/users/{username}/dev_last.md\`(索引)与 \`dev_last/*.md\`(主题文件):
1198
+
1199
+ > **临界区(A9,一次进出)**:以下 ①~④ 的「读 → 合并 → 写回」须在 \`withFileLock(projectLockPath(cwd, 'dev-last-' + username), () => { … })\` 内完成(**含读取**;锁路径 \`.openfeel/tmp/locks/dev-last-{username}.lock\`;临界区内合并后用 \`atomicWriteFileSync\` 原子落盘;超时 / 陈旧沿用默认 5000 / 3000ms);\`dist\` 不可用时退化为「读-合并-写」并标注「未加锁」。
1200
+
1201
+ 1. 更新索引「用户偏好」(**不整文件覆盖**,Read → 合并 → 写回)。
1202
+ 2. 更新 / 新建主题文件(**文件名英文**;单条 >300 字或 >10 条时转 \`tmp/\` 文档并记地址)。
1203
+ 3. 刷新索引「主题索引」摘要(**≤5 活跃主题 × ≤5 条 × ≤100 字**);新增主题致 >5 时先合并同类,无可合并则把最旧已完结主题移入「已收敛主题」(**不归档、不移动文件**)。
1204
+ 4. 更新「公共交接区」(**仅文档位置 + 核心摘要**)。
1205
+ 5. 若属跨用户整体进度,按规则更新 \`.openfeel/dev/current.md\` 并轮换归档(该文件属公共域,**不在本锁范围内**)。
1206
+
1207
+ ### 7. 阶段结束检查清单
1208
+
1209
+ 标记阶段 done 前逐项确认,全部通过方可推进:
1210
+
1211
+ - [ ] 审查已完成?(仅单文件、无跨文件影响的微小改动可跳过审查,须记录理由)
1212
+ - [ ] 测试已通过?
1213
+ - [ ] 状态已落档(\`flow.json\` / \`status.md\` / \`dev_last.md\`〔索引 + 主题文件〕)?
1214
+
1215
+ ## 输出
1216
+
1217
+ - 记忆加载摘要:生效偏好(语言 / 自动推进 / 沟通风格 / 确认阈值)+ 活跃主题数
1218
+ - 落档记录:写入或更新的文件路径清单
777
1219
  `,
778
1220
  'openfeel-model-check': `---
779
1221
  name: openfeel-model-check
@@ -1063,6 +1505,14 @@ Agent 模型配置在 **\`opencode.jsonc\`**(项目根目录)中:
1063
1505
 
1064
1506
  Claude Code 模型解析优先级链:项目 \`.claude/agents\` > 用户 \`~/.claude/agents\`;frontmatter \`model\` **优先于** \`inherit\`。
1065
1507
 
1508
+ **用户主权键(\`model\`)——正式配置位与部署保护**:
1509
+
1510
+ - 用户级 \`~/.claude/agents/<name>.md\` 的 frontmatter \`model\` 是 Claude 侧的**正式配置位**;
1511
+ - \`openfeel update\`(含 \`setup --tools claude\`)**保留**该键的既有值(用户主权键机制:键级「无则创建、有则不覆盖」)——
1512
+ 升级 CLI **不会**覆盖你设的模型;删掉该行再部署则回归模板默认(\`inherit\`);
1513
+ - 其余 frontmatter 字段(\`description\` / \`tools\` 等)仍由框架覆盖;正文自定义写在受管区外。
1514
+ - opencode 侧同源同语义:\`~/.config/opencode/agents/<name>.md\` 的 \`model\` 同样受部署保护。
1515
+
1066
1516
  ## 多模态(openfeel-vision)模型特殊规则
1067
1517
 
1068
1518
  ### opencode 适配器
@@ -1087,7 +1537,7 @@ Claude Code 模型解析优先级链:项目 \`.claude/agents\` > 用户 \`~/.c
1087
1537
  | openfeel-planner | 推理模型 | — |
1088
1538
  | openfeel-schemer | 推理模型 | — |
1089
1539
  | openfeel-executor | 快速模型 (Flash) | — |
1090
- | openfeel-reviewer | 异种推理模型 (GLM) | — |
1540
+ | openfeel-reviewer | 推理模型(异族可选增强) | — |
1091
1541
  | openfeel-feel-tester | 推理模型 | — |
1092
1542
  | 事务官 | 快速模型 (Flash) | — |
1093
1543
  | openfeel-vision | 多模态模型 | 需配 deepseek-flash |
@@ -1116,9 +1566,99 @@ description: 跨会话上下文恢复,供 Agent 在会话启动时重建流水
1116
1566
 
1117
1567
  > **加锁提示(A9)**:恢复流程为**只读**,无需加锁;仅**会话末尾写入**走 \`withFileLock\` 临界区(见 agents-md「并发写加锁协议」)。
1118
1568
 
1569
+ > **记忆与落档**:记忆加载 / 决策追加 / 信息落档见 \`openfeel-memory\`;本 skill 只负责流水线状态恢复。
1570
+
1119
1571
  ## 输出
1120
1572
 
1121
1573
  恢复摘要:流水线状态 + 阻塞项 + 待处理任务列表
1574
+ `,
1575
+ 'openfeel-req': `---
1576
+ name: openfeel-req
1577
+ description: OpenFeel 需求流转用法参考:需求(requirement)四层模型与 7 状态生命周期、req 命令组 11 个子命令(add/list/show/claim/release/set/link/advance/board/next/split)与参数、认领协议、REQ-NNN 正文与人读副本语义(机读权威恒为 flow.json)、与计划(plan.md)的关系、与 workflow_mode 的关系(需求携带模式属性、经单点解析作用于关联阶段)。当需要创建/查询/认领/关联/推进需求,或要理解 REQ-NNN 状态与阶段聚合关系时加载。
1578
+ ---
1579
+
1580
+ # OpenFeel 需求流转(openfeel req)用法参考
1581
+
1582
+ ## 说明
1583
+
1584
+ - 定位:**查询型参考手册**(只读,不自执行)。回答「需求是什么、状态怎么流转、\`req\` 命令怎么用」。
1585
+ - 提供版本:**v1.2.0 起提供**(\`openfeel req\` 命令组);命令/参数细节以 \`openfeel req --help\`(本仓执行)实时输出为准(CLI 演进后本文档可能滞后)。
1586
+ - 本仓自举:本仓(openfeel 源码仓库)开发/执行时请用 \`node bin/openfeel.js req <cmd>\`;安装后使用 \`openfeel req <cmd>\`。
1587
+ - 相关 skill:\`openfeel-cli-usage\`(全量命令速查);本 skill 只承载需求流转专项。
1588
+
1589
+ ## 四层模型与需求定位
1590
+
1591
+ 需求层位于**「版本 → 需求 REQ-NNN → 计划 stage → 方案 op」**四层模型的第二层:**需求 = 排期与调度层**(回答「做什么、何时做」);**计划 = 对某项明确需求的具体实现**。需求不等于计划——接取需求后仍按既有规划阈值走流水线(\`plan.md\` 头部标注「关联需求:REQ-NNN」)。
1592
+
1593
+ ## 需求生命周期(7 状态)
1594
+
1595
+ \`\`\`
1596
+ draft ─→ scheduled ─→ in_progress ─→ done
1597
+ │ │ │
1598
+ └──────────┴────────────┴──→ blocked / cancelled / rejected
1599
+ \`\`\`
1600
+
1601
+ | 状态 | 语义 |
1602
+ |------|------|
1603
+ | \`draft\` | 草稿(\`req add\` 新建初值) |
1604
+ | \`scheduled\` | 已排期(可被 \`req next\` 推荐接取) |
1605
+ | \`in_progress\` | 进行中(认领后推进;**内部进度由关联阶段的 15-phase 聚合**) |
1606
+ | \`done\` | 完成(**全部关联阶段 done 时自动收口**——前置集限定 \`scheduled\` / \`in_progress\`;\`req advance --to done\` 亦须此门;**\`general\` 零关联需求经载体制对偶完成路径可直接 \`done\`**,v1.2.1 起) |
1607
+ | \`blocked\` | 阻塞(可回到 \`scheduled\` / \`in_progress\`) |
1608
+ | \`cancelled\` | 已取消(终态) |
1609
+ | \`rejected\` | 已拒绝(终态) |
1610
+
1611
+ - **投影方向单一**:需求状态是关联阶段 phase 的聚合投影(方向:阶段 phase → 需求状态);不得由需求状态前推阶段 phase。
1612
+ - 合法显式流转由引擎流转表判定(\`req advance --to <status>\` / \`req set --status <status>\`);终态(\`done\` / \`cancelled\` / \`rejected\`)不可再流转。
1613
+
1614
+ ## 子命令(11 个)
1615
+
1616
+ | 子命令 | 用途 | 关键参数 |
1617
+ |--------|------|----------|
1618
+ | \`req add <title>\` | 创建需求(ID 自动分配 REQ-NNN,max+1 不回收;正文骨架铺到 \`.openfeel/requirements/REQ-NNN.md\`) | \`--target-version <version>\`、\`--priority <P0\\|P1\\|P2>\` |
1619
+ | \`req list\` | 列出需求(可按状态 / 版本 / 认领人过滤) | \`--status <status>\`、\`--target-version <version>\`、\`--owner <owner>\`、\`--json\` |
1620
+ | \`req show <id>\` | 查看需求详情(关联阶段为原始只读枚举)(含父需求 / 子需求) | \`--json\` |
1621
+ | \`req claim <id>\` | 认领需求(占用校验;已被他人认领则拒绝) | \`--owner <owner>\`(缺省 \`.openfeel/.info.json\` user → git config user.name) |
1622
+ | \`req release <id>\` | 释放认领(未认领为 no-op 成功) | — |
1623
+ | \`req set <id>\` | 更新需求字段(白名单;状态流转合法性由引擎判定) | \`--status\`、\`--title\`、\`--target-version\`、\`--priority\` |
1624
+ | \`req link\` | 关联需求到阶段 / 解绑 | \`--stage <stageId>\`、\`--requirement <id>\`、\`--unlink\`(与 \`--requirement\` 二选一) |
1625
+ | \`req advance <id>\` | 显式推进需求状态(合法目标由引擎流转表判定;done:非 \`general\` 需求须全部关联阶段 done) | \`--to <status>\` |
1626
+ | \`req board\` | 需求看板(按状态分组;7 组固定顺序) | \`--target-version <version>\`、\`--json\` |
1627
+ | \`req next\` | 推荐下一个可接取需求(\`scheduled\` 且未认领;按预估版本升序) | \`--owner <owner>\`(含该认领人已认领的 scheduled 需求)、\`--limit <n>\`(缺省 1;大于 1 时 \`--json\` 追加 \`candidates\`)、\`--json\` |
1628
+ | \`req split <id>\` | 拆分需求为若干子需求(**拆分即发布**:子需求入 \`scheduled\` 候选池;父子仅溯源、不参与聚合) | \`--into <title>\`(可重复;至少一项)、\`--json\` |
1629
+
1630
+ > \`--json\` 输出为纯 JSON 单文档(含 \`schemaVersion\`,脚本消费口径);命令细节以 \`openfeel req <sub> --help\` 为准。
1631
+
1632
+ ## 认领协议
1633
+
1634
+ - **轻量原子**:\`owner\` + \`claimed_at\` 两字段;\`req claim\` 做**占用校验**(已被他人认领 → 拒绝,exit 非 0 零写盘);**无 TTL / 无心跳**(单机场景足够)。
1635
+ - 认领人缺省解析:\`.openfeel/.info.json\` 的 \`user\` → \`git config user.name\`。
1636
+ - 释放:\`req release <id>\`(未认领为 no-op 成功);终态需求不可认领。
1637
+
1638
+ ## REQ-NNN 正文与权威源
1639
+
1640
+ - 正文文件:\`.openfeel/requirements/REQ-NNN.md\`(\`openfeel req\` 机械铺骨架,**人读副本**)。
1641
+ - **机读权威恒为 \`.openfeel/flow.json\` 的 \`requirements\` 条目**;正文与 flow.json 不一致时**以 flow.json 为准**(正文内状态为创建时快照,不追写)。
1642
+ - \`stages[*].requirement_id\` 记录需求↔阶段关联(单值可空;存量阶段缺省 = \`null\`);关联关系以 flow.json 为准。
1643
+
1644
+ ## 与计划(plan.md)的关系
1645
+
1646
+ - 需求 = 排期与调度层;**具体实现仍由计划承载**——阶段 \`plan.md\` 头部标注「关联需求:REQ-NNN」。
1647
+ - 需求状态流转(认领 / 关联 / 推进)经 \`openfeel req\` CLI 执行;planner 只读不写(不直写 flow.json)。
1648
+
1649
+ ## 与 workflow_mode 的关系
1650
+
1651
+ 需求**携带**模式属性(需求级 \`workflow_mode\`,值域 \`full\` / \`fast\` / \`general\`);模式经**单点解析**作用于其关联阶段(显式下发后阶段字段为投影);三种模式(规划 / 快速 / 通用)下需求纪律一致;\`workflow_mode\` **经载体制完成路径参与 done 门**(\`general\` 零关联需求可显式完成;判据 = 需求自身字段直判,与载体制门同源;v1.2.1 起),其余不影响需求状态机与命令行为。
1652
+
1653
+ ## 需求与版本解绑
1654
+
1655
+ - 需求**不绑版本**:\`target_version\` 为**可选**字段,且**不作任何门**(不影响创建 / 认领 / 关联 / 状态流转 / done 判定)。
1656
+ - **版本号仅在发布时推进**:日常需求动作(拆分 / 接取 / 推进)不触动版本号;版本推进属发布动作。
1657
+
1658
+ ## 并行接取
1659
+
1660
+ - 拆分 → 子需求各自独立(独立 ID / 正文 / 认领 / 阶段关联),可**并行接取**:占用校验按需求粒度(\`req claim\`),子需求之间互不阻塞。
1661
+ - **接取制为默认调度**:需求由 feel 发布、Agent 接取(\`req next\` → \`req claim\`)。
1122
1662
  `,
1123
1663
  'openfeel-roadmap': `---
1124
1664
  name: openfeel-roadmap
@@ -1347,8 +1887,10 @@ description: Agent 工具使用规范(todowrite/question/task/skill 四工具
1347
1887
  ### 2. question — 向用户提问
1348
1888
  触发条件(任一必问):需求歧义 / 多个同等合理方案 / 不可逆后果 / 架构决策。使用要求:(Recommended) 标记、选项附后果、≤3 选项、高风险含"取消"。禁止:模糊时自行假设、多方案不选直接实施。
1349
1889
 
1890
+ **提速增补(stage-92;操作细则见 \`openfeel-delegation\` §10)**:① **必问清单收敛**——仅上述四类必问,可默认项按「默认推进 + 留痕」处理,不上抛;**安全底线不削**(不可逆后果 / 架构决策仍必问)。② **批量确认**——一轮多问、一次放行,放行结论落日志。③ **非阻塞式交互**——可并行推进的事项不阻塞等待。④ **默认推进留痕**——采用默认值时记录「默认值 + 位置」。提速不得换取安全:提问收敛 ≠ 审查 / 测试 / 归档环节可省略(见 \`openfeel-delegation\` §3)。
1891
+
1350
1892
  ### 3. task — 子 Agent 调度
1351
- 触发条件:并行探索多代码区 / 复杂多步委托 general / 下游 Agent(经主会话(Feel))。使用要求:并行一条消息多 task、prompt 含任务描述+期望返回、明确只读/可写。
1893
+ 触发条件:并行探索多代码区 / 复杂多步委托 general / 下游 Agent(经主会话(Feel)) / 直接调度通用工作者(执行者 openfeel-executor;任意 Agent 均可直发,不经多级转介)。使用要求:并行一条消息多 task、prompt 含任务描述+期望返回、明确只读/可写。
1352
1894
 
1353
1895
  ### 4. skill — 技能加载
1354
1896
  触发条件:查阶段状态→openfeel-get-stage-status / 查知识库→openfeel-check-kb / 取 Bug→openfeel-get-bugs。使用要求:会话开始载 check-kb、处理阶段任务前载 get-stage-status、不凭记忆跳过。
@@ -1361,6 +1903,23 @@ description: Agent 工具使用规范(todowrite/question/task/skill 四工具
1361
1903
  | 探索代码 | task(explore) | 手动逐个 grep/read |
1362
1904
  | 获取状态 | skill(openfeel-get-stage-status) | 凭记忆推断 |
1363
1905
  | 批量文件操作 | task(general) | 串行逐个处理 |
1906
+ | 通用执行任务 | task(openfeel-executor) | 自行串行处理 |
1907
+
1908
+ ### 6. 规模阈值与轻量决策边界
1909
+
1910
+ 按改动**波及面**(是否跨文件、是否跨阶段 / 跨模块)选择档位:
1911
+
1912
+ | 规模 | 处理方式 | 流程 |
1913
+ |------|----------|------|
1914
+ | 微小改动(单文件、无跨文件影响) | 调用方自行处理(兼任 openfeel-planner) | 直接编码,无需正式计划 |
1915
+ | 跨文件改动 | 唤起 openfeel-planner 制定正式计划 | 调用方 → openfeel-planner → openfeel-executor |
1916
+ | 多阶段规模化改动(跨模块或需求边界不清) | 大规模规划,必须走完整流程 | 调用方 → openfeel-planner → openfeel-schemer → openfeel-executor → openfeel-reviewer |
1917
+
1918
+ **轻量决策边界**:轻量决策指对话式选型——调用方与用户澄清并敲定技术方向或设计取舍,产出的是「结论」而非「正式计划文档」,不产出 plan.md;此类决策由调用方直接处理,无需委托 openfeel-planner。仅当需要**产出正式计划文档**(plan.md,含阶段划分、任务表、约束表)或该变更明显为跨模块 / 跨阶段性质时,才委托 openfeel-planner。
1919
+
1920
+ ### 7. 委托纪律
1921
+
1922
+ 委托边界、dispatch 双口径、流程不可跳过、Handoff 与多模态委派、子任务上下文描述要求见 \`openfeel-delegation\`。
1364
1923
 
1365
1924
  ## 工具名映射(跨 harness)
1366
1925
 
@@ -1517,7 +2076,7 @@ description: 交互式流水线向导,供 Agent 在终端中逐步推进流水
1517
2076
  2. 按提示选择要推进的阶段和下一步 phase(基于当前阶段的可达 transitions)
1518
2077
  3. 确认后执行推进,循环直至阶段 done 或退出
1519
2078
 
1520
- > **模式选型**:首次运行时向导会询问工作流模式(\`full\` / \`fast\`),写入 \`config.yaml defaults.workflow_mode\`(项目级记忆);非 TTY 环境沿用既有守卫、不询问。
2079
+ > **模式选型**:首次运行时向导会询问工作流模式(\`full\` / \`fast\`),写入 \`config.yaml defaults.workflow_mode\`(项目级记忆);非 TTY 环境沿用既有守卫、不询问。(阶段合法子集:不含需求级 \`general\`;\`general\` 仅需求级合法)
1521
2080
 
1522
2081
  ## 输出
1523
2082
 
@@ -1531,7 +2090,7 @@ description: 交互式流水线向导,供 Agent 在终端中逐步推进流水
1531
2090
  `,
1532
2091
  'openfeel-workspace': `---
1533
2092
  name: openfeel-workspace
1534
- description: 会话启动时检查并补齐 .openfeel/ 工作区目录结构与空文件的标准化操作步骤(mkdir 哪些目录、创建哪些空文件、读 .info.json 取用户名)。
2093
+ description: 会话启动时检查并补齐 .openfeel/ 工作区目录结构与空文件的标准化操作步骤(mkdir 哪些目录、创建哪些空文件、读 .info.json 取用户名),并给出目录语义(公共域 / 私域)与骨架模板。
1535
2094
  ---
1536
2095
 
1537
2096
  # 工作区启动自检
@@ -1558,9 +2117,191 @@ description: 会话启动时检查并补齐 .openfeel/ 工作区目录结构与
1558
2117
  \`.openfeel/users/{username}/dev_last.md\`(**索引**;同名目录 \`dev_last/\` 存主题文件,**文件名英文**)
1559
2118
 
1560
2119
  ### 6. 增量更新复核
1561
- 检查 \`~/.openfeel/update_infos.md\`,若存在未修复条目(追加/异常),提醒用户重启会话或委托主会话(Feel)处理;本 Agent 不自行修改该文件。
2120
+ 检查 \`~/.openfeel/update_infos.md\`,若存在未修复条目(追加/异常),提醒用户重启会话,并按 \`openfeel-memory\` 的 update_infos 检查修复流程处理;本 Agent 不自行修改该文件。
2121
+
2122
+ ## 目录语义(公共域 / 私域)
2123
+
2124
+ \`.openfeel/\` 分为**公共域**与**私域**两部分:
2125
+
2126
+ - **公共域**:直接位于 \`.openfeel/\` 下,存放项目级共享内容(核心规则、计划、团队日志、知识库等),**纳入版本管理**。
2127
+ - **私域**:位于 \`.openfeel/users/{username}/\` 下,存放个人操作状态、日志、笔记、代码审查、Bug 追踪等,**加入 \`.gitignore\` 不纳入版本管理**。
2128
+
2129
+ 所有用户(含单人项目)均遵循此分区结构。Agent 每次通过 \`.openfeel/.info.json\` 获取当前用户名确定私域路径;代码修改后须同步更新私域内相关文件,保持与实际状态一致。
2130
+
2131
+ ### 设计目的与分层原则
2132
+
2133
+ > **两条设计目的(一切格式规则的推导总纲)**:
2134
+ > ① **保存核心信息便于恢复**——任何时刻打开索引(\`dev/current.md\` / \`users/{username}/dev_last.md\`)即可在有限上下文内恢复到可继续工作的程度。
2135
+ > ② **避免无关信息污染上下文**——索引层只放「结论与位置」,细节下沉到主题文件 / \`tmp/\` 文档;索引不承载过程性明细。
2136
+
2137
+ **分层原则**:
2138
+
2139
+ | 层 | 载体 | 粒度上限 | 读者 |
2140
+ |----|------|----------|------|
2141
+ | 索引层 | \`.openfeel/dev/current.md\`、\`.openfeel/users/{username}/dev_last.md\` | 条数硬限 + 字数硬限 | 用户 / 会话启动 |
2142
+ | 主题层 | \`.openfeel/users/{username}/dev_last/{english-name}.md\` | ≤10 条、≤300 字/条 | 按需读取 |
2143
+ | 详情层 | \`.openfeel/users/{username}/tmp/\` 文档 | 不限(仅记**地址**) | 显式指定时读取 |
2144
+
2145
+ > **路径自校验**:构造 \`.openfeel/users/{username}/\` 路径可能意外截断用户名(如 \`Alice\` → \`Alic\`)。访问失败(file not found)时不要直接报错:先重读 \`.openfeel/.info.json\` 取正确 \`username\`,逐字符比对后重建路径重试;连续失败则向用户报告「路径 \`{失败路径}\` 不存在,已确认用户名为 \`{正确用户名}\`」后操作。
2146
+
2147
+ ### 公共域目录职责与命名
2148
+
2149
+ | 路径 | 职责 | 命名约定 |
2150
+ |------|------|----------|
2151
+ | \`.openfeel/.info.json\` | 用户身份(\`{ "user": "username" }\`;缺失则由 \`git config user.name\` 补齐) | 加入 \`.gitignore\` |
2152
+ | \`.openfeel/dev/\` | 项目共享的核心规则与进度状态 | — |
2153
+ | \`dev/dev_core.md\` | 长期有效规则;每条形如 \`[+]\` / \`[-]\` 前缀,**只标禁用不删除** | — |
2154
+ | \`dev/current.md\` | **团队文件(用户级视图)**:跨用户操作与整体信息;**仅个人提交时更新**(一次提交 = 一条记录);只写整体信息、**禁止** agent 细节;仅保留近期 5 条 | — |
2155
+ | \`dev/current_archive/\` | 轮换出的旧记录(**只增不删**,公共域纳版本管理) | \`current-{yyyy-mm-dd}-{NNN}.md\`(同日 NNN 递增) |
2156
+ | \`dev/note/dev_note.md\` | 团队共享开发笔记(来源 = 成员个人笔记的归入) | — |
2157
+ | \`log/\` | 公共日志:**仅团队级重要事件**;按年 / 月 / 日分层,日目录仅当天有事件时创建 | \`yyyy-mm-dd-{username}-NNN.md\`;日目录 \`day_index.md\`;根 \`index.md\` + \`log.md\`(最近 30 条) |
2158
+ | \`code_review/\` | 私域审查完成后的核心结论摘要(按计划阶段组织) | 阶段文件 \`{stage}.md\`;根 \`index.md\`(按阶段分组 + 状态统计) |
2159
+ | \`bugs/\` | 私域 Bug 关闭后的结论摘要(按模块组织) | 模块文件 \`{module}.md\`;根 \`index.md\`(按模块分组) |
2160
+ | \`plan/\` | 计划目录:大计划 \`plan.md\` + 小计划 \`{stage}/\` 子目录;按大版本系列组织 | \`plan/index.md\` 顶层索引;\`{version}/index.md\` 系列索引;\`plan_log.md\`(最近 30 条) |
2161
+ | \`kb/\` | 知识库(「项目是什么样的」+「遇到问题怎么办」) | \`index.md\` / \`architecture.md\` / \`patterns.md\` / \`troubleshooting.md\` / \`setup.md\` |
2162
+ | \`tmp/\` | 项目级临时文件(共享数据、构建产物) | 仅在用户指定时读取 |
2163
+
2164
+ ### 私域目录职责与命名(\`.openfeel/users/{username}/\`)
2165
+
2166
+ | 路径 | 职责 | 命名约定 |
2167
+ |------|------|----------|
2168
+ | \`dev_last.md\`(索引)+ \`dev_last/\`(主题文件) | 本地状态恢复与操作记录;**超期文件不做归档** | 主题文件**文件名一律英文 kebab-case**(如 \`pending.md\` / \`decisions.md\`) |
2169
+ | \`log/\` | 个人日志(日常操作的主要记录位置) | \`yyyy-mm-dd-NNN.md\`(无需用户名) |
2170
+ | \`note/\` | 个人笔记(经验教训的**主要记录位置**) | 简要描述 + 子文件索引 |
2171
+ | \`code_review/\` | 开发阶段代码评审问题(架构 / 规范 / 逻辑),按计划阶段组织 | \`REV-{plan_stage}.md\`;根 \`index.md\` + \`log.md\`(最近 30 条) |
2172
+ | \`bugs/\` | 测试阶段缺陷追踪,按模块组织 | \`{module}/BUG-{NNN}_{简略标题}.md\`(NNN 模块内递增);根 \`index.md\` + \`log.md\`(最近 30 条) |
2173
+ | \`tmp/\` | 当前用户临时文件(与其他用户完全隔离) | — |
2174
+
2175
+ > **记录纪律边界**:何时记 / 记什么 / 格式 / 禁止 → \`openfeel-logging\`;记忆加载 / 偏好合并 / 决策追加 / 落档写入 → \`openfeel-memory\`;本 skill 只承载**目录存在性、目录语义与骨架模板形态**。
2176
+
2177
+ ## 骨架模板
2178
+
2179
+ ### 1. \`dev/current.md\` 骨架(+ 归档命名)
2180
+
2181
+ \`\`\`markdown
2182
+ # 当前进度
2183
+
2184
+ > {一句话整体进度}(整体信息,用户级视图)
2185
+
2186
+ ## 近期提交记录(最多 5 条,最新在上)
2187
+
2188
+ - **{yyyy-mm-dd HH:MM}** @{username}:{整体信息:做了什么、处于什么状态(不写 agent 细节、不写逐条流水)}
2189
+ - **{yyyy-mm-dd HH:MM}** @{username}:{…}
2190
+
2191
+ > 更早记录见 \`.openfeel/dev/current_archive/\`(每次提交自动归档最旧一条;本文件仅保留近期 5 份)。
2192
+ \`\`\`
2193
+
2194
+ - 归档文件名 \`current-{yyyy-mm-dd}-{NNN}.md\`;内容 = 被移出的记录行 + \`>\` 元信息行(原日期、移出时间)。
2195
+ - 记录内**保留单行内联 \`@{username}\`**(跨用户场景标识提交者,行内标识 ≠ 分节)。
2196
+
2197
+ ### 2. \`dev_last.md\` 索引骨架 + 主题文件骨架
2198
+
2199
+ 索引(\`dev_last.md\`):
2200
+
2201
+ \`\`\`markdown
2202
+ # dev_last — 索引({username})
2203
+
2204
+ > 本文件为**索引**:只列主题与核心摘要。详情在 \`dev_last/{english-name}.md\`(每主题 ≤10 条、每条 ≤300 字);超量详情写入 \`.openfeel/users/{username}/tmp/\`,并在主题文件记录其地址。超期文件**不做归档**。
2205
+
2206
+ ## 用户偏好
2207
+ - 语言:{lang} | 自动推进:{auto_advance} | 审查模式:{review_mode}
2208
+ - 沟通风格:{communication} | 确认阈值:{confirm_threshold}
2209
+
2210
+ ## 主题索引(最多 5 个)
2211
+
2212
+ > 每条:\`**{显示主题名(可中文)}**(\`dev_last/{english-name}.md\`)\` + ≤5 条摘要(每条 ≤100 字)。文件名一律英文。
2213
+
2214
+ - **待续事项**(\`dev_last/pending.md\`)
2215
+ - {近期工作核心内容,≤100 字}
2216
+ - **决策记录**(\`dev_last/decisions.md\`)
2217
+ - {…}
2218
+
2219
+ ## 已收敛主题(不计入上方 5 个上限;仅一行,文件就地保留)
2220
+
2221
+ - **{显示主题名}**(\`dev_last/{english-name}.md\`,收敛于 {yyyy-mm-dd}):{≤100 字摘要}
2222
+
2223
+ ## 公共交接区(跨会话传递信息)
2224
+
2225
+ > 仅列**交接文档位置 + 核心摘要**,不描述细节。
2226
+
2227
+ - 交接文档:\`{路径(可为 dev_last/{english-name}.md 或 tmp 文档)}\`
2228
+ - 核心摘要:{一句话}
2229
+ \`\`\`
2230
+
2231
+ 主题文件(\`dev_last/{english-name}.md\`,**文件名英文**):
2232
+
2233
+ \`\`\`markdown
2234
+ # 主题:{显示主题名(可中文)}
2235
+
2236
+ > 详情记录:近期 ≤10 条、每条 ≤300 字。超出则写入 \`tmp/\` 文档并在此记录地址。超期记录不归档。
2237
+
2238
+ - **{yyyy-mm-dd}** {近期工作核心内容(≤300 字)}
2239
+
2240
+ > 超量详情:\`{tmp 文档路径}\`(如 \`.openfeel/users/{username}/tmp/{file}.md\`)
2241
+ > 超期记录:**不归档**(就地保留或由用户手动清理)。
2242
+ \`\`\`
2243
+
2244
+ - 主题文件名映射:待续事项 → \`dev_last/pending.md\`、决策记录 → \`dev_last/decisions.md\`、流水线状态 → \`dev_last/pipeline-state.md\`、上次操作 → \`dev_last/last-operation.md\`、经验暂存 → \`dev_last/experience.md\`(新主题同理,英文 kebab-case)。
2245
+ - 主题数 >5 时:**优先合并同类主题**;无可合并则把最旧且已完结主题降为一行摘要移入「已收敛主题」(\`dev_last/archive/\` **不存在**,不迁移、不归档)。
2246
+
2247
+ ### 3. \`REV-{NO}\` 条目模板
2248
+
2249
+ \`\`\`markdown
2250
+ ## REV-{NO}: {简要标题}
2251
+ - **状态**:pending | fixing | resolved | closed
2252
+ - **优先级**:high | medium | low
2253
+ - **提出人**:openfeel-reviewer
2254
+ - **提出时间**:yyyy-mm-dd HH:MM
2255
+
2256
+ ### 问题描述
2257
+ ...
2258
+
2259
+ ### 处理记录
2260
+ | 时间 | 操作者 | 说明 | Commit |
2261
+ |------|--------|------|--------|
2262
+
2263
+ ### 验收记录
2264
+ | 时间 | 验收人 | 结论 | 备注 |
2265
+ |------|--------|------|------|
2266
+ \`\`\`
2267
+
2268
+ - 按计划阶段集中在 \`code_review/REV-{plan_stage}.md\`;根目录维护 \`index.md\`(按阶段分组索引 + 各状态数量统计)与 \`log.md\`(最近 30 条审查变更摘要)。
2269
+
2270
+ ### 4. Bug 目录结构 + 命名 + 审查 / 追踪生命周期
2271
+
2272
+ \`\`\`
2273
+ .openfeel/users/{username}/bugs/
2274
+ ├── index.md # 按模块分组索引(### {模块名} @{负责Agent名})
2275
+ ├── log.md # 最近 30 条变更摘要
2276
+ ├── {module_a}/
2277
+ │ ├── BUG-001_标题.md
2278
+ │ └── BUG-002_标题.md
2279
+ └── {module_b}/
2280
+ └── BUG-001_标题.md
2281
+ \`\`\`
2282
+
2283
+ 代码审查与 Bug 追踪**共用同一状态流转模型**(仅起始状态名不同):
2284
+
2285
+ \`\`\`
2286
+ pending/open ──→ fixing ──→ resolved ──→ closed
2287
+ ↑ │
2288
+ └────────── 验收不通过 ───┘
2289
+ \`\`\`
2290
+
2291
+ | 状态 | 代码审查 | Bug 追踪 | 操作者 |
2292
+ |------|---------|---------|--------|
2293
+ | 起始 | \`pending\` | \`open\` | openfeel-reviewer / openfeel-feel-tester 提交 |
2294
+ | 修复中 | \`fixing\` | \`fixing\` | openfeel-executor 承接 |
2295
+ | 待验收 | \`resolved\` | \`resolved\` | openfeel-executor 完成 |
2296
+ | 关闭 | \`closed\` | \`closed\` | openfeel-reviewer / openfeel-feel-tester 验收通过 |
2297
+
2298
+ - 条目 \`closed\` 时:审查结论写入 \`.openfeel/code_review/{stage}.md\`,Bug 结论写入 \`.openfeel/bugs/{module}.md\`,并在公共日志简要记录。
2299
+
2300
+ ## 输出
2301
+
2302
+ 工作区自检结果:补齐的目录 / 文件清单 + 用户名 + 未修复条目提示
1562
2303
 
1563
- > 目录结构语义、公共/私域分区、用户身份约束、路径自校验规则见全局规则文件(opencode 适配器:\`~/.config/opencode/AGENTS.md\`;Claude Code 适配器:\`~/.claude/CLAUDE.md\`)(约束);本 skill 仅承载操作步骤。
2304
+ > 本 skill 承载操作步骤、目录语义与骨架模板;全局约束见全局规则文件(opencode 适配器:\`~/.config/opencode/AGENTS.md\`;Claude Code 适配器:\`~/.claude/CLAUDE.md\`)。
1564
2305
  `,
1565
2306
  };
1566
2307
  // AUTO-GENERATED-END: SKILL_DEFINITIONS
@@ -1628,7 +2369,10 @@ function writeManagedFile(filePath, content, stateKey, updateState, target, comm
1628
2369
  if (region.status === 'ok') {
1629
2370
  // 含标记:frontmatter 合并 + 正文区内替换,全文比对(REV-901 skip 判定)
1630
2371
  // incoming 无 frontmatter(如 core.md/AGENTS.md 模板)时保留用户已有 frontmatter,避免写入丢失(REV-1101)
1631
- const newFm = existingFm && incomingFm ? mergeFrontmatter(existingFm, incomingFm) : (existingFm ?? incomingFm);
2372
+ // 用户主权键(stage-94):部署路径传入白名单,已存在则保留用户值(「无则创建、有则不覆盖」)
2373
+ const newFm = existingFm && incomingFm
2374
+ ? mergeFrontmatter(existingFm, incomingFm, USER_SOVEREIGN_KEYS)
2375
+ : (existingFm ?? incomingFm);
1632
2376
  const newBody = replaceRegion(existingBody, incomingBody, type);
1633
2377
  const newContent = newFm ? serializeFrontmatter(newFm) + newBody : newBody;
1634
2378
  if (newContent === normalize(existing)) {
@@ -1822,7 +2566,7 @@ export function updateProject(projectPath, selectedTools = ["opencode"], lang =
1822
2566
  skipped.push('opencode.jsonc (use existing)');
1823
2567
  }
1824
2568
  }
1825
- // claude 分支:CLAUDE.md + 9 agent + 17 共享 skill + settings.json(stage-73)
2569
+ // claude 分支:CLAUDE.md + 9 agent + 18 共享 skill + settings.json(stage-73)
1826
2570
  if (wantClaude) {
1827
2571
  const claudeAgentsDir = getClaudeAgentsDir();
1828
2572
  const claudeSkillsDir = getClaudeSkillsDir();
@@ -1836,7 +2580,7 @@ export function updateProject(projectPath, selectedTools = ["opencode"], lang =
1836
2580
  const p = join(claudeAgentsDir, `${name}.md`);
1837
2581
  pushAction(deployGlobalAsset(p, loadClaudeAgentTemplate(lang, name), newGlobalState, 'update'), p, created, updated, skipped, appended);
1838
2582
  }
1839
- // 3c. 17 共享 skills
2583
+ // 3c. 18 共享 skills
1840
2584
  for (const [name, content] of Object.entries(SKILL_DEFINITIONS)) {
1841
2585
  const dir = join(claudeSkillsDir, name);
1842
2586
  mkdirSync(dir, { recursive: true });