intent · git:20260908.6caf1bf · 2026-09-08 · sha256 6bd65a6c4c2d15e6

intent git:20260908.6caf1bfA

Immutable. This exact content is served forever at /api/v1/blob/6bd65a6c4c2d15e6.

---
name: intent
description: 识别用户意图类型(dev/fix/analyze/audit/self-fix/chat/resume/other),采用前置识别 + 三问法。Free 层可用。
---
## 前置识别(优先于三问)

| 检查 | 条件 | 意图 |
|------|------|------|
| 是否按任务名恢复? | 根据完整对话判断用户要续接哪项已有任务,提取任务定位信息 | 先调用 `memory_task_resolve`;仅 `resolved-active` 进入 `resume`,其余状态按最小消歧/完成说明/stale CP 处理 |
| 是否恢复中断? | 当前消息在上下文中表达续接目的,且当前会话的任务恢复证据仍有效;短回答或特定词本身不决定路由 | `resume` → 定向复水化,保留已确认范围与授权 |
| 是否纯问答? | 仅提问/求解释,无文件变更或任务执行意图 | `chat` → 直接路由,跳过三问 |

### chat 子类标签(仅用于回答策略,不新增工作流)

当消息已命中 `chat` 时,进一步区分以下两类常见说明意图:

| 标签 | 条件 | 默认处理 |
|------|------|---------|
| 规范说明类 | 用户追问规则来源、判断依据、为什么这样设计 | 先正面解释规则层依据,不默认贴完整原文/路径/编号清单 |
| 规范改进类 | 用户追问规范如何提升、还能怎么优化、下一步改进什么 | 先正面讨论改进方向;若用户要落地变更,再转 dev 立项 |

> ⚠️ 上述两个标签只是 `chat` 下的回答策略辅助标签,不是新的顶层工作流。
> ⚠️ 面向用户的默认输出场景下,仍应优先用自然语言解释;仅在回答确有必要时才最小化展开内部细节。
> ℹ️ 项目内 `dev` 模式下的规范优化、规则提升与实现讨论,不因这两个标签增加额外限制。

> 两项均为否 → 进入三问判断。

### TaskContinuationIntentGate

任务名续接只把名称当定位键,不把名称、Hook 命中或派生索引当作状态真相。匹配顺序固定为 stable taskId → active displayName exact → active alias exact → completed/rejected exact;相似名称只返回最多 5 个建议,禁止 fuzzy 自动命中。`resolved-active` 后仍须按 `task.json → sessions.md → 当前绑定产物/checkpoint` 定向复水化并复证 CP digest;`ambiguous / not-found / completed / rejected / stale-confirmation / scale-blocked` 不得进入任务执行。

## 三问判断法

> ⛔ 意图识别基于用户消息的**语义目的**,不依赖关键词匹配。

先理解当前真实用户消息与已有任务,再通过 `profile_context_plan` 提交结构化结论:路由沿用 `intent`、`routeKey`、`changeTypes`;可选 `semanticDecision` 使用 `IntentSemanticDecisionV1`,其 `sourceRef` 必须引用当前可信入口的 envelopeId、envelopeDigest 与 contextEpoch。按实际意图填写 workflowPreference、workflowFacts、executionDecision、languageDecision,不能从昵称、中文字符占比、代码/引用或宿主问答包装推断这些字段。语言明确要求及持续偏好优先;临时回复语言使用 scope=turn,持续任务偏好使用 scope=task。宿主结构化问答只把 answer 作为用户回复,question 保留为上下文。模型选择明确指定的 Skill 时提交 `explicitSkillId`;精确引用或示例不自动激活 Skill。缺少必要信息时先定向读取,只有确实影响下一步的歧义才向用户询问。

| 问题 | 指向变更 | 指向分析 |
|------|---------|---------|
| Q1:最终目的是产生变更(代码/配置/规范文件),还是获得结论/报告? | 变更 | 结论 |
| Q2:分析是手段(为了执行变更)还是目的(为了得出结论)? | 手段 | 目的 |
| Q3:是否需要修改/创建/删除任何文件(含源码与规范文件)? | 是 | 否 |

**三问结论**:
- 任一指向变更 → 检查是否满足 self-fix 条件 → 满足则 `self-fix`;否则 `dev` 或 `fix`
- 三问全指向分析 → 区分 `analyze` vs `audit`

## 意图类型路由

验证的暂停、缩小范围或确认同样由模型解释,通过当前来源绑定的 `semanticDecision.validationDecision` 提交 action(none、revoke、confirm-current-budget);确认可附 requestedBudgetDigest 与 declaredChangedPathCount。执行模式和验证范围是不同决定,不因回复出现“暂停”“确认”或 @ 别名自动变更。运行时继续校验验证卡、任务、项目、候选和单轮屏障。任务恢复使用既有 `memory_task_resolve` 的精确查询与恢复证据,不把自然语言的“继续……”直接当历史任务名。

