# 0.6.3 计划：结构化设计知识 + 品牌约束 + 编排预算 + 返工检索桥

> 状态：**已实现（0.6.3）** · 目标版本：`0.6.3` · 前置：`0.6.2`（设计参考库 + 双 Agent 通道）
> 范围：A 卡片 schema 扩展 / B 品牌业务卡 / C 编排预算 / F 反馈→检索桥。
> 一句话：让「参考库」从能搜，变成**可按业务维度检索、受品牌约束、受预算约束、并且会把审计反馈变成下一轮检索**。

## 0. 为什么

0.6.2 解决了「参考存哪、两个 Agent 怎么读、引用怎么进闸门」，但对照成熟的 RAG 设计系统还有四个缺口：

1. 卡片只有 tokens + tags，缺**风格优先级、反模式 ID、交付检查清单、业务维度**，检索只能靠全文；
2. 「古茗的年轻化」「墨水屏低刷新率」这类**业务约束**散落在任务包里，不能跨轮复用，也不会强制进入实现上下文；
3. 对抗循环没有**预算**：审计轮次和检索次数可以无限增长，Orchestrator 没有硬停；
4. 审计失败后的返工单只是「哪里错了」，没有把 B 的否决**变成 A 下一轮的检索词**。

## A. 卡片 schema 扩展

`DesignCard` 新增（全部可选，老卡默认 `kind: pattern`）：

| 字段 | 例 | 用途 |
| --- | --- | --- |
| `kind` | `pattern` / `anti-pattern` | 反模式卡用 `AP-*` 命名空间；默认检索只返回 pattern |
| `stylePriority` | `["极简主义", "玻璃拟态"]` | 有序风格偏好，进 chunk 并参与 style 过滤 |
| `antiPatterns` | `["AP-0001"]` | pattern 卡引用的禁止项；报告/简报可追溯 |
| `checklist` | `["主色不超过两种", …]` | 交付前检查项，进 chunk 供审计检索 |
| `dimensions` | `{ appType: "金融后台", platform: "harmonyos", style: "极简主义" }` | 检索过滤维度 |
| `brand` | 见 B | 仅 `source.kind: brand` 使用 |

- `search` 新增 `appType` / `platform` / `style` / `kind`（默认 `pattern`，不含品牌卡与反模式卡）；
- 过滤是**严格匹配**：给了维度但卡片没写该维度 → 不返回；
- `query.mjs` 同步支持 `--app-type` / `--platform` / `--style` / `--kind`，与工具 parity 测试；
- 反模式卡：`kind: anti-pattern`，id 自动分配 `AP-0001`；必须有 title + rationale/summary。

## B. 品牌 / 业务卡

- `source.kind` 新增 `brand`；卡片带 `brand: { positioning, audience[], constraints[], bannedStyles[] }`；
- ingest 时至少要有其中一项，否则跳过并警告；
- **brief 强制注入**：`generateDesignBrief` 不看检索分数，直接把 active 品牌卡放进简报的
  「## 0. 品牌与业务约束（强制注入）」小节（默认最多 3 张，`designBrandCards`）；
- 品牌卡默认**不进入** pattern 检索结果，避免和审美参考混淆；需要时用 `kind: brand` 显式查。

## C. 编排预算

| 配置 | 默认 | 行为 |
| --- | --- | --- |
| `maxAuditRounds` | 5 | 本轮审计次数达到上限 → `dwguard_audit` 直接失败，要求停线/用户确认 |
| `maxDesignSearches` | 12 | 本轮 `search`/`brief` 次数达到上限 → 直接失败，改用已有参考 |

- state 新增 `roundDesignSearches` / `designSearches`，审计沿用 `roundAudits`；
- `dwguard_spec` 写新任务包时重置 `roundAudits` / `roundDesignSearches`；
- `dwguard_status` 显示「本轮预算：审计 N/M · 设计检索 N/M」，用尽时写进下一步动作；
- 预算只约束 **DSH 工具调用**；DevEco 直接跑 `query.mjs` 不进预算（本地确定性、无模型成本）。

