Impeccable new-work 流程实战:从视觉权威判定到完成度审查的新表面七阶段设计管线
【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccable
本文围绕 Impeccable 技能包中的 new-work 参考文档展开,讲清楚“为新表面或替换视觉身份而启动设计工作”的完整流程:如何判定项目已有的视觉权威、如何向用户提出改变工作性质的问题、如何选择发明程度、如何把方向决策记录为 surface brief 中的 Direction contract,以及如何用build-phase状态机驱动从 comp 测量到完成度审查的构建。读完本文,你可以把一条“重做这个页面”的请求拆解为可执行、可验证、可交接的阶段序列,并理解每个 CLI 命令在 Rust 引擎中的真实落点。
流程定位:三份上下文文件各司其职
new-work 流程是 Impeccable 技能中处理“新表面”或“替换视觉身份”的专用 playbook。技能入口 SKILL.md 的路由规则明确:无 PRODUCT.md 的新表面或替换型视觉世界,先经 init 再进入 new-work;而一般的细化请求则直接在既有实现上进行。流程开头确立了上下文三分的权责边界:
- PRODUCT.md拥有产品事实(战略层:用户、品牌、原则);
- DESIGN.md拥有耐久的视觉决策(视觉层:颜色、字体、组件);
- surface brief只保存属于某一条路由或某一个工件的策略。
当 PRODUCT.md 缺失时,先完成 init.md;而 DESIGN.md 缺失不会把请求路由回 init——这一点是后续“视觉权威判定”的逻辑前提。每条命令的语义可在 command-metadata.json 中逐条核对,例如init负责多轮发现访谈并写入 PRODUCT.md,document负责从既有代码生成 DESIGN.md。
第一步:判定什么已经是真的
动手之前先读 DESIGN.md、代表性代码、tokens、组件与资产,然后落入四种情形之一:
| 情形 | 处置 |
|---|---|
| Redesign(重做) | 保留产品事实、内容、功能、约束与明确的品牌承诺;替换旧视觉世界而不是打磨它。旧外观是“主题是什么”的证据,不是“它将变成什么”的权威 |
| Established world(已成立的世界) | 继承它。DESIGN.md 缺失并不抹掉代码里已经自洽的身份——应把该身份记录下来,而不是发明一个替代品 |
| Incomplete brand(不完整的品牌) | 保留已确认的资产与可识别特征,然后与用户一起为这个表面扩展系统 |
| No visual authority(无视觉权威) | 与用户一起创建一个新世界 |
文档还划出一条硬边界:已成立表面内部的 section、组件、功能或状态,一律继承该表面的世界。局部新增永远不能升级为一场身份重写。SKILL.md 用同一句话重申了这条原则:“Visual authority is evidence, not a filename”——缺一个 DESIGN.md 文件不等于项目是 greenfield。
第二步:问出会改变工作性质的问题
实现之前,只要结构化提问工具可用,就用它拿到用户的答案。问两三个相互关联的问题即可;精确的请求只需要一次紧凑确认。跳过已定事实,但不要跳过确认本身:DESIGN.md 定的是视觉世界,不是这个表面的目的或概念。四类模式各有一套必问题目:
- Persuade(说服):谁必须行动?他们应相信什么?哪些真实的证据、内容或资产能赢得这份信任?
- Operate(操作):任务是什么?需要什么信息?哪些状态重要?使用频率?约束?
- Read(阅读):读者的问题是什么?源材料是什么?结构?寻路方式?
- Experience(体验):什么先行?探索如何展开?哪个交互或转场最重要?
跨模式统一追问三件事:成功长什么样、什么绝对不能碰、什么会让一个“精致的结果”显得不对劲。文档明确禁止两件事:不要向用户索要 CSS 具体值,不要让用户在现成的审美赛道里做选择题。
第三步:选择正确的发明程度
3.1 扩展现有表面
继承其世界与构图,只解决新增目的、内容、层级、状态、交互,以及新加入如何融入周边体验。没有 concept tournament,也不改 DESIGN.md——除非用户批准了耐久的系统级变更。
3.2 在已成立世界内创造一个完整表面
视觉系统保持固定。从内容、任务与用户行为派生5~7 个实质不同的结构,按共鸣度排序。对一个真正开放的整页、整屏或整流程,运行:
.agents/skills/impeccable/scripts/impeccable concept-seed --scope surface --mode <mode>脚本从你列出的结构里“发三张牌”:骰子决定哪三个到达用户面前,打破你按排名取前三的惯性,而用户保留真实选择权。呈现规则很具体:决策页上以等显著性的完整卡片呈现,被发到的头牌置于 kicker “THE ROLL” 之下,附 steer 与 re-roll;用户在 surface scope 下锁定其一。surface scope 没有 canon 卡、没有 pick 卡——世界已经定了,每张卡可视化的是构图而非身份。
卡片如何落地取决于执行路径(见 3.4 的 buildPath 段落):
- 有图像生成且 comp-led 默认时:每张卡声明
.impeccable/mocks/decision/下的一个comp,在服务决策页之后、按阅读顺序生成,遵循 visualize.md 的 comp 纪律。每张 comp 锚定在已成立的身份上:把代表性现有页面的截图作为参考图(harness 图像工具的输入图,或impeccable generate-image --ref),提示词以新表面的结构开头、点名 DESIGN.md 的调色板、字体与组件气质。文档的提醒是:对设计系统的文字转述会漂移,像素参考不会。 - 无图像生成或 code-led 默认时:每张卡携带一张
wireframe示意图(impeccable serve-question --schema给出的 payload 形状),由页面自己绘制。
锁定卡片即批准并设定构建路径:锁定的 comp 以 comp-led 方式构建,该 comp 就是已批准 comp,免除 visualize 的三选一回合且无第二次审批点;锁定的 wireframe 以 code-led 方式构建,其雄心由 direction contract 承载。局部扩展或精确指定的窄请求绝不运行此脚本——直接做。
3.3 创造或替换视觉世界
这是 new-work 中最重的一条路径,五步走:
第 1 步:命名。用一句话命名产品的独特机制,写下受众的真实场景、其文化归属、以及这个首要表面必须证明什么。同时记下“这个品类永远会发货的那个页面”和它可预测的反面——两者都是 rut(惯性坑),要排除在七候选之外。会自己画图的 brief、产品名、有标题的工件、治理性隐喻,只能占一个候选,其余必须来自受众世界的别处。
第 2 步:列七候选。从那个文化世界列出 7 个受众烂熟于心的具体视觉系统、工件、场所或仪式,每个附一行“为什么共鸣、凭什么承载该机制”,按共鸣度排序。受众世界包括其图形与屏幕传统而非只有实物:它每日阅读的记谱法、出版物、识别系统、数据图形与界面。可命名的抽象系统(一种海报学派、一套文档标准)与任何实物一样是合格候选。近重复只计一次;若 7 个中超过 3 个共享同一材料家族,说明推导停在了主题最显眼的工件上——继续挖,直到列表跨至少三个家族。
第 3 步:把材料变成完整方向。每个方向把一个可复用的视觉世界接到一个具体的首要表面体验上。
第 4 步:跑骰子,不可跳过。
.agents/skills/impeccable/scripts/impeccable concept-seed --scope direction --mode <mode>文档把跳过此步定为契约违规:在新或替换世界写任何工件代码之前,此脚本必须已运行并确认其分配。脚本把方向分配给你,并发出 catalog 挑战者(challenger)。判定流程是:
- 先融合再评判:挑战者提供形式及其系统语法,产品提供所有事实,清晰度在冲突中胜出;
- 只沿两根轴比较:受众认同、产品清晰度。输给扎实的落地材料是合法结果;
- 逐个给出裁决:wins(两根轴都赢,成为构建候选)、competitive(守住一根轴,保留为完整备选)、declined(两根轴都输)。declined 不等于作废:说出它的系统中被分配方向缺少的那一项纪律,在呈现前把分配方向抬到同等水平;
- 捐赠而非换装:raise 转移的是雄心与系统纪律(一种调色板的总承诺、一个网格的密度勇气、一种形式的结构诚实),永远不是挑战者的外衣。被提升的动机只是“戏服注记”,一次世界里只能有一个主人。每处 raise 要作为独立行写进呈现的方向里,并以捐赠者命名——读不出来的 raise 等于没发生。
第 5 步:呈现。只呈现一个方向,完全投入且已被其击败的对手抬升过:世界、首视口、访客路径、签名交互、跨表面延伸、诚实风险。挑战者按裁决分流——wins 与 competitive 是带 QUALITY BAR 卡的一行立论的完整备选;declined 的降级为紧凑静默的行,带裁决与方向从它那里保留的东西。一手最多三张完整卡:发牌超过时三张最强的上桌,其余进 re-roll 池。若你的排名第一候选不是被分配方向,补一张 kicker 为 “IMPECCABLE’S PICK” 的卡, anatomy 与其他卡一致、诚实风险行点明其熟悉度——最多一张 pick 卡,永不构成排名列表;骰子把第一名发给你时不存在 pick 卡,被分配卡上注明它曾居你列表之首。
re-roll 支持三档 register,由用户而非你预选:plain(新手,同样分布)、safer(你剩余的常规落地候选加 canon 对抗具名竞品)、bolder(仅外域形式,全承诺)。用户在方向轮打开时说 “bolder” 或 “safer”,指的就是这些 register,永远不是bolder/harden命令。register 通过时,重跑 concept-seed 并加--register <value>与下一轮--reroll。
Standing exit(常设出口):每个方向轮提供一个安静、永久存在的备选——品类标准,正着做。它是用户的门,永不是你的:永不推荐、永不与被发方向权衡、永不软化被发方向。用户接住它时(canon 动作、safer steer、或白话要求熟悉的路径),约定即承诺:问一次“应与哪两三个产品并列”,以其工艺水准为标尺,全保真执行 canon,无讽刺、无夹带的怪癖;若作为常设偏好,记入 PRODUCT.md 的品牌承诺。
双通道呈现:决策页(卡片与 board)与结构化提问工具(名称加一行论)共享同一结构、只富集度不同;结构化通道的选项列表依次为被分配方向、pick、wins 与 competitive 挑战者、standing exit 殿后;declined 挑战者折进被分配选项的描述里成为其保留行。
serve-question 的命令序列(完整协议):
# 先看 payload 形状 .agents/skills/impeccable/scripts/impeccable serve-question --schema # 启动(daemonize,打印页面 URL 与 key 后退出) .agents/skills/impeccable/scripts/impeccable serve-question --start --payload <file> # 收集选择;exit 3 表示仍在等待,重复调用 .agents/skills/impeccable/scripts/impeccable serve-question --wait --key <key> # ANSWER 以 JSON 打印re-roll 的循环必须走--update,绝不开第二个服务器、绝不退回聊天——那样会把打开的标签页晾在一个永不到达的手上:
# ANSWER 为 {"optionId":"reroll"} 时: .agents/skills/impeccable/scripts/impeccable concept-seed --scope direction --mode <mode> \ --from <seed-key> --reroll <n> # 第一次 re-roll 传 1,逐次递增 .agents/skills/impeccable/scripts/impeccable serve-question --update --key <同一key> --payload <file> # 然后回到 --wait --key <key>退出码语义:exit 4 表示页面未答即关闭——通过结构化提问工具重呈现一次,仍无答案则带着已声明的假设按被分配方向无人值守推进;exit 2(且仅在启动时出现)才是把决策路由到结构化工具的 fallback,不是要重试的错误。可能把 shell 挂在后台的 harness 可以不带--start运行,让它自动打开并阻塞。
comp 生成纪律(有图像生成时):每张卡(含 canon 卡)都声明.impeccable/mocks/decision/下的comp路径。先服务页面再产 comp——页面按槽位 shimmer-wait,用户可以在 comp 落地前回答。每张图是该方向在自身语法下全保真的北极星 comp:请求表面的首视口、结构主导的提示词、真实产品名与真实内容、不虚构商业声明、使用该卡自己的调色板/字体/材料世界。帧的纵横比就是表面自己的:原生或移动优先的表面用竖屏设备视口,桌面 web 用横屏——横屏 comp 的手机屏是坏帧,不是中性默认。按阅读顺序生成(被分配卡、pick、完整卡手、canon),每个文件完成即写 prompt sidecar;declined 挑战者没有 comp,catalog 缩略图即其面孔。有并行子代理时每卡一个(最多 4 个在飞,每个 spawn 即随行的资产生产者加单 comp 任务包),代理返回时仍空的槽位内联补生;无并行则在主线按同序生成。被选中卡的 comp 不因选择而花掉:comp-led 时它进入 comp 轮成为构图选项一;code-led 时它回到完成度审查充当批判参考。未选 comp 留在.impeccable/mocks/decision/作为该轮打过的手牌,不携带也不暗示任何批准。
执行路径(buildPath)是一次性工作流偏好,不是逐表面决策:任何回合都不询问它。默认值读自.impeccable/config.json的buildPath字段,gitignored 的.impeccable/config.local.json在单机与团队值不同时胜出;两者皆无时,只要有图像生成,comp-led 即默认。所有 payload 都写buildPath: { "value": <默认>, "toggle": true },页面渲染页脚开关,ANSWER 回传buildPath与buildPathFlipped。翻转变只绑定当次会话且永不写回——唯一例外是:当buildPathFlipped为 true 而项目从未记录过buildPath时,回合结束后问一次是否存为常设默认;两个答案都写.impeccable/config.json,答案只决定值。旧的两卡执行契约回合已退役;followup: true保留为经由--update在同一张桌上投递后续回合的通用机制。
Catalog 世界是工作系统,不是情绪参考。活下来的世界,其调色板与材料、字体与构图、拓扑、控件与状态、响应式规则都要带进产品;若来源本身是一种界面语言,就在导航、内容、控件与状态上全提交其原生语法。选择落定的那一刻就打开该世界的 QUALITY BAR board 与 hero——它们设定的是构建必须达到的工艺水平(渲染参考的完成度、承诺度、艺术指导),而非构图。
每个可能被骰子命中的方向必须预先可行:它可视化的一切关系与声明为真、真实调色板与组件家族、有一个产品专属体验的鲜明构图、在既有资产/工具/性能预算内可按整表面尺度落地。在真实性上失败的候选在骰子之前替换,永不靠骰子挽救。真理约束的是声明而非演示:greenfield 工作中,概念需要的示意材料可以全保真编写,但在访客可能误认为真的地方标注 synthetic,并把“哪些要换回真实材料”的清单交给用户。不可发明的只有商业与事实声明:价格、客户、基准、端点、产品不具备的能力。
分模式验收:Persuade 的开场必须让 offer 可理解、可欲望,暴露清晰行动,并演示只有本产品能证明的东西——一个一行落地的 hook、可见的主行动、可读的阅读顺序;Operate 中表达永不遮蔽任务、状态与熟悉控件;Read 保持理解与寻路完好;Experience 让作品本身从首视口领路。
第四步:提交视觉世界
先选颜色战略,再选颜色。四档战略:
| 战略 | 含义 | 适用 |
|---|---|---|
| Restrained | 中性色 + 一个强调色 | 访客来操作或阅读时的默认 |
| Committed | 一个饱和色承载 30–60% 的表面 | Persuade / Experience 有权限 |
| Full palette | 3–4 个命名角色 | Persuade / Experience 有权限 |
| Drenched | 表面本身就是颜色 | Persuade / Experience 有权限 |
颜色按页面尺度提交:拥有整片区域的字段,不是撒在中性底上的强调。暗或亮永不是默认值:写一句物理场景(谁在用、在哪里、什么光线下),让它逼出答案。
像从主题世界里选物件一样选字体。Operate 与 Read 表面适合系统栈与工装 UI 字体;Persuade 与 Experience 表面需要带观点的字体。文档直接列出了训练数据默认黑名单——Fraunces、Playfair Display、Cormorant、Lora、Crimson、Newsreader、Syne、Space Grotesk、Space Mono、IBM Plex、Inter 作 display、DM Sans、DM Serif、Outfit、Plus Jakarta Sans、Instrument Sans——点名其中任何一个都需要“其他任何字体都无法满足”的理由,而主题联想(书想要衬线、书店想要手写字、科技想要等宽)恰恰是这份清单要打破的联想。
校准:识别 AI 界面的聚集长相。无论主题为何,AI 生成界面总聚集在几种长相上:暖米色底 + 高对比衬线 display + 陶土/信号红强调;近黑底 + 单一霓虹强调 + 发光边缘;报纸编辑式发丝线 + 斜体衬线 display + 小字距 mono 标签。这些在 brief 要求时都合法;但当 brief 对审美保持自由时,落入其中任何一种意味着自检失败——若仅凭品类(或品类加“避雷”)就能猜出你的审美,就返工到两个答案都不显然为止。补充三条易误读:行为的否定约束(不游戏化、不炒作)排除的是那些手段而非欢腾;产品行为形容词(安静的支持、冷静的辅导)不规定表面能量;书籍/儿童向主题不软化校准——书布、线装、护封、环衬的饱和光谱里,米色纸是最小的角落。
第五步:把决策记录成契约
写代码之前,把所选方向作为仅开发用的契约记录在相应 surface brief 的## Direction contract段落下。方向契约是耐久的路由或工件策略,所以即使没有其他表面策略需要持久化,也要创建或更新 brief。六个短块、约 150 词:
| 块 | 内容 |
|---|---|
| THESIS | 这个表面独占的那一个想法,以及它拒绝的品类默认排布 |
| OWN-WORLD | 调色板与组件语言,具体到删掉全部内容仍可辨认 |
| STORY | 访客理解了什么、相信了什么、做了什么 |
| FIRST VIEWPORT | 精确构图:什么在哪里、什么尺度、主行动坐落何处 |
| FORM | 所选形式、其在排序列表中的位置、脚本打印的 seed key |
| FINISH | 逐字照抄的运行退出条件:“unreviewed and undocumented is unfinished; this build ends with the finish review, the verdict, DESIGN.md, and every shipping raster carrying its provenance” |
surface brief 是后续代理跨编辑、跨会话重新加载的提醒:一个看起来完整但 FINISH 行未清偿的页面不是完成,而是在终点线被放弃。任何一块读起来像“情绪”而不是决策,方向就还没定。
两条硬规则:永不把方向契约复制进实现源码或任何浏览器交付的工件(HTML/框架注释、隐藏 DOM、<template>、data-*属性、JSX/TSX 输出、序列化 props、RSC payload、客户端 bundle、metadata/JSON-LD、无障碍专用文本,都在列);编译器剥离开发元数据不构成安全边界。审查者与文档者从 surface brief 拿契约。
新或替换世界的 DESIGN.md在 finish 时由随行的 documenter 从建好的世界写起——构建前写的规则本会被拿去对抗现实而不是描述现实,还给设计系统检测器一个不稳定目标;新世界不带 DESIGN.md 上线仍是未完成运行。普通扩展不改写 DESIGN.md。
brief 的读写用两条命令(更新前先读):
.agents/skills/impeccable/scripts/impeccable surface-brief read <primary-target> .agents/skills/impeccable/scripts/impeccable surface-brief write <primary-target> <body-file> [related-target ...]写入后再读一次,确认六个契约块与 seed key 都在,然后才允许构建。brief 保持小:scope 与访客模式;受众、任务、行动、证据/内容、约束;所选方向与难忘时刻;未决决策。不要把全局产品事实或 DESIGN.md tokens 抄进来。
构建路径上 comp-led 且有任意图像生成可用时(harness 原生工具或impeccable context报告的 API fallback),锁定的方向在构建前先按 visualize 纪律可视化——三个构图选项摆到用户面前(被选中卡的决策 comp 加两个变体)。code-led 时 comp 轮按契约跳过而非按漂移跳过:它本该承载的雄心住在 FIRST VIEWPORT 块与命名的签名交互里,由完成度审查者在行为上审计。shape命令在此止步:把选定的方向交还 shape.md,在持久化或实现前停下。
第六步:全承诺构建
构建被分配的方向,而不是它的安全解释。形式提供结构、阅读顺序、组件约定与原生动效;产品提供所有事实。每个原子都要提交:导航、按钮、输入、链接都用形式的词汇重建,已提交形式里出现一个货架组件就是失职。
6.1 comp-led:comp 是一份可测量的契约
存在已批准 comp 时,它是空间契约而非情绪板——只有用户可以用明确措辞降级其权威。文档直言:模型系统性地会相信自己的 HTML/CSS/SVG 重绘成功,而它并没有,所以构建以磁盘上的状态机运行,闸门把屏幕对着 comp 测量,而不是靠你记住。只启动一次,让它告诉你下一步:
# 方向选择后立刻运行(这同时是选择 ping;roll 的输出会给出确切命令) .agents/skills/impeccable/scripts/impeccable build-phase start --direction <seed key> --kind <assigned|pick|challenger|canon> # 表面轮已锁定 comp 时 .agents/skills/impeccable/scripts/impeccable build-phase start --comp <approved comp>随后按顺序推进,每关由build-phase advance关闭(以下每个动词都以.agents/skills/impeccable/scripts/impeccable <verb>运行;exit 2 表示闸门失败并打印原因,修好再 advance;早期限门未关时不写后续阶段):
阶段 0 · comps:visualize.md 的 comp 轮——请求表面在其自身视口下的三个构图 comp,置于.impeccable/mocks/,各带 prompt sidecar,摆到用户面前;被选中者 sidecar 加"approved": true。闸门计数并读取批准;start --comp跳过此阶段因为它已发生。文档的诚实注脚:comp-led 是前沿级任务,要求构建者守住测量布局、把 plate 放进盒子、跨越十次尝试执行数字读数;更小更快的模型能产出可辨认的页面却在 hero 闸门下停滞——如果手里的模型属于此类,在方向轮之前就说清楚并取 code-led 路径。
阶段 1 · spec:测量 comp。
impeccable comp-spec --comp <comp> --grid # 在 comp 上写坐标网格 impeccable comp-spec --comp <comp> --regions <file> impeccable comp-spec --print # 从此起构建的参考打开网格图,用一个 regions 文件按网格跨度命名每个显著区域(文本与控件区域会吸附到跨度内最大墨块——名为 B1:E4 的标题量出来就是标题而不是旁边的列;snap: false保留跨度,显式box按画面上取)。kind 分两类:一切被画出来的——插图、照片、图形、产品物件、材料纹理——是plate/image/texture;代码画出的才是text/control/chrome。每个区域带note说明 comp 在那里画了什么。spec 携带每区域的 box、采样调色板与介质。
字体是测出来的,不是猜的:impeccable font-match --measure <text region>从像素读 cap height、宽度类与字重;impeccable font-match --rank <region> --text "..."以 Google Fonts 目录指纹索引中的最近候选(加--candidates传的名字)在该 cap height 用区域原词渲染,按指纹距离排名——USE行即 CSS,proof sheet 展示 comp 对前三名的对照。无可解析浏览器时记录目录最近字体并注明尺寸为估计值。spec 闸门在主文本区域被测量并排名前拒绝关闭;绝不手写chosen字体进 spec——闸门只认 font-match 写下的。spec 阶段还有一组防漂移拒绝:描述被画材料却挂了代码 kind 的 note 被拒(重新归类为 plate);regions 文件留下未命名的 comp 墨块被拒(永不被命名的东西永远不会被发现缺失);超过 comp 四分之一的 text/control/chrome 区域被拒(那是列不是元素);超出图标预算的内联 SVG 在 hero 被拒;comp 的裁剪图永远不是 plate(闸门拒绝 comp 区域的重采样文件——comp 的颗粒度、邻居边缘与分辨率会随图发货);plate 的 box 必须含住整件作品留边(spec 测量作品与 box 边缘的接触,bleed: true仅当页面确实在那里裁切)。spec 里没有的东西页面上不存在:comp 不显示的边框、规则线、容器、chrome 一律没有。豁免只有三项:字体(可获得的最近字体)、图标字形(足够接近;图标库由用户选择时精确——只覆盖象形图本身,不覆盖控件 chrome)、comp 的真实缺陷(如拼写错误)。
阶段 2 · plates:每个栅格区域都以 plate 形式发货——从 comp 裁剪在资产分辨率上重绘、去除 UI 文本、存到其plate路径。孤立墨块/图形/物件用原生透明 PNG 坐在页面自己的底上;照片与纹理保持不透明;纹理(纸、布、颗粒)是 comp 区域的干净补丁镜像平铺,仅当不存在干净补丁时才生成。
impeccable comp-spec --crop <id> # 写参考图 impeccable comp-spec --plate-prompt <id> --background transparent # 抠图提示词 # 或 --background opaque;提示词存为文件后: impeccable embed-prompt <plate> --prompt-file <prompt.txt> # API fallback: impeccable generate-image --ref <crop.png> --prompt-file <prompt.txt> \ --out <plate.png> --size <WxH> --quality high --background transparent优先 harness 原生图像工具(带该 crop 与提示词)。先建输出目录。在浅底深底上验证真实 alpha、白色前景、细边缘与干净孔洞;不对原生输出做色键。闸门把资产对着 comp 打分,同时肉眼检查摆放与尺度。有并行子代理时 spawn 随行的资产生产者(impeccable-asset-producer;codex 中impeccable_asset_producer;Cursor 中/impeccable-asset-producer)并给出 spec 路径,让它一次产完。plates 闸门检查每个 plate 存在、至少 1.5 倍区域尺寸、且可读作该区域——页面代码等这个闸门:plate 存在前写出的页面就是用 CSS 画材料的页面。单文件交付物不改变任何事:plate 以同法生产后内联为 data URI。--force只用于一种情形——用户以措辞降级 comp 权威,且你用--reason逐字引用该措辞;脚本拒绝一切其他理由。
阶段 3 · hero:
impeccable build-phase scaffold它把测量出的布局写成 CSS 自定义属性(.impeccable/build/scaffold/layout.css:--r-<id>-x/y/w/h,占 comp 的百分比,加 cap height、font-size、family、weight),并写出参考页hero-reference.html——每个区域在其 box、每个 plate 就位。把数字绑定到你自己的语义结构(每区域一个元素);参考页只是位置核对,绝不是页面本身,重叠的 box 就是重叠的。然后只构建首视口、在 comp 自身尺寸上、comp 的文字逐字拷贝(用户批准的就是那些字;改写是 hero 通过后的明示决定,永不是其内部的默不作声)。每个文本区域按其测量 cap height 定尺寸、排在其排名字体上。plate 先行:任何文本或控件之前,先把每个 plate 放到 spec box(object-fit: cover的<img>、背景图或以其命名的内联 data URI),截图到.impeccable/review/hero-repro.png,运行impeccable build-phase record hero一次,在文本还不存在时亲眼确认 plate 区域读作 match,再按 spec 的调色板与 box 在 plate 上铺语义层,然后 advance。
闸门先拒绝“任一 plate 未被源码引用”,然后运行impeccable comp-diff,写.impeccable/review/diff/hero/(并排、热图、每区域一对配对裁剪、report.json),72% 总得分通过且无未消硬否决(区域缺失、plate 或文本块被矛盾、SVG 插图、plate 被裁切、任意得分下的虚构墨块)。达标后数字读数降级为随 pass 打印的建议,留给响应式之前的打磨pass。闸门还逐区域读 cap height、行数、字重、墨色、位置,每条 chrome 条的高度,以及 comp 平静处的墨水(多出的 kicker、多出的导航项、分隔线),把每处失误说成数字(“构建里 cap height 78px,comp 里 103px”)——那些数字就是编辑指令。失败时按顺序打开它列出的区域裁剪再动手:missing需要材料、contradicted需要从 spec box 重新推导结构、drift是尺寸间距编辑的去处;同一区域第三次只挪数值的尝试会被闸门拒绝。文档的判断:这一关决定整个运行的雄心成败——在这里重试花分钟,在终点以重建裁决花掉整个运行。
阶段 4 · sections:在 spec 的系统内构建剩余表面——同样的圆角语言、线宽、调色板,comp 从未显示的东西一概没有。comp 未覆盖的区域继承已记录的系统。
阶段 5 · motion:签名交互、reveal 与动效,编排一次,而非散落。
阶段 6 · responsive:其余视口,以及常见桌面宽度(1280–1600)下的首视口,不只是 comp 的精确尺寸:流式列,不出现窄一百像素就换行的固定像素网格。截图desktop.png(1440 宽,整页)与mobile.png(390 宽)到.impeccable/review/;闸门把桌面截图对着 comp 做 diff,拒绝只在 comp 宽度下成立的首视口。移动优先的 comp’d 表面就是竖屏 comp 的;plate 就是为该帧生产的。
6.2 code-led
没有 comp,也不为它道歉:雄心住在方向契约的 FIRST VIEWPORT 块与命名的签名交互里,完成度审查者在行为上审计那些承诺。选中的决策 comp 随行到完成度审查,充当批判参考。
6.3 两条路径共享的原则
- 首视口是论点,不是页头。立即、按形式在现实中的尺度演示机制;不要把概念关进标准 hero 或卡片壳。记忆测试:若有人只看了一个视口就离开,一小时后他会描述什么?诚实答案是“一种情绪”时,概念还没有提交。
- 证明,别宣称。展示主体在做其工作:界面运转中、机制被戏剧化、竞品无法复制粘贴的细节。演示数据是设计材料:全保真编写并标注 synthetic;声明保持不可发明。
- 编写资产,永不以 chrome 替代。伟大的表面活在精心制作的内容上:名字、条目、文案、封面、缩略图、纹理。greenfield 中每个 ask 轮留下的空白都由你在生产保真度上编写;内容可编写、声明可标注、无章节可省略。渐变、玻璃、通用图标瓷砖、以及该有编写资产处的大量顶点
clip-path多边形,是缺口穿着 chrome 的衣服;检测器标记后两者。 - 构建形式的 web 杠杆。所选世界点名某技术(canvas、WebGL、view transitions、生成式动效)时,构建该技术本身,不是它的静态模仿。
- 像工作室一样控制滚动节奏。单一语法内变换密度、尺度、图像、动效与安静;密段挣来静段,页面以真实收尾锚定结束。全程一种间距节奏,标题上方比下方更空。
- brief 暗示时用真实、可验证的图像。搜主题的实物而非品类;一张决定性照片胜过五张平庸照片。验证 stock URL 可解析。
- 把动效当材料编写。页面获得形式的原生动效一次、有编排地,而非散落的 hover 效果。给昂贵效果设边界,内容默认可见。
同时保持语义、可访问性、性能、响应式、项目约定与既有行为。
第七步:检验并完成
批量截图一轮完成检验:web 上桌面与移动;原生平台(ios/android/adaptive)按 ios.md / android.md 的 “Verifying the build” 一节,从模拟器采集各 OS 已发货设备类。harness 报告了用户真实视口(in-app 浏览器尺寸、命名分辨率)时,把那个宽度加入集合——会断的宽度正是用户第一眼看到的。对照用户请求与方向契约批判渲染,修复实质缺口,两轮封顶,修复在轮间批量执行,不为单点微调挣截图。comp-led 构建运行:
.agents/skills/impeccable/scripts/impeccable comp-diff --comp <approved comp> \ --build .impeccable/review/desktop.png \ --spec .impeccable/build/spec.json \ --out-dir .impeccable/review/diff/final把其区域行与配对裁剪当批判来读——并排视图是构建线程自己永远没有的视角;它评 missing 或 contradicted 的区域,无论页面凭记忆看起来如何,都是修复项。永不凭一张整页缩略图判断保真度:它恰好藏住要紧的失败。Persuade 表面还要验证模式做到了工作:首次访客数秒内以形式自己的词汇弄清这是什么、为何重要、该做什么。
截图先验证再发送。先安定或禁用入场动效(被动画时序藏住的元素读作缺失元素,会被修成回归);从文档顶部拍整页;comp 对比在 comp 自身像素尺寸上拍。然后每个文件打开一次,确认它显示其名字所声称的内容:无黑屏/空白区、无正确文件名后面的错误章节、无半加载状态。一份畸形截图送出去花掉整轮——审查者以disposition: recapture作答,它所审的一切不具约束力。
第二轮检验后,构建线程的打磨结束:不再有缺陷狩猎、微编辑脚本或重建;剩下的交给交接,新上下文发现得更好也更便宜。web 上(本 harness 不跑设计钩子时对改动目标运行一次):
.agents/skills/impeccable/scripts/impeccable detect --json修复机械项,其余发现连同截图交给审查者;无钩子的 web 构建跳过这一步,就把钩子存在要抓的所有 tell 都发出去。原生平台完全跳过检测器——它读 HTML 和 CSS,对原生代码没有裁决权,审查者的 floor 检查是唯一门槛。截图存.impeccable/review/,每视口一文件(web:desktop.png、mobile.png,用户视口加入集合时加user-<width>.png;原生:每设备类一个,如phone.png、tablet.png,adaptive 按 OS 加后缀),目录不存在就创建。传给审查者的路径即其规格,你检验过的每个视口都在任务包里列为 required。
spawn 随行的完成度审查者(impeccable-finish-reviewer;codex 中impeccable_finish_reviewer;Cursor 中/impeccable-finish-reviewer),输入包包含:原始请求、已确认答案、工件路径、截图路径、方向契约、既有钩子发现、QUALITY BAR 卡与已批准 comp 路径(code-led 构建没有已批准 comp——选中的决策 comp 以“批判参考”名义占该槽)、comp-led 时的构建状态(.impeccable/build/state.json)、spec、diff 目录(.impeccable/review/diff/hero/与.impeccable/review/diff/final/的并排/热图/区域对/report.json即保真度证据)、craft-floor 参考路径,以及原生平台的平台参考路径。审查者没有浏览器——你没传过去的截图就是它跑不了的检查。spawn 前不读随行代理的定义文件(harness 在 spawn 时加载,你只欠输入包);对代理等待用一次长超时而非短轮询循环。核验返回携带五个契约段(recapture 返回只携带其 recapture 列表);空或绞杀的返回用相同输入重 spawn 一次。审查永不在构建线程内运行、永不继承它——codex 中fork_turns: 0新 spawn:继承你转录的审查者会继承你的框架、乐观与抽象。完全没有子代理能力的 harness 用 degraded/finish-reviewer.md 走一次完全退出构建上下文后的新线程 pass,且替换或失败重替的审查在 finish 时一行披露。
处置词只有四个:
- recapture:证据失败了,不是构建。按返回点名的项目、按截图有效性规则重拍,然后对新证据做完整审查——建立在无效证据上的审查不具约束力,其后不得出现 pass 裁决。
- rebuild:保真度整体失败,不是打补丁。跳过修复批次,立即执行重建:重新推导被点名区域、产出被点名资产、把结果送回全新完整审查(重建整体替换区域,所以整个矩阵在重拍上再跑一遍)。告知用户在发生什么,而不是征求修复失败的许可;仅在第二次 rebuild 指令、两裁决并排、或重建会丢弃用户已批准内容时咨询用户。
- ship:无可欠;按其范围报告裁决,继续到 documenter。
- fix:一个批次应用实质修复,重建一次,对相同视口、相同文件重拍。重拍测的是位置、加载与溢出,测不出修复是否达到了发现所指的质量,所以把重拍截图送回同一审查者做裁决,给每条实质修复打 resolved / partial / unresolved 分(无代理续接时按 degraded/finish-reviewer.md 的 Verdict Pass 新跑)。partial 或 unresolved 再进一批修复、重拍、裁决。无人值守运行的预算是两轮即止;有attended会话的上限属于用户——第二轮裁决仍列开项时,把表格摆到用户面前,让其选择按现状发货还是再投一轮。无论谁决定,某轮什么都没解决时即停;审查者的发现是你唯一的工作清单,永不重开你自己的狩猎。不运行第二个检测器。
rebuild 与 fix 轮共享一条资产规则:任一栅格资产仍按 visualize.md 的 Produce 一节是资产工作,保留provenance;该轮放弃的栅格在同批删除。任一轮回评审或裁决之前,对工件栅格发货目录运行:
.agents/skills/impeccable/scripts/impeccable embed-prompt --scan <asset-dir...>把它报告的每个文件清掉:生产栅格嵌精确生成提示词,来源/stock/既有栅格嵌出处。scan 只读;删除只保留给该轮放弃的栅格,绝不用于被 scan 标记的文件。
最终裁决以审查者自己的处置词、在其真实范围内报告。pass 裁决只计所列修复:“the reviewer scored all three fixes resolved” 是其能支撑的声明,“no material issues remain” 不是。带开项实质发现的表格永不宣布为 pass、永不软化、永不把只评分了修复列表包装成整表面批准。用户以证据反驳 ship 时(其自己的截图、与 comp 的具名不一致),那份证据高于你拍的所有截图:把它放进任务包,spawn 新审查者做全新完整审查。内联打补丁加自我认证,正是被拒页面第二次发货的方式。
最后一轮修正后,spawn 随行 documenter(impeccable-documenter;codex 中impeccable_documenter),带项目根、工件路径、方向契约、PRODUCT.md、document.md 与写入边界;无子代理时先加载 degraded/documenter.md 与 document.md。核验结果:新世界与已批准系统变更要求带 tokens 的 DESIGN.md 且.impeccable/design.json,纯散文不行。普通扩展对照完成构建与既有系统,保留其文件并报告核对过的证据;既有漂移只报告、不擅自修。后续编辑后复查。只有审查与文档都完成,运行才算完成。
附录:命令在引擎中的真实落点
new-work 文档里的每条命令都不是脚本层的空壳,而是 Rust 引擎中的一等公民。从源码结构看,CLI 入口 把动词直接路由到各 crate:surface-brief、embed-prompt、concept-seed、serve-question落在impeccable_context,comp-spec、comp-diff、font-match、build-phase落在impeccable_comp_verbs。
- concept-seed的核心是 concept_seed.rs:
fetch_roll(concept_seed.rs#L66-L94)把scope、key、reroll、mode、grain、platform组装成表单参数请求 roll 端点,返回含非空challengers数组的 roll 数据;ping_chosen则校验kind必须属于assigned|pick|challenger|canon、register只能是safer|bolder——这正是文档中裁决词与 register 三档在代码侧的取值约束。离线或 API 不可达时脚本退化为本地分配,这也是“永远不要预测 fallback:跑脚本,只有 exit 2 才路由到结构化工具”的原因。 - serve-question的状态机在 serve_question.rs:每个 key 在问题目录下持有
<key>.state.json、<key>.answer.json、<key>.flip.json、<key>.next.json四个状态文件(serve_question.rs#L41-L52),存活判定用心跳(12 秒窗口)加进程探测。--wait拿到答案后打印ANSWER: <json>,并按字段追加指令行——选中的 world 打印 “CHOSEN CARD”(要求立即打开 board 与 hero 图)、canon打印 “CANON CHOSEN”、带 register 的 reroll 打印 “REGISTER” 并给出确切的重跑参数、buildPath翻转打印会话绑定语义与唯一写回例外。页面本体由 question_page.rs 内嵌,决策页从 payload 字段渲染身份卡、自动降级 declined 挑战者。 - build-phase的状态机在 build_phase.rs,
start/advance/record的退出码 2 语义(闸门失败并打印原因)即文档反复引用的闸门协议。字体测量侧,font-match --rank的指纹索引来自 Google Fonts 目录,对应实现见 font_fingerprint.rs 与索引数据 font-index.json。 - 图像与 provenance:
generate-image的 API fallback 实现见 generate_image.rs,embed-prompt(含--scan)见 embed_prompt.rs,前者是 plates 阶段 API 路径的底层,后者是“每个出货栅格携带 provenance”规则的机械执行者。 - 可执行入口:文档中的
.agents/skills/impeccable/scripts/impeccable是 launcher 脚本。它的解析顺序为$IMPECCABLE_BIN→ 脚本同级bin/<os>-<arch>/impeccable→~/.impeccable/bin/impeccable→ 版本钉住的缓存 → PATH 上的impeccable,不信任的候选先过engine-probe握手(打印impeccable-engine <version>),以避开同名退役 npm CLI;最终 fallback 从发布通道按VERSION文件下载平台二进制,且先校验.sha256sidecar 再执行——无 sidecar 或哈希工具时拒绝运行未验证下载。这也解释了文档中“sandbox 里走沙箱最少的命令路径开页面端口”的操作要求:下载与端口绑定都不受沙箱影响时才可能成功。
适用前提与限制
- 流程面向“新表面或替换视觉身份”;已有表面的局部细化不走 concept-seed,直接按既有世界扩展。
- comp-led 路径要求图像生成能力(harness 原生工具或 API fallback)与前沿级模型能力;无图像生成时 code-led 是唯一路径,文档要求在 payload 中一行说明而非询问。
- 依赖文件约定:
PRODUCT.md、DESIGN.md、.impeccable/config.json(与 gitignored 的config.local.json)、.impeccable/mocks/decision/、.impeccable/build/、.impeccable/review/;Windows 无sh时改用.agents/skills/impeccable/scripts/impeccable.cmd。 - 骰子 roll 依赖引擎的 roll 端点,
IMPECCABLE_API_TIMEOUT默认 4000ms;超时或不可达时脚本本地分配,流程本身不中断。
【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccable
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考