| 意图 | 说明 |
|------|------|
| `dev` | 新功能开发、重构、优化、迁移 |
| `fix` | Bug 修复、报错处理 |
| `analyze` | 多轮收敛分析,≥3 轮,输出结论(analyze)|
| `audit` | 多轮深度审查,≥3 轮,直至收敛 |
| `self-fix` | 规范文件自修复 |
| `chat` | 问答、解释(无文件变更)|
| `resume` | 恢复上次中断的任务 |
| `other` | 不匹配上述任何意图 → plan 工作流 |

## 项目现实扩展衔接

意图识别分两层输出:

1. **语义初判**:仅基于用户消息和当前对话,判断用户最终目的。
2. **项目现实扩展后最终路由**:在目标项目已确定、Profile 已加载后,结合项目技术栈、目录结构、当前需求/bug 产物、测试与发布约束,确认是否需要修正工作流或子类型。

约束:

- 项目未确定前,不得为了“扩展意图”发起超出当前明确文件范围的工作区扫描。
- 若项目现实扩展推翻语义初判,应在 PC1 中写清“语义初判 → 最终路由”的变化。
- 若扩展发现这是多项目或跨服务任务,应先标注边界与入口项目,再决定是否需要加载关联服务 profile。

### Intent Expansion Card

非 chat 工作流在 CP1 / 问题确认前输出或写入可审查的 Intent Expansion Card,避免压缩恢复后只剩模糊摘要。

- dev 模式默认向用户展示完整 Card;prod、instruction-fallback 宿主或低风险轻任务可退化为 3~5 行摘要。
- 压缩恢复、resume 或用户明确要求“按文件真相重建”时,必须先按文件真相源重建 Card,再决定最终路由。
- 🔴 **ProactiveBetterAlternativeGate 联动(PI-20260724-cp1-intent-expansion-proactive)**:请求 CP1/CP2 确认前,须**主动**交付 Expansion 与更优/备选路线(含遗漏场景),**不得**等用户追问「还有没有更合理建议」才补。

| 字段 | 说明 |
|------|------|
| `semantic` | 用户字面语义初判 |
| `project` | 目标项目与 active-root |
| `continuity` | 是否延续现有 requirement/bug/session |
| `action` | 最终工作流与子类型 |
| `domain` | 受影响模块/领域 |
| `artifact-impact` | source/config/docs/memory/report/deployment 等影响面 |
| `risk` | destructive/security/high-risk/normal |
| `host-capability` | 是否涉及宿主能力差异及降级边界 |
| `validation-route` | test/lint/typecheck/validate/direct replay/官方文档 |
| `confidence` | high/medium/low |
| `alternatives` | 被排除路线及原因 |

### DocsAudienceIntent(文档写作任务强制)

当用户意图涉及**编写/改写** README、文档站、website docs、用户手册、contributing、API 参考或模糊「写文档」时:

1. **必须**由模型根据用户目标、预期读者与现有文档判定 `docsAudience` + `docsSurface`;`scripts/lib/docs-audience-intent.js` 仅校验 `DocsAudienceDecisionV1` 的结构,不从文字或目录名判定受众。  
2. 说明采用的受众;信息不足时先读取相关上下文,必要的消歧须给出有依据的推荐,不因缺少固定词自动阻断。  
3. 路由:  
   - `public-user` → `user-manual-authoring`(+ 条件 `readme-authoring`)  
   - `maintainer-dev` → `maintainer-docs-site-authoring`  
   - `ambiguous` → 补充上下文,仍无法确定且影响产物时再消歧  
   - `multi-audience` → 按读者组织相应交付物,沿用用户已确认的任务范围  
4. 完成前做受众漂移检查;失败不得宣称文档任务完成。  
5. `npm run test:docs-audience` 只证明结构与摘要绑定;真实文档须经模型内容审查和实际用户路径验证。  
6. 可读性、受众漂移等结论必须绑定当前正文摘要,包含理由与来源引用;没有 `DocsContentReviewV1` 的辅助函数结果为 unverified,不得冒充内容验收通过。

### 问题驱动场景延展(强制 · PI-20260724-proactive-scenario-extension)

当用户提出**具体痛点/问题**(文档看不懂、流程缺步、规范歧义、某种失败模式等),助手在正面回答之后,**同一轮**须主动延展 3+ 条相关场景或风险(表格或编号),不得只回一句就结束、等用户再问「还有没有其他场景」。

- 机器抽检:`classifyProactiveScenarioExtensionSample(userMessage, assistantReply)` 不得为 `missing-extension`(在适用痛点句上)。  
- 与 Intent Expansion / C12 同向:扩展是默认义务。

### HostCapabilityRoutingHandoff

`intent` 始终拥有 `workflowIntent`。当前消息的 identity 可在入口阶段形成 `OriginalInstructionRefV1`,但只有项目现实扩展和最终 workflow 路由完成后,才按需把 `workflowIntent + instructionRefId + host/variant + scope/risk/confidence` 交给 `host-capability-routing`,由后者选择 `direct / plan_first / auto_authorized`。

- `host-capability-routing` 不得把 portable decision 回写成新的 workflow intent。
- `direct` 不等于跳过 CP;`plan_first` 不等于 native Plan 已进入;`auto_authorized` 必须引用既有 `autoAuthorityRef`。
- chat 且无 DevCodex 执行意图时不触发。
- Skill/catalog 缺失、variant 未知或证据不足时维持当前 workflow route,并使用 portable fallback。

