mirror of
https://github.com/nexu-io/open-design.git
synced 2026-10-27 09:51:12 +01:00
* fix(prompts): add "When NOT to emit <artifact>" clauses (#1143) #1143 现场报告:当本轮只用 Edit 工具修改已有 HTML 文件、没有写出新 canonical HTML 时,AI 仍按 system prompt 的 "non-negotiable output rule" 字面收尾,把一句中文总结塞进 `<artifact type="text/html">` 块 里。下游持久化路径会把这一句 prose 当合法 HTML 落盘,污染项目文件 面板(截图见 #50 评论)。 根因在 prompt 缺少免发条款。本次修改: - 把 "Artifact handoff (non-negotiable output rule)" 改为条件化措辞 "Artifact handoff" + "When you ship a fresh deliverable…" - Workflow step 5 ("Finish") 增加 in-place edit 不发 artifact 的分支 - 新增 "When NOT to emit `<artifact>`" 子段,明确三条免发条件: - in-place edits only:本轮无新 canonical HTML 产出 → 直接说改了 哪个文件、改了什么 - body 必须是完整 `<!doctype html>` 文档 → 总结/路径/bash 输出/ 说明用普通回复,不要包标签 - 拿不准就别发 → 重发未变 artifact 没价值,发空壳 artifact 反而 误导用户、污染面板 测试:apps/daemon/tests/prompts/system.test.ts 新增 describe 块 "artifact handoff no-emit clauses (#1143)" 4 例,断言 composed prompt 含必要短语。 #50 持久化层兜底(pre-write HTML gate)由 #1144 单独跟进,与本 PR 互补:本 PR 让 AI 不去发空壳 artifact,#1144 在写盘前再挡一道, 即使 prompt 失守也不会污染项目面板。 * fix(prompts): 让 discovery 主导层也支持 artifact 免发例外 (方案 C) review (lefarcen P1, mrcfps blocker): base 层新增的 "When NOT to emit <artifact>" 例外被更高优先级的 DISCOVERY_AND_PHILOSOPHY 层中的无条件 emit 指令盖过去,导致 #1143 主路径仍可能产出空壳 artifact。 按 review 中的方案 C 修补: - discovery.ts RULE 3 之前新增 "Artifact emission is conditional" 主导层不变式段落(条件式 emit 在主导层声明一次,base 层保持详细规则) - discovery.ts:17 arc 注释 / :143 plan 模板 step 9 / :262 default arc recap 全部改为条件式(仅在本轮写出新 canonical HTML 时 emit) - deck-framework.ts:327 deck workflow step 7 同步改为条件式 测试加 2 条断言: - 负断言:组装后 prompt 不再含未限定的 "Emit single <artifact>" / "emit a single <artifact>." 行 - 正断言:discovery 层包含 "only when this turn wrote a new canonical HTML" 与 "only edited an existing HTML file" 等价表述 * test(prompts): 补 deck-mode 负断言覆盖 deck-framework.ts:327 review (lefarcen P2): 上一轮的负断言用 composeSystemPrompt({}) 调用, 不会触发 DECK_FRAMEWORK_DIRECTIVE 的拼接(仅在 skillMode === 'deck' 或 metadata.kind === 'deck' 时追加)。如果 deck-framework.ts:327 后续回 退到 "Emit single <artifact>",无参负断言依然假绿。 补一条显式的 deck-mode 断言: - 负断言:deck-mode prompt 不含未限定的 "7. Emit single <artifact>" 行 - 正断言:含本次改的 "Emit single <artifact> if a new canonical deck HTML"