## F. 反馈 → 检索桥

- 审计失败时，对每个未通过的审美判据生成一条建议（最多 3 条）：
  `{ criterionId, query: <判据原文截断>, refs: designRefs }`；
- 写入 `.shared/design-library/rework-suggestions.json`；
- 返工单新增「2.5 设计参考建议」：建议检索词 + 已引用参考的标题/tokens；outbox `rework` 记录同步附上；
- 下一轮 `dwguard_design brief`：
  - 读取同 specVersion 的队列，在简报里加「0.5 上一轮返工定向参考」；
  - 用每条建议检索 top-2，去重后补最多 4 张卡进简报；
- 审计通过时清空队列（新任务包也会因 specVersion 不匹配自然失效）。

## 验收标准（可证伪）

| ID | 判据 | 验证方式 |
| --- | --- | --- |
| A-1 | 结构化字段经 inbox 摄取后可完整读回（stylePriority/antiPatterns/checklist/dimensions） | 单测：manifest 字段断言 |
| A-2 | `appType/platform/style/kind` 过滤生效；给了维度但卡片缺失 → 排除 | 单测：三个过滤场景 |
| A-3 | 反模式卡 id 为 `AP-*`，默认 pattern 检索不混入 | 单测：kind=anti-pattern 与默认检索 |
| A-4 | `query.mjs` 的过滤结果与工具一致 | 单测：CLI `--app-type` parity |
| B-1 | 品牌卡缺 brand 负载被拒绝；合法品牌卡在 brief 中强制出现且含定位/约束/禁用风格 | 单测：两种 ingest + brief markdown |
| B-2 | 品牌卡不出现在默认 pattern 检索，`kind: brand` 可显式查 | 单测 |
| C-1 | 设计检索预算：第 N+1 次 `search` 直接失败，state 计数正确，写新任务包后归零 | 单测 |
| C-2 | 审计预算：达到 `maxAuditRounds` 后再次审计直接失败 | 单测 |
| C-3 | `status` 显示预算并在用尽时给出停线动作 | 单测：status detail/next |
| F-1 | 失败审计写出建议队列；返工单含建议检索词与引用参考 | 单测：读 rework 文件 + queue |
| F-2 | 下一轮 brief 含「上一轮返工定向参考」并带入检索词 | 单测：brief detail + markdown |
| F-3 | 审计通过后建议队列被清空 | 单测：文件不存在 |

## 不做什么

- 不引入向量数据库 / dense 检索（理由见 0.6.2 计划 §4.4；hybrid 仍为预留）；
- 不做 prompt 自改进（改提示词仍要人审）；
- 不把 AP 引用变成 spec/audit 的硬闸门（本轮先做数据与报告；后续可按 `profileRef` 同款接入）；
- 不把预算做成 token 级（宿主模型层负责；插件只约束检索/审计轮次）。

## 兼容性与风险

- 所有新字段可选；老卡片按 `kind: pattern` 处理，index 在下次 ingest 时重建；
- `DESIGN_ENGINE_VERSION` → `0.6.3`；manifest/index 结构向后兼容；
- 风险：品牌卡强制注入过多 → `designBrandCards` 默认 3、可设 0 关闭；预算太紧 → 配置可调，失败信息给出调整路径；
- 风险：F 的建议检索词直接取判据原文，可能过长/噪声 → 截断 60 字、最多 3 条，且只是建议，DSH 仍可人工改写。

## 版本计划

| 版本 | 内容 |
| --- | --- |
| `0.6.3` | 本文 A/B/C/F |
| `0.7.0` | 候选：AP 引用接入 spec/audit 硬闸门、hybrid 语义重排、PNG pHash 以图搜图、跨项目模板 |