## IntentConsistencyGuard-lite

当用户消息准备触发确认、继续或阶段转换时,先由语义路由得到 `semanticAction/confidence`,再使用 `IntentConsistencyInputV1 → IntentConsistencyDecisionV1` 核对显式状态证据;不得让本 Guard 用关键词替代语义识别。机器可执行真相源为 `scripts/lib/intent-consistency.js`。

证据优先级固定为:`user-current > confirmed-requirement-or-proposal > phase > route-hint > history`。`confirm/continue` 必须同时绑定当前 `proposalRef` 与 `requirementRef`;“确认 / 继续 / yes / ok”等短确认只有在引用唯一且 phase/requirement 匹配时才能返回 `matched`。

| 场景 | status | errorCode | 处理 |
|---|---|---|---|
| refs/phase/confidence 一致 | `matched` | `null` | 允许进入已确认转换 |
| proposal 或 requirement 状态缺失 | `clarify` | `INTENT_STATE_MISSING` | 恢复当前引用后重新确认 |
| requirement 不匹配 | `blocked` | `INTENT_REQUIREMENT_MISMATCH` | 重载 active requirement |
| phase 不匹配 | `blocked` | `INTENT_PHASE_MISMATCH` | 返回预期阶段或刷新阶段证据 |
| confidence 低于执行阈值 | `clarify` | `INTENT_LOW_CONFIDENCE` | 澄清语义,不猜测转换 |

`routeHints/historyRefs` 可作为 `ignored` 解释证据,但不得覆盖当前用户消息或已确认产物。该合同只返回 decision,不自行写 CP state、需求文件或 Hook 状态。

## analyze vs audit 区分

| 维度 | analyze | audit |
|------|---------|-------|
| 过程类型 | 多轮收敛分析(≥3 轮,连续 2 轮无新发现后收敛)| 多轮深度审查,直至收敛 |
| 结束条件 | 最少 3 轮,连续 2 轮无新发现;轮末输出收敛状态 | 连续 3 轮有效零发现(仍须满足连续 3 轮零发现,并核验 `ReviewCoverageDelta`;不区分定向/全面,见 `12-audit §多轮收敛规则`)|
| 典型表述 | "分析/看看/评估/对比/解读" | "深度审查/全面体检/逐项检查/走查" |

**边界词处理**:"检查"/"review"/"评审" 倾向 audit,但以**覆盖范围和收敛期望**为准。

## dev vs fix 区分

| 维度 | dev | fix |
|------|-----|-----|
| 动机 | 主动改进(新增/重构/优化/迁移) | 被动修正(Bug/报错/回归)|
| 判断标准 | 系统当前行为正确,但需要扩展或改进 | 系统当前行为不正确,需要恢复 |

> 仍然模糊时,优先按 fix 路由(fix 流程含根因分析 CP1,分析后若实际需要新功能可重路由到 dev)

## self-fix 识别标准

| 条件 | 说明 |
|------|------|
| 修改对象 | DevCodex 插件目录下的规范文件(`instructions/` · `skills/` · `prompts/` · `agents/` · `RULES.md`)|
| 修改动机 | 修复规范内部不一致、错误、缺失(非功能迭代、非新增)|

**特殊场景——治理记录评估**(T_RECORD 分支):
- 每条非空用户消息都先登记中性 candidate;是否进入 T_RECORD 必须在合理性评估、项目现实扩展和上下文归因后按语义决定。固定措辞或关键词只能帮助检索,不能触发、分类或免除评估。
- 决策归一为:`record.violation`、`record.spec-defect`、`record.process-improvement`、`record.pending-issue`、`record.audit-gap`、`record.none`、`record.ambiguous`;同一消息允许多个实质意图并存。
- 写入目标由 `skills/spec-governance/SKILL.md` 的 RecordRouter 决定:VL/PF/PI(优化清单)/ISSUE/GAP 或不写台账;复合意图必须逐项 all-of 验证。
- 每次评估输出完整 `GovernanceIntakeDecision`;`record.none` 执行 `RecordNoneChallengeGate`,`record.ambiguous` 保持未终结并先澄清。

## 多任务检测(强制)

用户消息含 ≥2 个独立任务时:
1. 列出识别到的各任务
2. 建议拆分为顺序执行
3. 用户不同意 → 按用户指定顺序
4. 用户未明确反对 → **立即开始第一个任务**(无需额外等待确认)

`ConcurrencyPolicy` 只放开前置只读识别、文件搜索和隔离分析的并发;多个独立任务的正式工作流、CP 状态、报告、记忆和台账写入仍按顺序推进,不能并行提交共享状态。

> ℹ️ C14:任务数≥5 时,建议用户拆分会话执行

## 多任务摘要隔离(强制)

若记忆中同时存在 ≥2 个不同项目/任务的活跃 CP 状态,收到新消息时:
① 根据消息内容显式判断属于哪个任务
② 对该任务独立重新执行三问判断
③ **禁止**将任务 A 的工作流类型或 CP 状态继承应用到任务 B