# AI Editor RSP — Product State Contract

日期：2026-06-10
站点：https://aieditorrsp.net
适用 PRD：AIE 中文 PRD v4
状态：可直接作为产品 / 设计 / 前端 / QA 主合同引用

## 1. 合同结论

AI Editor RSP 的产品状态必须由同一份状态合同驱动，不允许设计、前端、后端分别解释登录、额度、provider、付费和 checkout。

首版产品价值优先级固定为：

1. Copy Prompt：基础价值，永远可用，不登录，不消耗额度，不受 provider / paid / checkout 影响。
2. Open / Try in Editor：增强入口，允许匿名使用到 upload preview / prompt preload，但 live generation 受 provider 与 quota 控制。
3. Generate：有条件能力，只在 provider-live 且额度 / 权限满足时可用。
4. Pricing / Checkout：商业化入口，不能覆盖首次价值；只有 paid-enabled + checkout-enabled + provider-live 时才可真实购买生成能力。

## 2. 状态维度定义

### 2.1 Auth State

| 状态 | 定义 | 产品含义 |
|---|---|---|
| `anonymous` | 未登录用户 | 可浏览、搜索、筛选、复制 prompt、打开 editor、上传预览；生成能力按 provider 与策略决定，默认引导登录后生成 |
| `signed-in` | 已登录但未判定套餐 | 过渡状态；UI 不应卡死，按 signed-in-free 保守展示，后台权限返回后刷新 |
| `signed-in-free` | 免费登录用户 | 可复制 prompt；provider-live 时有免费生成额度；额度耗尽进入 quota-exhausted |
| `signed-in-pro` | Pro 用户 | 可使用 Pro 月度生成额度、HD/no-watermark/saved prompt 等已实现能力；仍受 provider 与额度限制 |

### 2.2 Quota State

| 状态 | 定义 | 产品含义 |
|---|---|---|
| `quota-available` | 当前用户还有生成额度 | Generate 可进入下一步，但仍需 provider-live |
| `quota-exhausted` | 免费 / Pro / credit 额度已用完 | Copy Prompt 继续可用；Generate 不可用；展示 Upgrade / Buy Credits / Wait Reset / Copy Prompt instead |
| `quota-unknown` | 额度尚未加载 | 不允许先扣费或直接生成；显示 loading / checking quota；Copy Prompt 不受影响 |

### 2.3 Provider State

| 状态 | 定义 | 产品含义 |
|---|---|---|
| `provider-disabled` | 没有可调用生成 provider，或站点关闭生成 | 不展示真实 Generate；可展示 upload preview、copy prompt、external-use guidance、waitlist |
| `provider-preview` | 可演示上传 / 选择效果 / 预览流程，但不保证真实生成 | Generate 标签必须是 preview / waitlist / use externally；不扣 credits |
| `provider-live` | 生成 provider 真实可用 | 可展示 Generate；必须有 loading / success / error / quota / retry / no-credit-on-provider-fail 状态 |

### 2.4 Payment State

| 状态 | 定义 | 产品含义 |
|---|---|---|
| `paid-disabled` | 付费能力未启用或不应售卖 | Pricing 只能解释未来能力 / waitlist；不能展示可购买生成套餐 |
| `checkout-disabled` | 定价可展示，但 checkout 未启用 | CTA 使用 Join waitlist / Notify me / Contact；不得跳转虚假 checkout |
| `checkout-enabled` | Stripe / 支付链路启用且合规 | 可展示 Upgrade / Buy Credits；必须满足 Stripe Tax / billing address / tax id / webhook 验收 |

## 3. Runtime State Object

前端、后端、QA 使用同一份 runtime state。字段名可按实现调整，但语义不得变。

```json
{
  "auth_state": "anonymous|signed-in|signed-in-free|signed-in-pro",
  "quota_state": "quota-unknown|quota-available|quota-exhausted",
  "provider_state": "provider-disabled|provider-preview|provider-live",
  "paid_state": "paid-disabled|checkout-disabled|checkout-enabled",
  "copy_prompt_enabled": true,
  "upload_enabled": true,
  "upload_mode": "preview|live",
  "generate_enabled": false,
  "generation_mode": "disabled|preview|live",
  "free_generation_available": false,
  "credits_balance": null,
  "monthly_quota_remaining": null,
  "provider_name": null,
  "provider_message": "Copy prompts are available. Upload-to-edit generation is currently in preview mode.",
  "pricing_message": "Prompt copying is free. Generation plans are available only when live generation is enabled.",
  "last_verified_at": "2026-06-10T00:00:00Z"
}
```

