一、④段整套同步(用户选候选 A)
- 新增 `references/stage-proto-doc/assets/产品文档模板.html`(16 KB/247 行,从备份拷、转 LF)。
- ④段 SKILL.md 换成备份 15:28 那版,并按模板口径改齐:
· 「产品文档框架」从「四块+一附录」改成**六节** —— 页面结构/功能清单/使用场景/操作流程/
跨页与界面状态/待确认与偏离;与模板同构,⛔ 不从空白页重写结构。
· 编号从 R/S/F 改成 **P 页面/S 场景/F 功能/J 二级功能**,各自唯一、按展示顺序通排。
· 保留旧版有价值的要求:每项功能补齐 做什么/入口在哪/输入边界/异常与恢复;重点功能三处标红;
横向流程图每步写清页面/功能/操作/完成判据。
· 完成标准「七节」→「六节」,自查清单同步换掉「需求」那批条目,补模板与配图两条。
· 路径 `designs/<项目>/` → `docs/pm/<项目>/ui/`(2 处)。
· 补回本机那条「每份产出文档开头都要有一张图」的引用(指向主 skill,段内不复述)。
- 主 skill 同步:四段结构表④行、④段沿革、画图小节(④段画页面结构图 + 用户路径)。
二、open-design 移到技能根(用户选候选 A)
- `git mv product-planning/references/stage-delivery/assets/open-design → open-design/`(4178 文件)。
- `.gitignore` 白名单加 `!/open-design/` —— 否则移出去就不再纳入版本控制。
- 引用改 11 处:路径形态 `assets/open-design/...` → `<技能根>/open-design/...`;
「随段携带的自带件」改称「同根技能」;「路径怎么找」那条改成自带件(段内相对路径)与
同根技能(`<技能根>/<技能名>/`)两类分开写。
- open-design 自己的 ATTRIBUTION.md 两处同步(它现在与 oil-ui-pro 同层)。
- 副作用(有益):命名闸门读数由 2063 降到 225 —— 此前它把 open-design 里 919 个第三方 md
当成规则一起扫了;现在只扫本包 23 个 md。已确认④段的 H1 与 4a/4b/4c 子步仍在检查范围内。
三、验收
- check_naming.py --ws E:/ProgramData/AIProject/contentm_agent = 通过 225 / 失败 0 / 提示 27。
- 活文件里 `assets/open-design` 残留 0;工作区 CRLF 文件 0。
85 lines
3.8 KiB
Markdown
85 lines
3.8 KiB
Markdown
# Anti-AI-slop rules
|
||
|
||
Concrete, checkable rules that distinguish "designed by a human who has
|
||
shipped product" from "default LLM output." Several rules below are
|
||
auto-enforced by the daemon's `lint-artifact` linter — failing an
|
||
enforced rule is not a style preference, it is a regression. The
|
||
rest are guidance for agents and reviewers and are flagged inline as
|
||
"(guidance, not auto-checked)" so the contract with the linter stays
|
||
honest.
|
||
|
||
> Adapted from [refero_skill](https://github.com/referodesign/refero_skill)
|
||
> (MIT), tightened to match OpenDesign's lint surface.
|
||
|
||
## The seven cardinal sins
|
||
|
||
These are the patterns the linter blocks at P0 (must-fix):
|
||
|
||
1. **Default Tailwind indigo as accent** — exactly `#6366f1`, `#4f46e5`,
|
||
`#4338ca`, `#3730a3`, `#8b5cf6`, `#7c3aed`, `#a855f7`. The active
|
||
`DESIGN.md` provides `--accent`; use it. Indigo is the textbook AI
|
||
tell. (The daemon's `lint-artifact` flags any of these as a solid
|
||
accent; keep this list in sync with `AI_DEFAULT_INDIGO` in
|
||
`apps/daemon/src/lint-artifact.ts`.)
|
||
2. **Two-stop "trust" gradient on the hero** — purple→blue, blue→cyan,
|
||
indigo→pink. A flat surface + intentional type beats this every
|
||
time.
|
||
3. **Emoji as feature icons** — `✨`, `🚀`, `🎯`, `⚡`, `🔥`, `💡`
|
||
inside `<h*>`, `<button>`, `<li>`, or `class*="icon"`. Use
|
||
1.6–1.8px-stroke monoline SVG with `currentColor`.
|
||
4. **Sans-serif on display text when the seed binds a serif** — h1/h2
|
||
must use `var(--font-display)`, not a hardcoded Inter / Roboto /
|
||
`system-ui`.
|
||
5. **Rounded card with a colored left-border accent** — the canonical
|
||
"AI dashboard tile" shape. Drop either the radius or the left
|
||
border.
|
||
6. **Invented metrics** — "10× faster", "99.9% uptime", "3× more
|
||
productive". Either pull from a real source or use a labelled
|
||
placeholder.
|
||
7. **Filler copy** — `lorem ipsum`, `feature one / two / three`,
|
||
`placeholder text`, `sample content`. An empty section is a design
|
||
problem to solve with composition, not by inventing words.
|
||
|
||
## Soft tells (P1 — should fix)
|
||
|
||
- **Standard "Hero → Features → Pricing → FAQ → CTA" sequence with no
|
||
variation** *(guidance, not auto-checked)*. This is the AI-template
|
||
skeleton; introduce at least one unconventional section (testimonial
|
||
wall as full-bleed quote, pricing as comparison-against-status-quo,
|
||
an inline mini-product-demo).
|
||
- **External placeholder image CDNs** (`unsplash.com`, `placehold.co`,
|
||
`placekitten.com`, `picsum.photos`). Fragile and obvious. Use the
|
||
shipped `.ph-img` placeholder class.
|
||
- **More than ~12 raw hex values outside `:root`.** Tokens were not
|
||
honoured.
|
||
- **`var(--accent)` used 6+ times in the rendered body.** Cap at 2
|
||
visible uses per screen.
|
||
|
||
## Polish tells (P2 — nice to fix)
|
||
|
||
- **Sections without `data-od-id`** — comment mode can't target them.
|
||
- **Decorative blob / wave SVG backgrounds** *(guidance, not
|
||
auto-checked)* — meaningless geometry.
|
||
- **Perfect symmetric layout with no visual tension** *(guidance, not
|
||
auto-checked)* — alternating density (one tight section, one
|
||
breathing section) reads as intentional.
|
||
|
||
## How to add soul without breaking the rules
|
||
|
||
Aim for **~80% proven patterns + ~20% distinctive choice**. The 20%
|
||
should live in:
|
||
|
||
- One bold visual move — a typography choice, a single color decision,
|
||
an unexpected proportion.
|
||
- Voice and microcopy — a button that says "Start tracking" beats one
|
||
that says "Get started".
|
||
- One micro-interaction the user will remember — a button press that
|
||
moves 2px, a number that counts up.
|
||
- One detail that could only have been put there by someone who used
|
||
the product (a subtle kbd shortcut hint, a status badge with
|
||
product-specific phrasing).
|
||
|
||
If a reviewer screenshots the artifact and someone outside the project
|
||
can identify which product it's from — you have soul. If not, you
|
||
shipped a template.
|