baodan/.agents/skills/impeccable/reference/operate.md
wsb1224 e3479f0546 上线阻断问题全部修复
#	问题	修复	文件
1	前端构建失败(引号错误)	size="small type=" → size="small" type="	PosterHistoryPage.vue
2	migrate_014 ORM vs 缺失列	全部改为原始 SQL,不再引用 ORM 模型	migrate_014.py
3	cleanup 字段名错误	output_path → ppt_path	cleanup.py
4	文案生成 case 越权	添加 case.user_id != user_id 校验	poster/service.py
5	存储路径未接通持久化卷	全部改用 get_storage_root()(默认 /app/api/storage/insurance)	config.py, ppt/routes.py, poster/service.py, poster/tasks.py
高风险问题修复
#	问题	修复	文件
6	migrate_019 rollback 撤销成功字段	每个 ALTER 后立即 commit,失败只回滚当前语句	migrate_019.py
7	迁移锁 Windows 不兼容 + 句柄未持久化	全局变量保存锁句柄,支持 Windows msvcrt	api/insurance/db/__init__.py
8	PDF 校验异常时放行	异常返回 False(文件损坏)	security.py
9	健康检查始终返回成功	缺少关键资源时返回 503 + missing 列表	poster/routes.py
10	短密钥掩码泄露原值	≤4 字符返回 ****	ppt_admin_service.py
11	设置无键名白名单	添加 _ALLOWED_SETTING_KEYS 白名单	ppt_admin_service.py
12	容器重启任务永久 stuck	添加 recover_stale_tasks() 启动恢复函数	poster/tasks.py, ppt/parse_worker.py
2026-07-27 13:52:09 +08:00

4.0 KiB
Raw Permalink Blame History

Operate mode depth (and Read notes)

When design SERVES the product: app UIs, admin dashboards, settings panels, data tables, tools, authenticated surfaces, anything where the user is in a task. The essentials live in SKILL.md's modes and craft-floor.md; this file is extended depth, written for Operate surfaces. Read surfaces (docs, guides, long-form) take SKILL.md's Read mode plus this file's typography and consistency rules; their prose measure and navigation matter more than component density.

The product slop test

Familiarity is often a feature here. The test is whether a category-fluent user can trust the interface immediately or must pause at every subtly-off component.

Product UI's failure mode isn't flatness, it's strangeness without purpose: over-decorated buttons, mismatched form controls, gratuitous motion, display fonts where labels should be, invented affordances for standard tasks. The bar is earned familiarity. The tool should disappear into the task.

Typography

  • One family is often right. Product UIs don't need display/body pairing. A well-tuned sans carries headings, buttons, labels, body, data.
  • Fixed rem scale, not fluid. Clamp-sized headings don't serve product UI. Users view at consistent DPI, and a fluid h1 that shrinks in a sidebar looks worse, not better.
  • Tighter scale ratio. 1.1251.2 between steps is typical. More type elements here than on brand surfaces; exaggerated contrast creates noise.
  • Line length still applies for prose (6575ch). Data and compact UI can run denser; tables at 120ch+ are fine.

Color

Product defaults to Restrained. A single surface can earn Committed (a dashboard where one category color carries a report, an onboarding flow with a drenched welcome screen), but Restrained is the floor.

  • State-rich semantic vocabulary: hover, focus, active, disabled, selected, loading, error, warning, success, info. Standardize these.
  • Accent color used for primary actions, current selection, and state indicators only, not decoration.
  • A second neutral layer for sidebars, toolbars, and panels (slightly cooler or warmer than the content surface).

Layout

  • Responsive behavior is structural (collapse sidebar, responsive table, breakpoint-driven columns), not fluid typography.

Components

Every interactive component has: default, hover, focus, active, disabled, loading, error. Don't ship with half of these.

  • Skeleton states for loading, not spinners in the middle of content.
  • Empty states that teach the interface, not "nothing here."
  • Consistent affordances across the surface. Same button shape. Same form-control vocabulary. Same icon style.
  • Overlays escape their container. An absolutely positioned dropdown inside an overflow: hidden or overflow: auto ancestor gets clipped; reach for <dialog>, the popover API, position: fixed, or a portal.

Motion

  • 150250 ms on most transitions. Users are in flow; don't make them wait for choreography.
  • Motion conveys state, not decoration. State change, feedback, loading, reveal: nothing else.
  • No orchestrated page-load sequences. Product loads into a task; users don't want to watch it load.

Product constraints

  • Decorative motion that doesn't convey state.
  • Inconsistent component vocabulary across screens. If the "save" button looks different in two places, one is wrong.
  • Display fonts in UI labels, buttons, data.
  • Reinventing standard affordances for flavor (custom scrollbars, weird form controls, non-standard modals).
  • Heavy color or full-saturation accents on inactive states.
  • Modal as first thought. Modals are usually laziness. Exhaust inline / progressive alternatives first.

Product permissions

Product can afford things brand surfaces can't.

  • System fonts and familiar sans defaults.
  • Standard navigation patterns: top bar + side nav, breadcrumbs, tabs, command palettes.
  • Density. Tables with many rows, panels with many labels, dense information when users need it.
  • Consistency over surprise. The same visual vocabulary screen to screen is a virtue; delight is saved for moments, not pages.