硬约束：

- `copy_prompt_enabled` 必须恒为 `true`，除非该 prompt 因安全 / 版权 / abuse 被下架。
- `generate_enabled=true` 只能在 `provider_state=provider-live` 且 quota 可用或 checkout 可解锁时出现。
- `paid_state=checkout-enabled` 不等于一定可买生成；如果 `provider_state!=provider-live`，生成套餐 checkout 仍必须禁用或转 waitlist。
- provider error / network error / safety rejection 不得扣 credits。

## 4. 全局组件行为矩阵

| Product State | Header | Editor | Prompt card | Pricing CTA | Checkout | Copy Prompt | Upload | Generate |
|---|---|---|---|---|---|---|---|---|
| `anonymous + provider-disabled + paid-disabled` | 显示 Browse prompts / Pricing；Sign in 可弱化 | Prompt preload + upload preview；显示 generation not live | Copy 为主；Open in Editor 可用 | Join waitlist / Get notified | 不可用 | 可用，无登录 | 可用，仅 preview | 不可用；按钮文案不得写 Generate now |
| `anonymous + provider-preview + checkout-disabled` | Browse / Prompt Library / Sign in | 可上传、选择 effect、预览流程；显示 preview-only | Copy + Try in Editor；说明 provider preview | Join waitlist / Sign in for updates | 不可用 | 可用 | 可用，preview | Preview only / Use externally；不扣费 |
| `anonymous + provider-live + checkout-disabled` | Sign in 可见，但不遮挡 prompt | 可上传；生成前要求 sign in 或显示匿名免费限制 | Copy + Try in Editor | Sign in to generate / Join Pro waitlist | 不可用 | 可用 | 可用 | 有条件：若允许匿名免费则可用；否则要求登录 |
| `anonymous + provider-live + checkout-enabled` | Sign in / Pricing 可见，但不抢首屏 | 可上传；生成前说明需登录或免费匿名额度 | Copy + Try in Editor | Sign in / Upgrade after value | 仅登录后进入 checkout；匿名先登录 | 可用 | 可用 | 有条件：登录或匿名额度满足才可用 |
| `signed-in + provider-live + quota-unknown` | 显示账户入口；不展示错误额度 | Checking quota；不能直接 generate | Copy 可用 | Manage / Upgrade 暂不高亮 | 暂不触发 | 可用 | 可用 | 暂不可用；显示 Checking quota |
| `signed-in-free + provider-disabled + checkout-disabled` | Account + Prompt Library | Preview / external-use guidance | Copy 为主；Try in Editor 可用 | Join Pro waitlist | 不可用 | 可用 | 可用，preview | 不可用 |
| `signed-in-free + provider-preview + checkout-disabled` | Account + Prompt Library | Upload preview + waitlist | Copy + Try in Editor | Join waitlist | 不可用 | 可用 | 可用，preview | Preview only，不扣费 |
| `signed-in-free + provider-live + quota-available + checkout-disabled` | Account + Usage | Live editor；生成前显示剩余额度 | Copy + Try in Editor | Join Pro waitlist / More generations soon | 不可用 | 可用 | 可用 | 可用；失败不扣额度 |
| `signed-in-free + provider-live + quota-available + checkout-enabled` | Account + Usage + Upgrade | Live editor；显示剩余免费额度 | Copy + Try in Editor | Upgrade to Pro | 可用 | 可用 | 可用 | 可用；成功扣免费额度 |
| `signed-in-free + quota-exhausted + provider-live + checkout-enabled` | Account + Usage exhausted | 禁止继续免费生成；展示升级、买 credits、copy prompt instead | Copy 仍为主；Try in Editor 可用但提示额度 | Upgrade / Buy credits | 可用 | 可用 | 可用 | 不可用，除非升级 / 买 credits 后刷新 quota |
| `signed-in-free + quota-exhausted + provider-live + checkout-disabled` | Account + Usage exhausted | 展示 reset time / waitlist / copy prompt instead | Copy 仍为主 | Join waitlist / Wait reset | 不可用 | 可用 | 可用 | 不可用 |
| `signed-in-pro + provider-disabled` | Account + Manage plan；显示 provider outage | Preview / outage notice；不扣额度 | Copy + Try in Editor | Manage plan；不推新购买 | 不应作为主 CTA | 可用 | 可用，preview | 不可用；显示 provider unavailable |
| `signed-in-pro + provider-preview` | Account + Manage plan | Preview / limited mode | Copy + Try in Editor | Manage plan | 不抢主 CTA | 可用 | 可用，preview | Preview only；不扣额度 |
| `signed-in-pro + provider-live + quota-available` | Account + Usage + Manage plan | Live editor；显示 Pro quota / quality mode | Copy + Try in Editor | Manage plan / Buy credits | 可用 | 可用 | 可用 | 可用；成功扣 Pro quota 或 credits |
| `signed-in-pro + provider-live + quota-exhausted + checkout-enabled` | Account + Usage exhausted | 阻止生成；展示 Buy credits / Wait reset | Copy 仍可用 | Buy credits / Manage plan | 可用 | 可用 | 可用 | 不可用，直到 credit / quota 恢复 |
| `checkout-enabled + provider-disabled` | Pricing 可访问但需警示 | Editor 不生成 | Prompt card 不变 | Join waitlist / Contact；不得 Upgrade to Generate | 生成套餐不可 checkout | 可用 | 可用，preview | 不可用 |
| `paid-disabled` | 不强调 Pricing | 不显示付费解锁生成 | Prompt card 不变 | Waitlist / Contact only | 不可用 | 可用 | 按 provider state | 按 provider+quota state；不能因付费禁用而影响 copy |

## 5. 组件级不可变规则

### 5.1 Header

Header 必须服务 prompt discovery，不服务 SaaS 销售。

必需项：

- Prompt Library
- RSP Prompts
- Editor
- Pricing（不进首屏主转化）
- Sign in / Account

Header 禁止：

- 在 provider-disabled / paid-disabled 状态下显示 “Upgrade to Generate” 这类误导 CTA。
- 把登录作为 Copy Prompt 前置条件。
- 用 “official integration” 暗示 provider / RSP 官方合作。

### 5.2 Editor

Editor 是 apply/copy workflow，不是所有状态都真实生成。

必须支持：

- 从 card / detail 带入 `effect_slug` 和 `copy_prompt`。
- 上传照片后保留 selected prompt。
- 在任何生成按钮之前显示 provider state。
- provider-disabled / provider-preview 时仍保留 Copy Prompt 和 external-use guidance。
- provider-live 时展示 loading、success、error、quota-exhausted、auth-required、provider-unavailable。

按钮文案规则：

| 条件 | 主按钮文案 |
|---|---|
| provider-disabled | `Copy Prompt` / `Preview upload flow` / `Join waitlist` |
| provider-preview | `Preview edit flow` / `Use prompt externally` |
| provider-live + anonymous | `Sign in to generate` 或 `Generate free preview`（仅真实支持匿名额度时） |
| provider-live + signed-in-free + quota available | `Generate with free credit` |
| provider-live + signed-in-free + quota exhausted | `Upgrade to generate more` / `Buy credits` / `Copy Prompt instead` |
| provider-live + signed-in-pro + quota available | `Generate` |
| provider-live + signed-in-pro + quota exhausted | `Buy credits` / `Wait for quota reset` |

### 5.3 Prompt Card

每张 active prompt card 必须是可独立完成任务的最小单元。

必需行为：

- Copy Prompt：永远可见、可点击、无登录。
- Open / Try in Editor：可见；deep link 带 slug / prompt。
- Provider tags：说明兼容，不暗示官方。
- Best for / Avoid if：帮助用户判断能不能用。
- Sample / before-after：不足时标注 sample preview；placeholder 不得 index。

### 5.4 Pricing CTA

Pricing CTA 必须服从 provider / paid / checkout 状态。

| 条件 | Pricing 页面 CTA |
|---|---|
| paid-disabled | `Join waitlist` / `Contact us` |
| checkout-disabled | `Join Pro waitlist` / `Get notified` |
| checkout-enabled + provider-disabled | `Get notified when generation is live`，不能卖生成套餐 |
| checkout-enabled + provider-preview | `Join Pro waitlist`，不能承诺 live generation |
| checkout-enabled + provider-live | Free / Pro / Business / Credit Pack 可展示；Pro / Credit 可 checkout；Business 首版 Contact only |

Pricing 文案必须先声明：

- Copy Prompt is free.
- Generation depends on provider availability.
- No unlimited generation.
- Provider failure does not charge credits.

### 5.5 Checkout

Checkout 只在真实可售卖能力存在时启用。

硬要求：

- 仅 `checkout-enabled + provider-live` 可售卖 Pro generation / credit pack。
- Business 首版只能 Contact / Waitlist，除非团队、seat、invoice、API、批量处理真实实现。
- Stripe Checkout 必须启用 automatic tax、billing address、tax id collection。
- webhook 必须处理 checkout completed、subscription updated / canceled、payment failed、refund。
- 订单和报表区分 subtotal / tax / total；tax 不算收入。

### 5.6 Copy Prompt

Copy Prompt 是 AIE 的最小可交付价值。

不可被以下状态阻挡：

- anonymous
- signed-in-free / signed-in-pro
- quota-exhausted
- provider-disabled / provider-preview / provider-live
- paid-disabled / checkout-disabled
- checkout error
- generation error

唯一允许禁用的情况：该 prompt 因安全、版权、合规、abuse 或内容质量原因被下架；此时页面也不得 index。

### 5.7 Upload

Upload 是增强能力，不等于 generation。

| 条件 | Upload 行为 |
|---|---|
| provider-disabled | 允许上传预览 / 变量替换 / prompt preview；清楚标注不会真实生成 |
| provider-preview | 允许上传并走 preview flow；不扣 credits |
| provider-live | 允许上传并进入 generation；生成前检查 auth / quota |
| anonymous | 可允许上传预览；如果生成需要登录，必须在生成前提示 |
| quota-exhausted | 仍可上传预览，但不能生成；展示 copy prompt / upgrade / buy credits |

Upload 隐私说明必须在上传区附近可见：使用自己的照片或有许可的照片；不要上传他人私密照片、名人肖像、官方文件或敏感身份材料。

### 5.8 Generate

Generate 是最高风险状态，必须最保守。

可用条件：

```text
provider_state=provider-live
AND auth/quota policy allows generation
AND quota_state=quota-available OR user can purchase/upgrade before generation
AND safety/upload validation passes
```

失败规则：

- provider error：不扣 credits，显示 retry / use externally / copy prompt。
- safety rejection：不扣 credits；说明原因和可修改方向。
- network timeout：不扣 credits，允许 retry。
- quota exhausted：不调用 provider，先展示升级 / 买 credits / reset。
- auth required：不调用 provider，先登录。

## 6. 首版范围收敛

### 6.1 v1 必做

v1 只承诺把“找同款效果 → 看示例 → 复制 prompt → 打开 editor → 理解 provider 状态”闭环做扎实。

v1 required：

1. 首页 `/`
   - 垂直首屏：H1 → short answer → editor / generator module。
   - 首屏附近 6-9 张 featured prompt cards。
   - Copy Prompt 与 Open in Editor 可见。
2. Prompt Library `/prompt-library`
   - 搜索、分类过滤、provider 过滤、排序。
   - 至少 60 条 active effect records。
   - 至少 30 张 index-ready cards。
3. RSP Hub `/rsp-editing-prompts`
   - India-first RSP/social prompt hub。
   - 至少 20 张 RSP / India / social cards 覆盖 hub 与详情。
   - updated date + unofficial disclaimer。
4. Editor `/ai-photo-prompt-editor`
   - effect slug / prompt deep link。
   - upload preview。
   - provider state banner。
   - Copy Prompt independent。
   - provider-live 时才真实 Generate。
5. Provider pages
   - `/gemini-photo-editing-prompts`
   - `/chatgpt-photo-editing-prompts`
   - `/nano-banana-photo-editing-prompts`（如 provider / 命名合规可控）
   - `/bing-image-creator-prompts`
   - 每页有 provider caveats、prompt cards、no official affiliation。
6. Core use-case pages
   - professional headshot
   - LinkedIn headshot
   - product photo
   - YouTube thumbnail
   - Instagram photo editing
   - background swap
   - photo enhance
   - couple / boy / girl / bike / cinematic / double exposure
7. Product-state contract implementation
   - auth / quota / provider / paid / checkout 状态全站一致。
8. SEO / route contract
   - indexable 页面有 canonical、title、H1、body、prompt cards、FAQ / schema。
   - noindex 页面不进 sitemap。
9. Analytics
   - prompt_copy_click、prompt_apply_to_editor、editor_upload_start、generate_click/success/error、no_provider_available_view、waitlist_click。

### 6.2 v1 允许 noindex / waitlist

以下内容可存在，但不得伪装成完整上线能力：

| 内容 | v1 状态 | 规则 |
|---|---|---|
| Festival pages: Holi / Eid / IPL / Ram Navami / Republic Day / Diwali | `index when ready`，不足则 noindex | 每页至少 3 张真实 prompt cards + updated date + cultural safety note 才能 index |
| `/prompts/[slug]` 批量详情页 | 部分 index，部分 noindex | 缺 unique prompt / visual / FAQ / internal links 的 detail 必须 noindex |
| Pro generation | waitlist 或 checkout，取决于 provider-live | provider-disabled / preview 时不能真实售卖 |
| Credit Pack | waitlist，除非 checkout + provider-live + credit accounting 完成 | 不能提前展示 Buy credits checkout |
| Business / API | Contact / Waitlist only | 不承诺 seat、invoice、SLA、API、批量 checkout |
| Saved prompts / favorites | 仅在登录和数据层完成后展示 | 未完成时放 future，不进 pricing 权益 |
| Recent edits history | future 或 hidden | 未完成不得作为 Pro 权益 |
| HD / no-watermark | 仅真实生成链路支持后展示 | 未实现不得售卖 |
| Batch product photo workflow | waitlist | 首版不做批处理工作台 |

### 6.3 future / 明确不做首版

v1 不做：

- 完整 Photoshop / Canva / Pixlr 式在线编辑器。
- 时间线、图层、画笔、局部蒙版、专业修图套件。
- 社区 UGC 投稿 / 评论 / 排行榜。
- 大规模自动生成几百个薄 SEO 页面。
- 未经确认的品牌 / 名人 / 官方模板下载。
- 官方 Gemini / ChatGPT / RSP integration 声明。
- Business seat management、invoice billing、API SLA、团队权限。
- 任意 prompt marketplace 或付费模板交易。
- “unlimited generation”。

## 7. Index / Noindex 决策规则

| 页面类型 | Index 条件 | Noindex 条件 |
|---|---|---|
| Homepage | 有真实 card、copy/open action、editor state | 无 |
| RSP Hub | hub + linked details 至少 20 张 RSP/social cards，首屏 3 张卡 | 少于 3 张真实卡或全是占位 |
| Prompt Library | 至少 60 active records，核心过滤可用 | 只有 demo/mock 或重复内容 |
| Provider page | 至少 3 张 provider-specific cards + caveats + FAQ | 无 provider-specific 内容、误导官方关系、内容不足 |
| Use-case category | 至少 3 张真实卡 + unique intro + FAQ | 少于 3 张卡、薄页、重复页 |
| Festival page | 至少 3 张真实卡 + updated date + cultural safety note + 时机合理 | 非时令、素材不足、文化风险未处理 |
| Effect detail | unique prompt + visual/sample + variables + best_for/avoid_if + FAQ + related links | 重复 prompt、无视觉、placeholder、版权/名人风险 |
| Pricing | 可 index，但不得误导可购状态 | 若全站 paid-disabled 且页面只有 waitlist，可 noindex 直到合同完整 |

## 8. QA 验收任务

QA 不验“页面存在”，只验用户任务链。

必测任务：

1. 匿名用户进入首页，5 秒内知道可以找 / 复制 / 应用 AI photo editing prompts。
2. 匿名用户从首页 card 复制 prompt，无需登录。
3. 匿名用户打开 `/prompt-library`，按 category/provider 过滤并复制 prompt。
4. 匿名用户打开 effect detail，看到 before/after 或 sample、prompt、variables、best_for、avoid_if、provider notes。
5. 匿名用户从 card/detail 打开 editor，prompt 与 effect slug 保留。
6. provider-disabled 时，editor 不出现假 Generate now；Copy Prompt 继续可用。
7. provider-preview 时，upload preview 可用，不扣 credits，文案清楚说明 preview-only。
8. provider-live + signed-in-free + quota available 时，可以生成，失败不扣 credits。
9. quota-exhausted 时，Generate 不调用 provider，展示 Upgrade / Buy credits / Copy Prompt instead。
10. checkout-disabled 时，所有购买 CTA 都是 waitlist / notify / contact，不跳假 checkout。
11. checkout-enabled 时，Stripe Tax / billing / tax id / webhook 证据齐全。
12. 移动端 390px / 430px 视口重复 Copy Prompt、Open in Editor、Upload、Quota 状态。

## 9. 下游交接要求

设计不得自行决定：

- 哪些状态可 Generate。
- provider disabled 时按钮怎么写。
- Pricing 是否能 checkout。
- Copy Prompt 是否需要登录。
- 哪些页面 index / noindex。

前端不得自行决定：

- auth / quota / provider / paid / checkout 状态组合。
- route alias / redirect / canonical。
- placeholder 页面是否进 sitemap。
- failed generation 是否扣 credit。

后端不得自行决定：

- paid-enabled 与 checkout-enabled 的销售文案。
- provider error 的扣费规则。
- Business/API 是否真实可购买。

所有下游实现必须引用本合同；若实现与本合同冲突，默认以本合同为准，除非墨策更新 PRD v4 并重新进入 Owner PRD Approval。
